8 use http\Client\Request
;
10 use Psr\Log\LoggerInterface
;
12 class ClientObserver
implements SplObserver
16 function __construct(LoggerInterface
$logger) {
17 $this->logger
= $logger;
20 function update(SplSubject
$client, Request
$request = null, $progress = null) {
21 switch ($progress->info
) {
23 if (!$progress->started
) {
24 $message = sprintf("API-Shot: start %s %s", $request->getRequestMethod(), $request->getRequestUrl());
25 $this->logger
->debug($message);
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());
39 $this->logger
->info($message);