WANG 6 years ago
parent
commit
8002787058

+ 4 - 0
pom.xml

@@ -111,6 +111,10 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+		<dependency>
+			<groupId>io.dropwizard.metrics</groupId>
+			<artifactId>metrics-core</artifactId>
+		</dependency>
 
 	</dependencies>
 

+ 59 - 0
src/main/java/cn/com/qmth/examcloud/web/interceptor/StatisticInterceptor.java

@@ -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 {
+		// 可以统计失败以及成功次数
+	}
+}