66use Prometheus \Counter ;
77use Illuminate \Http \Request ;
88use Prometheus \CollectorRegistry ;
9+ use Prometheus \Histogram ;
910
1011class MetricCollector
1112{
1213 protected Counter $ http_request_counter ;
14+ protected Histogram $ http_latency_histogram ;
1315
1416 public function __construct (CollectorRegistry $ collectorRegistry )
1517 {
@@ -22,6 +24,14 @@ public function __construct(CollectorRegistry $collectorRegistry)
2224 'HTTP request Total ' , // Counter Help string
2325 ['path ' ], // Counter labels
2426 );
27+
28+ $ this ->http_latency_histogram = $ collectorRegistry ->getOrRegisterHistogram (
29+ config ('prometheus.namespace ' ), // Counter namespace
30+ 'http_request_latency_seconds ' , // Counter name
31+ 'Latency of HTTP requests. ' , // Counter Help string
32+ ['path ' ],
33+ [0.1 , 0.3 , 0.5 , 0.7 , 0.9 ]
34+ );
2535 }
2636
2737 /**
@@ -33,6 +43,9 @@ public function __construct(CollectorRegistry $collectorRegistry)
3343 */
3444 public function handle (Request $ request , Closure $ next )
3545 {
46+ // Record start time
47+ $ start = microtime (true );
48+
3649 $ response = $ next ($ request );
3750
3851 // Skip metric collect
@@ -44,6 +57,10 @@ public function handle(Request $request, Closure $next)
4457 // Increase the number of http requests by 1 for label uri
4558 $ this ->http_request_counter ->incBy (1 , [$ request ->route ()->uri ]);
4659
60+ // Observe latency of http requests by label uri
61+ $ latency = \microtime (true ) - $ start ;
62+ $ this ->http_latency_histogram ->observe ($ latency ,[$ request ->route ()->uri ]);
63+
4764 return $ response ;
4865 }
4966
0 commit comments