Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / HttpDataCollector.php
diff --git a/web/modules/contrib/devel/webprofiler/src/DataCollector/HttpDataCollector.php b/web/modules/contrib/devel/webprofiler/src/DataCollector/HttpDataCollector.php
new file mode 100644 (file)
index 0000000..8544083
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+
+namespace Drupal\webprofiler\DataCollector;
+
+use Drupal\webprofiler\Http\HttpClientMiddleware;
+use Drupal\webprofiler\DrupalDataCollectorInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\DataCollector\DataCollector;
+
+/**
+ * Collects data about http calls during request.
+ */
+class HttpDataCollector extends DataCollector implements DrupalDataCollectorInterface {
+
+  use StringTranslationTrait, DrupalDataCollectorTrait;
+
+  /**
+   * @var \GuzzleHttp\Client
+   */
+  private $middleware;
+
+  /**
+   * @param \Drupal\webprofiler\Http\HttpClientMiddleware $middleware
+   */
+  public function __construct(HttpClientMiddleware $middleware) {
+    $this->middleware = $middleware;
+
+    $this->data['completed'] = [];
+    $this->data['failed'] = [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function collect(Request $request, Response $response, \Exception $exception = NULL) {
+    $completed = $this->middleware->getCompletedRequests();
+    $failed = $this->middleware->getFailedRequests();
+
+    foreach ($completed as $data) {
+      /** @var \GuzzleHttp\Psr7\Request $request */
+      $request = $data['request'];
+      /** @var \GuzzleHttp\Psr7\Response $response */
+      $response = $data['response'];
+      /** @var \GuzzleHttp\TransferStats $stats */
+      $stats = $request->stats;
+
+      $uri = $request->getUri();
+      $this->data['completed'][] = [
+        'request' => [
+          'method' => $request->getMethod(),
+          'uri' => [
+            'schema' => $uri->getScheme(),
+            'host' => $uri->getHost(),
+            'port' => $uri->getPort(),
+            'path' => $uri->getPath(),
+            'query' => $uri->getQuery(),
+            'fragment' => $uri->getFragment(),
+          ],
+          'headers' => $request->getHeaders(),
+          'protocol' => $request->getProtocolVersion(),
+          'request_target' => $request->getRequestTarget(),
+          'stats' => [
+            'transferTime' => $stats->getTransferTime(),
+            'handlerStats' => $stats->getHandlerStats(),
+          ],
+        ],
+        'response' => [
+          'phrase' => $response->getReasonPhrase(),
+          'status' => $response->getStatusCode(),
+          'headers' => $response->getHeaders(),
+          'protocol' => $response->getProtocolVersion(),
+        ],
+      ];
+    }
+
+    foreach ($failed as $data) {
+      /** @var \GuzzleHttp\Psr7\Request $request */
+      $request = $data['request'];
+      /** @var \GuzzleHttp\Psr7\Response $response */
+      $response = $data['response'];
+
+      $uri = $request->getUri();
+      $failureData = [
+        'request' => [
+          'method' => $request->getMethod(),
+          'uri' => [
+            'schema' => $uri->getScheme(),
+            'host' => $uri->getHost(),
+            'port' => $uri->getPort(),
+            'path' => $uri->getPath(),
+            'query' => $uri->getQuery(),
+            'fragment' => $uri->getFragment(),
+          ],
+          'headers' => $request->getHeaders(),
+          'protocol' => $request->getProtocolVersion(),
+          'request_target' => $request->getRequestTarget(),
+        ],
+      ];
+
+      if ($response) {
+        $failureData['response'] = [
+          'phrase' => $response->getReasonPhrase(),
+          'status' => $response->getStatusCode(),
+          'headers' => $response->getHeaders(),
+          'protocol' => $response->getProtocolVersion(),
+        ];
+      }
+
+      $this->data['failed'][] = $failureData;
+    }
+  }
+
+  /**
+   * @return int
+   */
+  public function getCompletedRequestsCount() {
+    return count($this->getCompletedRequests());
+  }
+
+  /**
+   * @return array
+   */
+  public function getCompletedRequests() {
+    return $this->data['completed'];
+  }
+
+  /**
+   * @return int
+   */
+  public function getFailedRequestsCount() {
+    return count($this->getFailedRequests());
+  }
+
+  /**
+   * @return array
+   */
+  public function getFailedRequests() {
+    return $this->data['failed'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return 'http';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTitle() {
+    return $this->t('Http');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPanelSummary() {
+    return $this->t(
+      'Completed @completed, error @error', [
+      '@completed' => $this->getCompletedRequestsCount(),
+      '@error' => $this->getFailedRequestsCount(),
+    ]
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIcon() {
+    return 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATlJREFUeNrsleERgjAMha0TdISOwAZ2BEZghI7ABo7AOQFuwAjoBLgBblBbfb0LudByp/4jdw+PNnxtkqYq7/3h13Y8/MF26B9spfo6yAX1QSa6EY2Y0xLrzROgddAMOcgLmuFbhDqyG00W8Rm1JWgEWCG0oQBuJKjGigNUs/xWUJdJheZQJzhZFGkgKWkw1mM8bmTCvOPQcSVXrTA+Ydc0kujXJGg6p5VwrG5BJzb2CLriN9kT74afUylPloQ+kdDPELXpg1qGvwbtURwjFGkkC8RIZw6d2QeO7MII81wRbDm0Z068Zf0G1bxQl8z1UH1zoQwk9NRZdkPoHt+KbZoqa+HYZS4T3iimdEvRDrIF4KIRclBNjk+uSB2/eBJUvR9KSek26BZHOit2zl3oqkV91P6//3N7CTAAIIc/qj2gy4gAAAAASUVORK5CYII=';
+  }
+}