Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / Http / HttpClientMiddleware.php
1 <?php
2
3 namespace Drupal\webprofiler\Http;
4
5 use GuzzleHttp\Exception\RequestException;
6 use GuzzleHttp\TransferStats;
7 use Psr\Http\Message\RequestInterface;
8
9 /**
10  * Class HttpClientMiddleware
11  */
12 class HttpClientMiddleware {
13
14   /**
15    * @var array
16    */
17   private $completedRequests;
18
19   /**
20    * @var array
21    */
22   private $failedRequests;
23
24   /**
25    *
26    */
27   public function __construct() {
28     $this->completedRequests = [];
29     $this->failedRequests = [];
30   }
31
32   /**
33    * {@inheritdoc}
34    */
35   public function __invoke() {
36     return function ($handler) {
37       return function (RequestInterface $request, array $options) use ($handler) {
38
39         $options['on_stats'] = function (TransferStats $stats) use ($request) {
40           $request->stats = $stats;
41         };
42
43         return $handler($request, $options)->then(
44           function ($response) use ($request) {
45
46             $this->completedRequests[] = [
47               'request' => $request,
48               'response' => $response,
49             ];
50
51             return $response;
52           },
53           function ($reason) use ($request) {
54             $response = $reason instanceof RequestException
55               ? $reason->getResponse()
56               : null;
57
58             $this->failedRequests[] = [
59               'request' => $request,
60               'response' => $response,
61               'message' => $reason->getMessage(),
62             ];
63
64             return \GuzzleHttp\Promise\rejection_for($reason);
65           }
66         );
67       };
68     };
69   }
70
71   /**
72    * @return array
73    */
74   public function getCompletedRequests() {
75     return $this->completedRequests;
76   }
77
78   /**
79    * @return array
80    */
81   public function getFailedRequests() {
82     return $this->failedRequests;
83   }
84 }