48 lines
1.7 KiB
Java
48 lines
1.7 KiB
Java
package eu.dnetlib.broker.metrics;
|
|
|
|
import java.lang.reflect.Method;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
import io.prometheus.client.Summary;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.method.HandlerMethod;
|
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
|
@Component
|
|
public class RequestTimingInterceptor extends HandlerInterceptorAdapter implements MetricInterceptor {
|
|
|
|
private static final String REQ_PARAM_TIMING = "timing";
|
|
|
|
private static final Summary responseTimeInMs = Summary
|
|
.build()
|
|
.name("http_response_time_milliseconds")
|
|
.labelNames("method", "handler", "status")
|
|
.help("Request completed time in milliseconds")
|
|
.register();
|
|
|
|
@Override
|
|
public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception {
|
|
request.setAttribute(REQ_PARAM_TIMING, System.currentTimeMillis());
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void afterCompletion(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex) throws Exception {
|
|
final Long timingAttr = (Long) request.getAttribute(REQ_PARAM_TIMING);
|
|
final long completedTime = System.currentTimeMillis() - timingAttr;
|
|
|
|
String handlerLabel = handler.toString();
|
|
// get short form of handler method name
|
|
if (handler instanceof HandlerMethod) {
|
|
Method method = ((HandlerMethod) handler).getMethod();
|
|
handlerLabel = method.getDeclaringClass().getSimpleName() + "." + method.getName();
|
|
}
|
|
responseTimeInMs.labels(
|
|
request.getMethod(),
|
|
handlerLabel,
|
|
Integer.toString(response.getStatus())).observe(completedTime);
|
|
}
|
|
|
|
}
|