EOS-WebAPI/Common/MetricsFilterAttribute.cs
Nidhi Bhargava d0ac8a7790 Code Commit
2025-09-04 17:30:22 +05:30

38 lines
1.4 KiB
C#

using System.Diagnostics;
using System.Net;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using Prometheus;
namespace VECV_WebApi.Filters
{
public class MetricsFilterAttribute : ActionFilterAttribute
{
private static readonly Counter RequestCounter = Metrics.CreateCounter(
"app_http_requests_total", "Total HTTP requests", new[] { "method", "endpoint", "status_code" });
private static readonly Histogram ResponseTime = Metrics.CreateHistogram(
"app_http_response_duration_seconds", "API response time", new[] { "endpoint" });
private Stopwatch _timer;
public override void OnActionExecuting(HttpActionContext actionContext)
{
_timer = Stopwatch.StartNew();
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
_timer.Stop();
var request = actionExecutedContext.Request;
var response = actionExecutedContext.Response;
var endpoint = request.RequestUri.AbsolutePath;
var method = request.Method.Method;
var status = ((int)(response?.StatusCode ?? HttpStatusCode.InternalServerError)).ToString();
RequestCounter.Labels(method, endpoint, status).Inc();
ResponseTime.Labels(endpoint).Observe(_timer.Elapsed.TotalSeconds);
}
}
}