Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / HttpDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
5 use Drupal\webprofiler\Http\HttpClientMiddleware;
6 use Drupal\webprofiler\DrupalDataCollectorInterface;
7 use Drupal\Core\StringTranslation\StringTranslationTrait;
8 use Symfony\Component\HttpFoundation\Request;
9 use Symfony\Component\HttpFoundation\Response;
10 use Symfony\Component\HttpKernel\DataCollector\DataCollector;
11
12 /**
13  * Collects data about http calls during request.
14  */
15 class HttpDataCollector extends DataCollector implements DrupalDataCollectorInterface {
16
17   use StringTranslationTrait, DrupalDataCollectorTrait;
18
19   /**
20    * @var \GuzzleHttp\Client
21    */
22   private $middleware;
23
24   /**
25    * @param \Drupal\webprofiler\Http\HttpClientMiddleware $middleware
26    */
27   public function __construct(HttpClientMiddleware $middleware) {
28     $this->middleware = $middleware;
29
30     $this->data['completed'] = [];
31     $this->data['failed'] = [];
32   }
33
34   /**
35    * {@inheritdoc}
36    */
37   public function collect(Request $request, Response $response, \Exception $exception = NULL) {
38     $completed = $this->middleware->getCompletedRequests();
39     $failed = $this->middleware->getFailedRequests();
40
41     foreach ($completed as $data) {
42       /** @var \GuzzleHttp\Psr7\Request $request */
43       $request = $data['request'];
44       /** @var \GuzzleHttp\Psr7\Response $response */
45       $response = $data['response'];
46       /** @var \GuzzleHttp\TransferStats $stats */
47       $stats = $request->stats;
48
49       $uri = $request->getUri();
50       $this->data['completed'][] = [
51         'request' => [
52           'method' => $request->getMethod(),
53           'uri' => [
54             'schema' => $uri->getScheme(),
55             'host' => $uri->getHost(),
56             'port' => $uri->getPort(),
57             'path' => $uri->getPath(),
58             'query' => $uri->getQuery(),
59             'fragment' => $uri->getFragment(),
60           ],
61           'headers' => $request->getHeaders(),
62           'protocol' => $request->getProtocolVersion(),
63           'request_target' => $request->getRequestTarget(),
64           'stats' => [
65             'transferTime' => $stats->getTransferTime(),
66             'handlerStats' => $stats->getHandlerStats(),
67           ],
68         ],
69         'response' => [
70           'phrase' => $response->getReasonPhrase(),
71           'status' => $response->getStatusCode(),
72           'headers' => $response->getHeaders(),
73           'protocol' => $response->getProtocolVersion(),
74         ],
75       ];
76     }
77
78     foreach ($failed as $data) {
79       /** @var \GuzzleHttp\Psr7\Request $request */
80       $request = $data['request'];
81       /** @var \GuzzleHttp\Psr7\Response $response */
82       $response = $data['response'];
83
84       $uri = $request->getUri();
85       $failureData = [
86         'request' => [
87           'method' => $request->getMethod(),
88           'uri' => [
89             'schema' => $uri->getScheme(),
90             'host' => $uri->getHost(),
91             'port' => $uri->getPort(),
92             'path' => $uri->getPath(),
93             'query' => $uri->getQuery(),
94             'fragment' => $uri->getFragment(),
95           ],
96           'headers' => $request->getHeaders(),
97           'protocol' => $request->getProtocolVersion(),
98           'request_target' => $request->getRequestTarget(),
99         ],
100       ];
101
102       if ($response) {
103         $failureData['response'] = [
104           'phrase' => $response->getReasonPhrase(),
105           'status' => $response->getStatusCode(),
106           'headers' => $response->getHeaders(),
107           'protocol' => $response->getProtocolVersion(),
108         ];
109       }
110
111       $this->data['failed'][] = $failureData;
112     }
113   }
114
115   /**
116    * @return int
117    */
118   public function getCompletedRequestsCount() {
119     return count($this->getCompletedRequests());
120   }
121
122   /**
123    * @return array
124    */
125   public function getCompletedRequests() {
126     return $this->data['completed'];
127   }
128
129   /**
130    * @return int
131    */
132   public function getFailedRequestsCount() {
133     return count($this->getFailedRequests());
134   }
135
136   /**
137    * @return array
138    */
139   public function getFailedRequests() {
140     return $this->data['failed'];
141   }
142
143   /**
144    * {@inheritdoc}
145    */
146   public function getName() {
147     return 'http';
148   }
149
150   /**
151    * {@inheritdoc}
152    */
153   public function getTitle() {
154     return $this->t('Http');
155   }
156
157   /**
158    * {@inheritdoc}
159    */
160   public function getPanelSummary() {
161     return $this->t(
162       'Completed @completed, error @error', [
163       '@completed' => $this->getCompletedRequestsCount(),
164       '@error' => $this->getFailedRequestsCount(),
165     ]
166     );
167   }
168
169   /**
170    * {@inheritdoc}
171    */
172   public function getIcon() {
173     return 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATlJREFUeNrsleERgjAMha0TdISOwAZ2BEZghI7ABo7AOQFuwAjoBLgBblBbfb0LudByp/4jdw+PNnxtkqYq7/3h13Y8/MF26B9spfo6yAX1QSa6EY2Y0xLrzROgddAMOcgLmuFbhDqyG00W8Rm1JWgEWCG0oQBuJKjGigNUs/xWUJdJheZQJzhZFGkgKWkw1mM8bmTCvOPQcSVXrTA+Ydc0kujXJGg6p5VwrG5BJzb2CLriN9kT74afUylPloQ+kdDPELXpg1qGvwbtURwjFGkkC8RIZw6d2QeO7MII81wRbDm0Z068Zf0G1bxQl8z1UH1zoQwk9NRZdkPoHt+KbZoqa+HYZS4T3iimdEvRDrIF4KIRclBNjk+uSB2/eBJUvR9KSek26BZHOit2zl3oqkV91P6//3N7CTAAIIc/qj2gy4gAAAAASUVORK5CYII=';
174   }
175 }