From 31a4e28bf0c1f3fb3dbb3595d3ee37813790ff49 Mon Sep 17 00:00:00 2001 From: wusheng Date: Wed, 20 Apr 2016 09:39:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E5=BC=82=E5=B8=B8=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E4=B8=8E=E9=98=BB=E5=A1=9E=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?@trentsky=20=E6=8F=90=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98=20#47?= =?UTF-8?q?=202.=E6=9A=82=E6=97=B6=E5=BC=83=E7=94=A8=E5=A4=9A=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E5=9F=8B=E7=82=B9api=EF=BC=8C=E6=9A=82=E4=B8=8D?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E6=9B=B4=E5=A4=9A=E6=94=AF=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationExceptionHandler.java | 37 +++++---- .../buriedpoint/LocalBuriedPointSender.java | 75 +++++++++++-------- .../buriedpoint/RPCBuriedPointReceiver.java | 62 +++++++++------ .../buriedpoint/ThreadBuriedPointSender.java | 8 +- .../ThreadFactoryBuriedPointSender.java | 7 ++ 5 files changed, 121 insertions(+), 68 deletions(-) diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java index 60e361129..209422554 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java @@ -5,31 +5,42 @@ import static com.ai.cloud.skywalking.conf.Config.BuriedPoint.EXCLUSIVE_EXCEPTIO import java.util.HashSet; import java.util.Set; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import com.ai.cloud.skywalking.api.IExceptionHandler; import com.ai.cloud.skywalking.conf.Config; import com.ai.cloud.skywalking.context.Context; import com.ai.cloud.skywalking.protocol.Span; public class ApplicationExceptionHandler implements IExceptionHandler { + private static Logger logger = LogManager + .getLogger(ApplicationExceptionHandler.class); + private static String EXCEPTION_SPLIT = ","; - + private static Set exclusiveExceptionSet = null; @Override public void handleException(Throwable th) { - if (exclusiveExceptionSet == null) { - Set exclusiveExceptions = new HashSet(); - - String[] exceptions = EXCLUSIVE_EXCEPTIONS.split(EXCEPTION_SPLIT); - for(String exception : exceptions){ - exclusiveExceptions.add(exception); - } - exclusiveExceptionSet = exclusiveExceptions; - } + try { + if (exclusiveExceptionSet == null) { + Set exclusiveExceptions = new HashSet(); - Span span = Context.getLastSpan(); - span.handleException(th, exclusiveExceptionSet, - Config.BuriedPoint.MAX_EXCEPTION_STACK_LENGTH); + String[] exceptions = EXCLUSIVE_EXCEPTIONS + .split(EXCEPTION_SPLIT); + for (String exception : exceptions) { + exclusiveExceptions.add(exception); + } + exclusiveExceptionSet = exclusiveExceptions; + } + + Span span = Context.getLastSpan(); + span.handleException(th, exclusiveExceptionSet, + Config.BuriedPoint.MAX_EXCEPTION_STACK_LENGTH); + } catch (Throwable t) { + logger.error(t.getMessage(), t); + } } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java index bdcd5b7f4..fcfbb0620 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java @@ -14,42 +14,57 @@ import com.ai.cloud.skywalking.model.Identification; import com.ai.cloud.skywalking.protocol.Span; import com.ai.cloud.skywalking.util.ContextGenerator; -public class LocalBuriedPointSender extends ApplicationExceptionHandler implements IBuriedPointSender { +public class LocalBuriedPointSender extends ApplicationExceptionHandler + implements IBuriedPointSender { - private static Logger logger = LogManager.getLogger(LocalBuriedPointSender.class); + private static Logger logger = LogManager + .getLogger(LocalBuriedPointSender.class); - public ContextData beforeSend(Identification id) { - if (!AuthDesc.isAuth()) - return new EmptyContextData(); + public ContextData beforeSend(Identification id) { + try { + if (!AuthDesc.isAuth()) + return new EmptyContextData(); - Span spanData = ContextGenerator.generateSpanFromThreadLocal(id); - // 将新创建的Context存放到ThreadLocal栈中。 - Context.append(spanData); - // 并将当前的Context返回回去 - return new ContextData(spanData); - } + Span spanData = ContextGenerator.generateSpanFromThreadLocal(id); + // 将新创建的Context存放到ThreadLocal栈中。 + Context.append(spanData); + // 并将当前的Context返回回去 + return new ContextData(spanData); + } catch (Throwable t) { + logger.error(t.getMessage(), t); + return new EmptyContextData(); + } + } - public void afterSend() { - if (!AuthDesc.isAuth()) - return; + public void afterSend() { + try { + if (!AuthDesc.isAuth()) + return; - // 弹出上下文的栈顶中的元素 - Span spanData = Context.removeLastSpan(); - if (spanData == null) { - return; - } + // 弹出上下文的栈顶中的元素 + Span spanData = Context.removeLastSpan(); + if (spanData == null) { + return; + } - // 加上花费时间 - spanData.setCost(System.currentTimeMillis() - spanData.getStartDate()); + // 加上花费时间 + spanData.setCost(System.currentTimeMillis() + - spanData.getStartDate()); - if (Config.BuriedPoint.PRINTF) { - logger.debug("TraceId:" + spanData.getTraceId() + "\tviewpointId:" + spanData.getViewPointId() + "\tParentLevelId:" + spanData. - getParentLevel() + "\tLevelId:" + spanData.getLevelId() + "\tbusinessKey:" + spanData.getBusinessKey()); - } + if (Config.BuriedPoint.PRINTF) { + logger.debug("TraceId:" + spanData.getTraceId() + + "\tviewpointId:" + spanData.getViewPointId() + + "\tParentLevelId:" + spanData.getParentLevel() + + "\tLevelId:" + spanData.getLevelId() + + "\tbusinessKey:" + spanData.getBusinessKey()); + } - // 存放到本地发送进程中 - if (!Config.Sender.IS_OFF) { - ContextBuffer.save(spanData); - } - } + // 存放到本地发送进程中 + if (!Config.Sender.IS_OFF) { + ContextBuffer.save(spanData); + } + } catch (Throwable t) { + logger.error(t.getMessage(), t); + } + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java index 0358b1202..50ac1b3e5 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java @@ -13,35 +13,49 @@ import com.ai.cloud.skywalking.model.Identification; import com.ai.cloud.skywalking.protocol.Span; import com.ai.cloud.skywalking.util.ContextGenerator; -public class RPCBuriedPointReceiver extends ApplicationExceptionHandler implements IBuriedPointReceiver { +public class RPCBuriedPointReceiver extends ApplicationExceptionHandler + implements IBuriedPointReceiver { - private static Logger logger = LogManager.getLogger(RPCBuriedPointReceiver.class); + private static Logger logger = LogManager + .getLogger(RPCBuriedPointReceiver.class); - public void afterReceived() { - if (!AuthDesc.isAuth()) - return; + public void afterReceived() { + try { + if (!AuthDesc.isAuth()) + return; - // 获取上下文的栈顶中的元素 - Span spanData = Context.removeLastSpan(); - // 填上必要信息 - spanData.setCost(System.currentTimeMillis() - spanData.getStartDate()); - // 存放到本地发送进程中 - ContextBuffer.save(spanData); - } + // 获取上下文的栈顶中的元素 + Span spanData = Context.removeLastSpan(); + // 填上必要信息 + spanData.setCost(System.currentTimeMillis() + - spanData.getStartDate()); + // 存放到本地发送进程中 + ContextBuffer.save(spanData); + } catch (Throwable t) { + logger.error(t.getMessage(), t); + } + } - public void beforeReceived(ContextData context, Identification id) { - if (!AuthDesc.isAuth()) - return; + public void beforeReceived(ContextData context, Identification id) { + try { + if (!AuthDesc.isAuth()) + return; - Span spanData = ContextGenerator.generateSpanFromContextData(context, id); - //设置是否为接收端 - spanData.setReceiver(true); + Span spanData = ContextGenerator.generateSpanFromContextData( + context, id); + // 设置是否为接收端 + spanData.setReceiver(true); - if (Config.BuriedPoint.PRINTF) { - logger.debug("TraceId:" + spanData.getTraceId() + "\tviewpointId:" + spanData.getViewPointId() + "\tParentLevelId:" + spanData. - getParentLevel() + "\tLevelId:" + spanData.getLevelId()); - } + if (Config.BuriedPoint.PRINTF) { + logger.debug("TraceId:" + spanData.getTraceId() + + "\tviewpointId:" + spanData.getViewPointId() + + "\tParentLevelId:" + spanData.getParentLevel() + + "\tLevelId:" + spanData.getLevelId()); + } - Context.append(spanData); - } + Context.append(spanData); + } catch (Throwable t) { + logger.error(t.getMessage(), t); + } + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java index 2c8195d65..79b6be4c5 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java @@ -15,7 +15,13 @@ import com.ai.cloud.skywalking.protocol.Span; import com.ai.cloud.skywalking.util.BuriedPointMachineUtil; import com.ai.cloud.skywalking.util.TraceIdGenerator; - +/** + * 暂不确定多线程的实现方式 + * + * @author wusheng + * + */ +@Deprecated public class ThreadBuriedPointSender extends ApplicationExceptionHandler implements IBuriedPointSender { private static Logger logger = LogManager.getLogger(ThreadBuriedPointSender.class); diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java index d1097a8e9..ff09f42bd 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java @@ -14,6 +14,13 @@ import com.ai.cloud.skywalking.model.Identification; import com.ai.cloud.skywalking.protocol.Span; import com.ai.cloud.skywalking.util.ContextGenerator; +/** + * 暂不确定多线程的实现方式 + * + * @author wusheng + * + */ +@Deprecated public class ThreadFactoryBuriedPointSender extends ApplicationExceptionHandler implements IBuriedPointSender { private static Logger logger = LogManager.getLogger(ThreadBuriedPointSender.class);