From 22661b7bcb6ae92f8a2f441a21286496717f5018 Mon Sep 17 00:00:00 2001 From: zhangxin10 Date: Fri, 13 Nov 2015 19:48:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=88=AA=E5=8F=96=E5=BC=82=E5=B8=B8=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=202.=E6=B7=BB=E5=8A=A0=E8=B0=83=E7=94=A8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buriedpoint/RPCBuriedPointReceiver.java | 3 ++- .../java/com/ai/cloud/skywalking/context/Span.java | 13 ++++++++++++- .../cloud/skywalking/sender/DataSenderFactory.java | 2 +- .../cloud/skywalking/util/ExceptionHandleUtil.java | 12 ++++++++---- 4 files changed, 23 insertions(+), 7 deletions(-) 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 6db640d7a..fa17e0cbd 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,7 +13,7 @@ public class RPCBuriedPointReceiver implements IBuriedPointReceiver { public void afterReceived() { // 获取上下文的栈顶中的元素 - Span spanData = Context.removeLastSpan(); + Span spanData = Context.removeLastSpan(); // 填上必要信息 spanData.setCost(System.currentTimeMillis() - spanData.getStartDate()); // 存放到本地发送进程中 @@ -22,6 +22,7 @@ public class RPCBuriedPointReceiver implements IBuriedPointReceiver { public void beforeReceived(ContextData context) { Span spanData = ContextGenerator.generateContextFromContextData(context); + spanData.setReceiver(true); // 存放到上下文 if (Config.BuriedPoint.PRINTF) { System.out.println("viewpointId:" + spanData.getViewPointId() + "\tParentLevelId:" + spanData. diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java index d4256c5e1..e2aced746 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java @@ -13,6 +13,7 @@ public class Span { private byte statueCode = 0; private String exceptionStack; private byte spanType; + private boolean isReceiver = false; public Span() { } @@ -120,13 +121,23 @@ public class Span { this.spanType = spanType; } + public boolean isReceiver() { + return isReceiver; + } + + public void setReceiver(boolean receiver) { + isReceiver = receiver; + } + @Override public String toString() { StringBuffer stringBuffer = new StringBuffer(traceId + "-" + parentLevel + "-" + levelId + "-" + viewPointId + "-" + startDate + "-" + cost + "-" + address + "-" + statueCode + - "-" + processNo + "-" + spanType); + "-" + processNo + "-" + spanType + "-" + isReceiver); + + if (!StringUtil.isEmpty(exceptionStack)) { stringBuffer.append("-" + exceptionStack); } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java index b5d85cdef..3d123030d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java @@ -60,7 +60,7 @@ public class DataSenderFactory { System.err.println("CONNECT_PERCENT must between 1 and 100"); System.exit(-1); } - avaiableSize = (int) Math.ceil(socketAddresses.size() * 1.0 * ((CONNECT_PERCENT / 100) % 100)); + avaiableSize = (int) Math.ceil(socketAddresses.size() * ((1.0 * CONNECT_PERCENT / 100) % 100)); // 初始化DataSender Iterator it = socketAddresses.iterator(); List usedSocketAddress = new ArrayList(); diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java index 98173fab7..e52550e83 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java @@ -9,9 +9,9 @@ import java.io.IOException; public final class ExceptionHandleUtil { private static String extractExceptionStackMessage(final Throwable e) { ByteArrayOutputStream buf = new ByteArrayOutputStream(); - StringBuffer expMessage = new StringBuffer(); + StringBuilder expMessage = new StringBuilder(); Throwable causeException = e; - while (causeException.getCause() != null) { + while (causeException.getCause() != null || expMessage.length() < 40000) { causeException.printStackTrace(new java.io.PrintWriter(buf, true)); expMessage.append(buf.toString()); causeException = causeException.getCause(); @@ -22,11 +22,15 @@ public final class ExceptionHandleUtil { expMessage.append("\n本地发送埋点关闭异常读入流异常,异常信息:"); expMessage.append(e1.getCause().getMessage()); } - return expMessage.toString().replace('\n','&'); + if (expMessage.length() <= 4000) { + return expMessage.toString().replace('\n', '&'); + } else { + return expMessage.toString().replace('\n', '&').substring(0, 40000); + } } public static void handleException(Throwable e) { - Span spanData = Context.getLastSpan(); + Span spanData = Context.getLastSpan(); // 设置错误信息 byte errorCode = 1; spanData.setStatueCode(errorCode);