WANG 6 年之前
父節點
當前提交
286d66e93b

+ 94 - 1
src/main/java/cn/com/qmth/examcloud/web/actuator/ApiStatusEndpoint.java

@@ -8,6 +8,12 @@ import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 import org.springframework.context.annotation.Configuration;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import cn.com.qmth.examcloud.web.support.ApiInfo;
+import cn.com.qmth.examcloud.web.support.ApiInfoHolder;
+
 /**
  * 接口状态
  *
@@ -25,8 +31,95 @@ public class ApiStatusEndpoint {
 		ReportorHolder.getApiDataReportor().report();
 		List<ReportInfo> reportInfoList = ReportorHolder.getApiDataReportor().getReportInfoList();
 
+		ReportInfo reportInfo = reportInfoList.get(0);
+		List<MeterInfo> meterInfoList = reportInfo.getMeterInfoList();
+		List<TimerInfo> timerInfoList = reportInfo.getTimerInfoList();
+
+		Map<String, MeterInfo> meterInfoMap = Maps.newHashMap();
+
+		for (MeterInfo meterInfo : meterInfoList) {
+			String key = meterInfo.getKey();
+			if (!key.startsWith(MetricNames.API_EXCEPTION_METER.name())) {
+				continue;
+			}
+			String mapping = key.substring(MetricNames.API_TIMER.name().length());
+			meterInfoMap.put(mapping, meterInfo);
+		}
+
+		List<ApiStatusInfo> result = Lists.newArrayList();
+
+		for (TimerInfo timerInfo : timerInfoList) {
+			String key = timerInfo.getKey();
+			if (!key.startsWith(MetricNames.API_TIMER.name())) {
+				continue;
+			}
+
+			String mapping = key.substring(MetricNames.API_TIMER.name().length());
+
+			ApiStatusInfo apiStatusInfo = new ApiStatusInfo();
+			result.add(apiStatusInfo);
+
+			apiStatusInfo.setMapping(mapping);
+
+			ApiInfo apiInfo = ApiInfoHolder.getApiInfo(mapping);
+			apiStatusInfo.setDescription(apiInfo.getDescription());
+
+			apiStatusInfo.setRateUnit(timerInfo.getRateUnit());
+			apiStatusInfo.setDurationUnit(timerInfo.getDurationUnit());
+
+			apiStatusInfo.setCount(timerInfo.getCount());
+			apiStatusInfo.setMeanRate(timerInfo.getMeanRate());
+			apiStatusInfo.setOneMinuteRate(timerInfo.getOneMinuteRate());
+			apiStatusInfo.setFiveMinuteRate(timerInfo.getFiveMinuteRate());
+			apiStatusInfo.setFifteenMinuteRate(timerInfo.getFifteenMinuteRate());
+
+			apiStatusInfo.setMin(timerInfo.getMin());
+			apiStatusInfo.setMax(timerInfo.getMax());
+			apiStatusInfo.setMean(timerInfo.getMean());
+
+			apiStatusInfo.setP50(timerInfo.getP50());
+			apiStatusInfo.setP75(timerInfo.getP75());
+			apiStatusInfo.setP95(timerInfo.getP95());
+			apiStatusInfo.setP98(timerInfo.getP98());
+			apiStatusInfo.setP99(timerInfo.getP99());
+			apiStatusInfo.setP999(timerInfo.getP999());
+
+			MeterInfo meterInfo = meterInfoMap.get(mapping);
+			if (null == meterInfo) {
+				apiStatusInfo.setExceptionCount(0);
+				apiStatusInfo.setExceptionMeanRate(0);
+				apiStatusInfo.setExceptionOneMinuteRate(0);
+				apiStatusInfo.setExceptionFiveMinuteRate(0);
+				apiStatusInfo.setExceptionFifteenMinuteRate(0);
+
+				apiStatusInfo.setExceptionPercent(0);
+				apiStatusInfo.setExceptionMeanPercent(0);
+				apiStatusInfo.setExceptionOneMinutePercent(0);
+				apiStatusInfo.setExceptionFiveMinutePercent(0);
+				apiStatusInfo.setExceptionFifteenMinutePercent(0);
+			} else {
+				apiStatusInfo.setExceptionCount(meterInfo.getCount());
+				apiStatusInfo.setExceptionMeanRate(meterInfo.getMeanRate());
+				apiStatusInfo.setExceptionOneMinuteRate(meterInfo.getOneMinuteRate());
+				apiStatusInfo.setExceptionFiveMinuteRate(meterInfo.getFiveMinuteRate());
+				apiStatusInfo.setExceptionFifteenMinuteRate(meterInfo.getFifteenMinuteRate());
+
+				apiStatusInfo.setExceptionPercent(meterInfo.getCount() / timerInfo.getCount());
+				apiStatusInfo
+						.setExceptionMeanPercent(meterInfo.getMeanRate() / timerInfo.getMeanRate());
+				apiStatusInfo.setExceptionOneMinutePercent(
+						meterInfo.getOneMinuteRate() / timerInfo.getOneMinuteRate());
+				apiStatusInfo.setExceptionFiveMinutePercent(
+						meterInfo.getFiveMinuteRate() / timerInfo.getFiveMinuteRate());
+				apiStatusInfo.setExceptionFifteenMinutePercent(
+						meterInfo.getFifteenMinuteRate() / timerInfo.getFifteenMinuteRate());
+			}
+
+		}
+
 		Map<String, Object> map = new HashMap<>(16);
-		map.put("reportInfoList", reportInfoList);
+		map.put("result", result);
+		map.put("dateTime", reportInfo.getDateTime());
 		return map;
 	}
 

+ 285 - 0
src/main/java/cn/com/qmth/examcloud/web/actuator/ApiStatusInfo.java

@@ -0,0 +1,285 @@
+package cn.com.qmth.examcloud.web.actuator;
+
+public class ApiStatusInfo {
+
+	private String mapping;
+
+	private String description;
+
+	private Long count;
+
+	private double meanRate;
+
+	private double oneMinuteRate;
+
+	private double fiveMinuteRate;
+
+	private double fifteenMinuteRate;
+
+	private String rateUnit;
+
+	private double min;
+
+	private double max;
+
+	private double mean;
+
+	private String durationUnit;
+
+	private double p50;
+
+	private double p75;
+
+	private double p95;
+
+	private double p98;
+
+	private double p99;
+
+	private double p999;
+
+	private double exceptionCount;
+
+	private double exceptionMeanRate;
+
+	private double exceptionOneMinuteRate;
+
+	private double exceptionFiveMinuteRate;
+
+	private double exceptionFifteenMinuteRate;
+
+	private double exceptionPercent;
+
+	private double exceptionMeanPercent;
+
+	private double exceptionOneMinutePercent;
+
+	private double exceptionFiveMinutePercent;
+
+	private double exceptionFifteenMinutePercent;
+
+	public String getMapping() {
+		return mapping;
+	}
+
+	public void setMapping(String mapping) {
+		this.mapping = mapping;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Long getCount() {
+		return count;
+	}
+
+	public void setCount(Long count) {
+		this.count = count;
+	}
+
+	public double getMeanRate() {
+		return meanRate;
+	}
+
+	public void setMeanRate(double meanRate) {
+		this.meanRate = meanRate;
+	}
+
+	public double getOneMinuteRate() {
+		return oneMinuteRate;
+	}
+
+	public void setOneMinuteRate(double oneMinuteRate) {
+		this.oneMinuteRate = oneMinuteRate;
+	}
+
+	public double getFiveMinuteRate() {
+		return fiveMinuteRate;
+	}
+
+	public void setFiveMinuteRate(double fiveMinuteRate) {
+		this.fiveMinuteRate = fiveMinuteRate;
+	}
+
+	public double getFifteenMinuteRate() {
+		return fifteenMinuteRate;
+	}
+
+	public void setFifteenMinuteRate(double fifteenMinuteRate) {
+		this.fifteenMinuteRate = fifteenMinuteRate;
+	}
+
+	public String getRateUnit() {
+		return rateUnit;
+	}
+
+	public void setRateUnit(String rateUnit) {
+		this.rateUnit = rateUnit;
+	}
+
+	public double getMin() {
+		return min;
+	}
+
+	public void setMin(double min) {
+		this.min = min;
+	}
+
+	public double getMax() {
+		return max;
+	}
+
+	public void setMax(double max) {
+		this.max = max;
+	}
+
+	public double getMean() {
+		return mean;
+	}
+
+	public void setMean(double mean) {
+		this.mean = mean;
+	}
+
+	public String getDurationUnit() {
+		return durationUnit;
+	}
+
+	public void setDurationUnit(String durationUnit) {
+		this.durationUnit = durationUnit;
+	}
+
+	public double getP50() {
+		return p50;
+	}
+
+	public void setP50(double p50) {
+		this.p50 = p50;
+	}
+
+	public double getP75() {
+		return p75;
+	}
+
+	public void setP75(double p75) {
+		this.p75 = p75;
+	}
+
+	public double getP95() {
+		return p95;
+	}
+
+	public void setP95(double p95) {
+		this.p95 = p95;
+	}
+
+	public double getP98() {
+		return p98;
+	}
+
+	public void setP98(double p98) {
+		this.p98 = p98;
+	}
+
+	public double getP99() {
+		return p99;
+	}
+
+	public void setP99(double p99) {
+		this.p99 = p99;
+	}
+
+	public double getP999() {
+		return p999;
+	}
+
+	public void setP999(double p999) {
+		this.p999 = p999;
+	}
+
+	public double getExceptionCount() {
+		return exceptionCount;
+	}
+
+	public void setExceptionCount(double exceptionCount) {
+		this.exceptionCount = exceptionCount;
+	}
+
+	public double getExceptionMeanRate() {
+		return exceptionMeanRate;
+	}
+
+	public void setExceptionMeanRate(double exceptionMeanRate) {
+		this.exceptionMeanRate = exceptionMeanRate;
+	}
+
+	public double getExceptionOneMinuteRate() {
+		return exceptionOneMinuteRate;
+	}
+
+	public void setExceptionOneMinuteRate(double exceptionOneMinuteRate) {
+		this.exceptionOneMinuteRate = exceptionOneMinuteRate;
+	}
+
+	public double getExceptionFiveMinuteRate() {
+		return exceptionFiveMinuteRate;
+	}
+
+	public void setExceptionFiveMinuteRate(double exceptionFiveMinuteRate) {
+		this.exceptionFiveMinuteRate = exceptionFiveMinuteRate;
+	}
+
+	public double getExceptionFifteenMinuteRate() {
+		return exceptionFifteenMinuteRate;
+	}
+
+	public void setExceptionFifteenMinuteRate(double exceptionFifteenMinuteRate) {
+		this.exceptionFifteenMinuteRate = exceptionFifteenMinuteRate;
+	}
+
+	public double getExceptionPercent() {
+		return exceptionPercent;
+	}
+
+	public void setExceptionPercent(double exceptionPercent) {
+		this.exceptionPercent = exceptionPercent;
+	}
+
+	public double getExceptionMeanPercent() {
+		return exceptionMeanPercent;
+	}
+
+	public void setExceptionMeanPercent(double exceptionMeanPercent) {
+		this.exceptionMeanPercent = exceptionMeanPercent;
+	}
+
+	public double getExceptionOneMinutePercent() {
+		return exceptionOneMinutePercent;
+	}
+
+	public void setExceptionOneMinutePercent(double exceptionOneMinutePercent) {
+		this.exceptionOneMinutePercent = exceptionOneMinutePercent;
+	}
+
+	public double getExceptionFiveMinutePercent() {
+		return exceptionFiveMinutePercent;
+	}
+
+	public void setExceptionFiveMinutePercent(double exceptionFiveMinutePercent) {
+		this.exceptionFiveMinutePercent = exceptionFiveMinutePercent;
+	}
+
+	public double getExceptionFifteenMinutePercent() {
+		return exceptionFifteenMinutePercent;
+	}
+
+	public void setExceptionFifteenMinutePercent(double exceptionFifteenMinutePercent) {
+		this.exceptionFifteenMinutePercent = exceptionFifteenMinutePercent;
+	}
+
+}