Project

General

Profile

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
}
(2-2/4)