|
@@ -0,0 +1,59 @@
|
|
|
+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;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
+import org.springframework.web.servlet.ModelAndView;
|
|
|
+
|
|
|
+import com.codahale.metrics.ConsoleReporter;
|
|
|
+import com.codahale.metrics.Meter;
|
|
|
+import com.codahale.metrics.MetricRegistry;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 统计拦截器
|
|
|
+ *
|
|
|
+ * @author WANGWEI
|
|
|
+ * @date 2019年7月24日
|
|
|
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
|
|
|
+ */
|
|
|
+public class StatisticInterceptor implements HandlerInterceptor {
|
|
|
+
|
|
|
+ private Map<String, Meter> metricMap = new HashMap<>();
|
|
|
+
|
|
|
+ private MetricRegistry metrics = new MetricRegistry();
|
|
|
+
|
|
|
+ ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).convertRatesTo(TimeUnit.SECONDS)
|
|
|
+ .convertDurationsTo(TimeUnit.MILLISECONDS).build();
|
|
|
+
|
|
|
+ public StatisticInterceptor() {
|
|
|
+ metricMap.put("/", metrics.meter("/"));
|
|
|
+ reporter.start(1, TimeUnit.SECONDS);// 1s报道一次
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
|
|
|
+ Object handler) throws Exception {
|
|
|
+ String servletPath = request.getServletPath();
|
|
|
+ if (metricMap.containsKey(servletPath)) {
|
|
|
+ metricMap.get(servletPath).mark();// 统计tps
|
|
|
+ }
|
|
|
+ reporter.report();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
|
|
+ ModelAndView modelAndView) throws Exception {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
|
|
+ Object handler, Exception ex) throws Exception {
|
|
|
+ // 可以统计失败以及成功次数
|
|
|
+ }
|
|
|
+}
|