CatOkHttpInterceptor.java 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package com.yihu.ehr.cat;
  2. import com.dianping.cat.Cat;
  3. import com.dianping.cat.CatConstants;
  4. import com.dianping.cat.message.Transaction;
  5. import okhttp3.Interceptor;
  6. import okhttp3.Request;
  7. import okhttp3.Response;
  8. import java.io.IOException;
  9. /**
  10. * Interceptor - 拦截http调用过程
  11. * Created by progr1mmer on 2018/9/5.
  12. */
  13. public class CatOkHttpInterceptor implements Interceptor {
  14. @Override
  15. public Response intercept(Chain chain) throws IOException {
  16. Request request = chain.request();
  17. Transaction t = Cat.newTransaction(CatConstants.TYPE_REMOTE_CALL, request.url().toString());
  18. try {
  19. //保存和传递CAT调用链上下文
  20. CatContext ctx = new CatContext();
  21. Cat.logRemoteCallClient(ctx);
  22. Request.Builder builder = request.newBuilder();
  23. builder.header(Cat.Context.ROOT, ctx.getProperty(Cat.Context.ROOT));
  24. builder.header(Cat.Context.PARENT, ctx.getProperty(Cat.Context.PARENT));
  25. builder.header(Cat.Context.CHILD, ctx.getProperty(Cat.Context.CHILD));
  26. request = builder.build();
  27. //执行请求
  28. Response response = chain.proceed(request);
  29. t.setStatus(Transaction.SUCCESS);
  30. return response;
  31. } catch (Exception e) {
  32. //记录异常
  33. t.setStatus(e);
  34. Cat.getProducer().logError(e);
  35. throw e;
  36. } finally {
  37. //当前Transaction须完成
  38. t.complete();
  39. }
  40. }
  41. }