add rate limits to logs
[pharext/pharext.org] / app / Github / ClientObserver.php
1 <?php
2
3 namespace app\Github;
4
5 use SplObserver;
6 use SplSubject;
7
8 use http\Client\Request;
9
10 use Psr\Log\LoggerInterface;
11
12 class ClientObserver implements SplObserver
13 {
14 private $logger;
15
16 function __construct(LoggerInterface $logger) {
17 $this->logger = $logger;
18 }
19
20 function update(SplSubject $client, Request $request = null, $progress = null) {
21 switch ($progress->info) {
22 case "start":
23 if (!$progress->started) {
24 $message = sprintf("API-Shot: start %s %s", $request->getRequestMethod(), $request->getRequestUrl());
25 $this->logger->debug($message);
26 }
27 break;
28 case "finished":
29 $response = $client->getResponse($request);
30 $message = sprintf("API-Shot: finished [%d] (rate-limit:%d/%d) %s %s",
31 $response->getResponseCode(),
32 $response->getHeader("X-RateLimit-Remaining"),
33 $response->getHeader("X-RateLimit-Limit"),
34 $request->getRequestMethod(),
35 $request->getRequestUrl());
36 if ($response->getResponseCode() >= 400 || $response->getTransferInfo("error")) {
37 $this->logger->error($message, (array) $response->getTransferInfo());
38 } else {
39 $this->logger->info($message);
40 }
41 break;
42 default:
43 break;
44 }
45 }
46 }