|
@@ -1,7 +1,5 @@
|
|
|
package cn.com.qmth.examcloud.web.interceptor;
|
|
|
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
@@ -10,8 +8,9 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
|
|
|
import com.codahale.metrics.ConsoleReporter;
|
|
|
-import com.codahale.metrics.Meter;
|
|
|
import com.codahale.metrics.MetricRegistry;
|
|
|
+import com.codahale.metrics.Timer;
|
|
|
+import com.codahale.metrics.Timer.Context;
|
|
|
|
|
|
import cn.com.qmth.examcloud.web.enums.HttpServletRequestAttribute;
|
|
|
import cn.com.qmth.examcloud.web.support.ApiInfo;
|
|
@@ -25,8 +24,6 @@ import cn.com.qmth.examcloud.web.support.ApiInfo;
|
|
|
*/
|
|
|
public class StatisticInterceptor implements HandlerInterceptor {
|
|
|
|
|
|
- private Map<ApiInfo, Meter> meterMap = new HashMap<>();
|
|
|
-
|
|
|
private MetricRegistry metrics = new MetricRegistry();
|
|
|
|
|
|
ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).convertRatesTo(TimeUnit.SECONDS)
|
|
@@ -39,31 +36,27 @@ public class StatisticInterceptor implements HandlerInterceptor {
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
|
|
|
Object handler) throws Exception {
|
|
|
+
|
|
|
ApiInfo apiInfo = (ApiInfo) request
|
|
|
.getAttribute(HttpServletRequestAttribute.$_API_INFO.name());
|
|
|
+
|
|
|
if (null == apiInfo) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- Meter meter = meterMap.get(apiInfo);
|
|
|
- if (null == meter) {
|
|
|
- synchronized (this) {
|
|
|
- meter = meterMap.get(apiInfo);
|
|
|
- if (null == meter) {
|
|
|
- meter = metrics.meter(apiInfo.getMapping());
|
|
|
- meterMap.put(apiInfo, meter);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ Timer timer = metrics
|
|
|
+ .timer(MetricRegistry.name(apiInfo.getMapping(), apiInfo.getDescription()));
|
|
|
+ Context ctx = timer.time();
|
|
|
+ request.setAttribute(HttpServletRequestAttribute.$_METRICS_TIMER_CTX.name(), ctx);
|
|
|
|
|
|
- meter.mark();
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
|
|
Object handler, Exception ex) throws Exception {
|
|
|
-
|
|
|
+ Context ctx = (Context) request
|
|
|
+ .getAttribute(HttpServletRequestAttribute.$_METRICS_TIMER_CTX.name());
|
|
|
+ ctx.stop();
|
|
|
}
|
|
|
-
|
|
|
}
|