在原有的基础上增加计数器:命名空间App\Http\Middleware;使用Closure;使用Illuminate\Http\Request;使用traumferienwohnungen\PrometheusExporter\Middleware\AbstractResponseTimeMiddleware;classPrometheusMonitorextendsAbstractResponseTimeMiddleware{protectedfunctiongetRouteNames(){$route];foreach(\Route::getRoutes()as$route){$routeNames[]='/'.ltrim($route->uri(),'/');}返回$routeNames;}/***处理传入的请求。**@param\Illuminate\Http\Request$request*@param\Closure$next*@returnmixed*/publicfunctionhandle(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);返回$响应;}publicfunctiongetRouteName(){returnrequest()->getRequestUri();}publicfunctioninitRequestMetrics($method,$status){$namespace=config('prometheus_exporter.namespace_http_server');$labelNames=$this->getRequestCounterLabelNames();$name='request_wuc';$help='http_requests计数';$counter=$this->registry->getOrRegisterCounter($namespace,$name,$help,$labelNames);$counter->incBy(1,[$this->getRouteName(),$method,$status]);}}
