123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package com.yihu.ehr.cat;
- import com.dianping.cat.Cat;
- import com.dianping.cat.CatConstants;
- import com.dianping.cat.message.Transaction;
- import okhttp3.Interceptor;
- import okhttp3.Request;
- import okhttp3.Response;
- import java.io.IOException;
- /**
- * Interceptor - 拦截http调用过程
- * Created by progr1mmer on 2018/9/5.
- */
- public class CatOkHttpInterceptor implements Interceptor {
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- Transaction t = Cat.newTransaction(CatConstants.TYPE_REMOTE_CALL, request.url().toString());
- try {
- //保存和传递CAT调用链上下文
- CatContext ctx = new CatContext();
- Cat.logRemoteCallClient(ctx);
- Request.Builder builder = request.newBuilder();
- builder.header(Cat.Context.ROOT, ctx.getProperty(Cat.Context.ROOT));
- builder.header(Cat.Context.PARENT, ctx.getProperty(Cat.Context.PARENT));
- builder.header(Cat.Context.CHILD, ctx.getProperty(Cat.Context.CHILD));
- request = builder.build();
- //执行请求
- Response response = chain.proceed(request);
- t.setStatus(Transaction.SUCCESS);
- return response;
- } catch (Exception e) {
- //记录异常
- t.setStatus(e);
- Cat.getProducer().logError(e);
- throw e;
- } finally {
- //当前Transaction须完成
- t.complete();
- }
- }
- }
|