/** * @param RequestEnded $event */ public function onRequestEnd(RequestEnded $event) { $request = $event->getRequest(); if (null === ($requestTime = $request->attributes->get('_tolerance_request_time', null))) { $this->logger !== null && $this->logger->debug('The request do not contain the start time'); return; } $requestDurationInSeconds = microtime(true) - (double) $requestTime; $requestDurationInMilliseconds = $requestDurationInSeconds * 1000; $namespace = $this->requestMetricNamespaceResolver->resolve($request); $this->metricPublisher->publish([new Metric($namespace, $requestDurationInMilliseconds, Metric::TYPE_TIMING), new Metric($namespace, null, Metric::TYPE_INCREMENT)]); }
function it_publishes_the_timing_and_increment_metrics(MetricPublisher $metricPublisher, RequestMetricNamespaceResolver $requestMetricNamespaceResolver) { $request = new Request([], [], ['_tolerance_request_time' => 123456.789]); $requestMetricNamespaceResolver->resolve($request)->willReturn('the_namespace'); $metricPublisher->publish(Argument::that(function ($metrics) { if (!is_array($metrics)) { return false; } elseif (count($metrics) != 2) { return false; } elseif ($metrics[0]->getName() != 'the_namespace') { return false; } return true; }))->shouldBeCalled(); $this->onRequestEnd(new RequestEnded($request)); }