1
|
|
|
<?php |
2
|
|
|
|
|
|
|
|
3
|
|
|
namespace Hhxsv5\LaravelS\Components\Prometheus\Collectors; |
4
|
|
|
|
5
|
|
|
use Hhxsv5\LaravelS\Components\Prometheus\PrometheusCollector; |
6
|
|
|
|
7
|
|
|
class HttpRequestCollector extends PrometheusCollector |
|
|
|
|
8
|
|
|
{ |
9
|
|
|
public function collect(array $params = []) |
|
|
|
|
10
|
|
|
{ |
11
|
|
|
/**@var \Illuminate\Http\Request $request */ |
|
|
|
|
12
|
|
|
/**@var \Illuminate\Http\Response $response */ |
|
|
|
|
13
|
|
|
list($request, $response) = $params; |
14
|
|
|
if (!$this->config['observe_request']) { |
15
|
|
|
return; |
16
|
|
|
} |
17
|
|
|
|
18
|
|
|
$cost = microtime(true) - $request->server('REQUEST_TIME_FLOAT'); |
19
|
|
|
$status = $response->getStatusCode(); |
20
|
|
|
if (isset($this->config['ignored_http_codes'][$status])) { |
21
|
|
|
// Ignore the requests. |
22
|
|
|
return; |
23
|
|
|
} |
24
|
|
|
|
25
|
|
|
// Http Request Stats |
26
|
|
|
$requestLabels = http_build_query([ |
|
|
|
|
27
|
|
|
'method' => $request->getMethod(), |
28
|
|
|
'uri' => $request->getPathInfo(), |
29
|
|
|
'status' => $status, |
30
|
|
|
]); |
|
|
|
|
31
|
|
|
// Key Format: prefix+metric_name+metric_type+metric_labels |
32
|
|
|
$countKey = implode($this->config['apcu_key_separator'], [$this->config['apcu_key_prefix'], 'http_server_requests_seconds_count', 'summary', $requestLabels]); |
33
|
|
|
$sumKey = implode($this->config['apcu_key_separator'], [$this->config['apcu_key_prefix'], 'http_server_requests_seconds_sum', 'summary', $requestLabels]); |
34
|
|
|
apcu_inc($countKey, 1, $success, $this->config['apcu_key_max_age']); |
35
|
|
|
apcu_inc($sumKey, round($cost * 1000000), $success, $this->config['apcu_key_max_age']); // Time unit: μs |
|
|
|
|
36
|
|
|
} |
37
|
|
|
} |