在原有的基础上增加 Counter 计数器:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use traumferienwohnungen\PrometheusExporter\Middleware\AbstractResponseTimeMiddleware;
class PrometheusMonitor extends AbstractResponseTimeMiddleware
{
protected function getRouteNames()
{
$routeNames = [];
foreach (\Route::getRoutes() as $route){
$routeNames[] = ‘/’.ltrim($route->uri(), ‘/’);
}
return $routeNames;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (defined(‘LARAVEL_START’)){
$start = LARAVEL_START;
} elseif (defined(‘LUMEN_START’)){
$start = LUMEN_START;
} else {
$start = microtime(true);
}
$this->request = $request;
/** @var \Illuminate\Http\Response $response */
$response = $next($request);
$route_name = $this->getRouteName();
$method = $request->getMethod();
$status = $response->getStatusCode();
$duration = microtime(true) – $start;
$duration_milliseconds = $duration * 1000.0;
$this->countRequest($route_name, $method, $status, $duration_milliseconds);
$this->initRequestMetrics($method, $status);
return $response;
}
public function getRouteName(){
return request()->getRequestUri();
}
public function initRequestMetrics($method, $status)
{
$namespace = config(‘prometheus_exporter.namespace_http_server’);
$labelNames = $this->getRequestCounterLabelNames();
$name = ‘request_wuc’;
$help = ‘http_requests count’;
$counter = $this->registry->getOrRegisterCounter(
$namespace, $name, $help, $labelNames
);
$counter->incBy(1, [$this->getRouteName(), $method, $status]);
}
}