ServiceMonitor.java
package cn.home1.oss.environment.admin;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.metrics.CounterService;
import org.springframework.boot.actuate.metrics.GaugeService;
import org.springframework.stereotype.Component;
/**
* Created by leo on 17/1/10. This class is to gather the times a method is invoked and the execution time for a
* method.
*/
@Aspect
@Component
public class ServiceMonitor {
private final CounterService counterService;
private final GaugeService gaugeService;
public ServiceMonitor(final CounterService counterService, final GaugeService gaugeService) {
this.counterService = counterService;
this.gaugeService = gaugeService;
}
@Autowired
public ServiceMonitor serviceMonitor(final CounterService counterService, final GaugeService gaugeService) {
return new ServiceMonitor(counterService, gaugeService);
}
@Before("execution(* cn.home1.oss.environment.admin.controller.*.*(..))")
public void countServiceInvoke(final JoinPoint joinPoint) {
this.counterService.increment("meter." + joinPoint.getSignature() + "-invokeNum");
}
@Around("execution(* cn.home1.oss.environment.admin.controller.*.*(..))")
public Object latencyService(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long start = System.currentTimeMillis();
final Object proceed = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
this.gaugeService.submit(proceedingJoinPoint.getSignature().toString() + "-invokeTime", (double) end - start);
return proceed;
}
}