CatAspect.java 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import com.dianping.cat.Cat;
  2. import com.dianping.cat.message.Transaction;
  3. import org.apache.commons.lang3.StringUtils;
  4. import org.aspectj.lang.ProceedingJoinPoint;
  5. import org.aspectj.lang.annotation.After;
  6. import org.aspectj.lang.annotation.Around;
  7. import org.aspectj.lang.annotation.Aspect;
  8. import org.springframework.web.context.request.RequestContextHolder;
  9. import org.springframework.web.context.request.ServletRequestAttributes;
  10. import javax.servlet.http.HttpServletRequest;
  11. @Aspect
  12. public class CatAspect {
  13. @Around("@annotation(catTransaction)")
  14. public Object catTransactionProcess(ProceedingJoinPoint pjp, CatTransaction catTransaction) throws Throwable {
  15. String transName = pjp.getSignature().getDeclaringType().getSimpleName() + "." + pjp.getSignature().getName();
  16. if(StringUtils.isNotBlank(catTransaction.name())){
  17. transName = catTransaction.name();
  18. }
  19. Transaction t = Cat.newTransaction(catTransaction.type(), transName);
  20. try {
  21. Object result = pjp.proceed();
  22. t.setStatus(Transaction.SUCCESS);
  23. return result;
  24. } catch (Throwable e) {
  25. t.setStatus(e);
  26. throw e;
  27. }finally{
  28. t.complete();
  29. }
  30. }
  31. @Around("@annotation(catCacheTransaction)")
  32. public Object catCacheTransactionProcess(ProceedingJoinPoint pjp, CatCacheTransaction catCacheTransaction) throws Throwable {
  33. String transName = pjp.getSignature().getName();
  34. if(StringUtils.isNotBlank(catCacheTransaction.name())){
  35. transName = catCacheTransaction.name();
  36. }
  37. Transaction t = Cat.newTransaction("Cache.Redis",transName);
  38. try {
  39. Cat.logEvent("Cache.Server", catCacheTransaction.server());
  40. Object result = pjp.proceed();
  41. t.setStatus(Transaction.SUCCESS);
  42. return result;
  43. } catch (Throwable e) {
  44. Cat.logEvent("Cache.Server", catCacheTransaction.server(), "-1", null);
  45. t.setStatus(e);
  46. throw e;
  47. }finally{
  48. t.complete();
  49. }
  50. }
  51. @Around("@annotation(catDubboClientTransaction)")
  52. public Object catDubboServerTransactionProcess(ProceedingJoinPoint pjp, CatDubboClientTransaction catDubboClientTransaction) throws Throwable {
  53. String transName = pjp.getSignature().getName();
  54. if(StringUtils.isNotBlank(catDubboClientTransaction.name())){
  55. transName = catDubboClientTransaction.name();
  56. }
  57. Transaction t = Cat.newTransaction("Call",transName);
  58. try {
  59. Cat.logEvent("Call.app", catDubboClientTransaction.callApp());
  60. Cat.logEvent("Call.server", catDubboClientTransaction.callServer());
  61. Object result = pjp.proceed();
  62. t.setStatus(Transaction.SUCCESS);
  63. return result;
  64. } catch (Throwable e) {
  65. t.setStatus(e);
  66. throw e;
  67. }finally{
  68. t.complete();
  69. }
  70. }
  71. @After("@annotation(catHttpRequestTransaction)")
  72. public void catHttpRequestProcess(CatHttpRequestTransaction catHttpRequestTransaction) {
  73. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  74. if(StringUtils.isNotBlank(catHttpRequestTransaction.name())){
  75. String transName = catHttpRequestTransaction.name();
  76. request.setAttribute("cat-page-uri", transName);
  77. }
  78. }
  79. }