/**
  * @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));
 }