1
|
package eu.dnetlib.metrics;
|
2
|
|
3
|
import java.lang.reflect.Method;
|
4
|
import javax.servlet.http.HttpServletRequest;
|
5
|
import javax.servlet.http.HttpServletResponse;
|
6
|
|
7
|
import io.prometheus.client.Counter;
|
8
|
import org.springframework.stereotype.Component;
|
9
|
import org.springframework.web.method.HandlerMethod;
|
10
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
11
|
|
12
|
@Component
|
13
|
public class RequestCounterInterceptor extends HandlerInterceptorAdapter implements MetricInterceptor {
|
14
|
|
15
|
private static final Counter requestTotal = Counter.build()
|
16
|
.name("http_requests_total")
|
17
|
.labelNames("method", "handler", "status")
|
18
|
.help("Http Request Total").register();
|
19
|
|
20
|
@Override
|
21
|
public void afterCompletion(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception e) throws Exception {
|
22
|
|
23
|
String handlerLabel = handler.toString();
|
24
|
// get short form of handler method name
|
25
|
if (handler instanceof HandlerMethod) {
|
26
|
Method method = ((HandlerMethod) handler).getMethod();
|
27
|
handlerLabel = method.getDeclaringClass().getSimpleName() + "." + method.getName();
|
28
|
}
|
29
|
requestTotal.labels(
|
30
|
request.getMethod(),
|
31
|
handlerLabel,
|
32
|
Integer.toString(response.getStatus())).inc();
|
33
|
}
|
34
|
|
35
|
}
|