From 5d224c3fd0f265d0102380b9651d42e62f7876f5 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 18 Jan 2016 16:47:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9span=E7=9A=84=E5=8F=8D?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E7=A8=8B=E5=BA=8F=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=8F=AF=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/cloud/skywalking/protocol/Span.java | 319 ++++++++++-------- 1 file changed, 183 insertions(+), 136 deletions(-) diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java index cb6f74eae..4fef799b7 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java @@ -8,165 +8,212 @@ import java.util.logging.Logger; public class Span extends SpanData { - private Logger logger = Logger.getLogger(Span.class.getName()); + private Logger logger = Logger.getLogger(Span.class.getName()); - public Span() { - } + public Span() { + } - public Span(String traceId, String applicationID, String userId) { - this.traceId = traceId; - this.applicationId = applicationID; - this.userId = userId; - } + public Span(String traceId, String applicationID, String userId) { + this.traceId = traceId; + this.applicationId = applicationID; + this.userId = userId; + } - public Span(String traceId, String parentLevelId, int levelId, - String applicationID, String userId) { - this.traceId = traceId; - this.applicationId = applicationID; - this.parentLevel = parentLevelId; - this.userId = userId; - this.levelId = levelId; - } + public Span(String traceId, String parentLevelId, int levelId, + String applicationID, String userId) { + this.traceId = traceId; + this.applicationId = applicationID; + this.parentLevel = parentLevelId; + this.userId = userId; + this.levelId = levelId; + } - public Span(String originData) { - String[] fieldValues = originData.split(SPAN_FIELD_SPILT_PATTERN); - traceId = fieldValues[0].trim(); - parentLevel = fieldValues[1].trim(); - levelId = Integer.valueOf(fieldValues[2]); - viewPointId = fieldValues[3].trim(); - startDate = Long.valueOf(fieldValues[4]); - cost = Long.parseLong(fieldValues[5]); - address = fieldValues[6].trim(); - statusCode = Byte.valueOf(fieldValues[7].trim()); - exceptionStack = fieldValues[8].trim().replaceAll( - SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); - spanType = fieldValues[9]; - isReceiver = Boolean.valueOf(fieldValues[10]); + public Span(String originData) { + String[] fieldValues = originData.split(SPAN_FIELD_SPILT_PATTERN); - businessKey = fieldValues[11].trim().replaceAll( - SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); - processNo = fieldValues[12].trim(); - applicationId = fieldValues[13].trim(); - userId = fieldValues[14].trim(); - if (fieldValues.length > 15) { - callType = fieldValues[15].trim(); - } - this.originData = originData; - } + int index = 0; + while (this.setValueByIndex(fieldValues, index)) { + index++; + } + this.originData = originData; + } - @Override - public String toString() { - StringBuilder toStringValue = new StringBuilder(); - toStringValue.append(traceId + SPAN_FIELD_SPILT_PATTERN); + private boolean setValueByIndex(String[] fieldValues, int index) { + if (fieldValues.length > index) { + switch (index) { + case 0: + traceId = fieldValues[0].trim(); + break; + case 1: + parentLevel = fieldValues[1].trim(); + break; + case 2: + levelId = Integer.valueOf(fieldValues[2]); + break; + case 3: + viewPointId = fieldValues[3].trim(); + break; + case 4: + startDate = Long.valueOf(fieldValues[4]); + break; + case 5: + cost = Long.parseLong(fieldValues[5]); + break; + case 6: + address = fieldValues[6].trim(); + break; + case 7: + statusCode = Byte.valueOf(fieldValues[7].trim()); + break; + case 8: + exceptionStack = fieldValues[8].trim().replaceAll( + SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); + break; + case 9: + spanType = fieldValues[9]; + break; + case 10: + isReceiver = Boolean.valueOf(fieldValues[10]); + break; + case 11: + businessKey = fieldValues[11].trim().replaceAll( + SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); + break; + case 12: + processNo = fieldValues[12].trim(); + break; + case 13: + applicationId = fieldValues[13].trim(); + break; + case 14: + userId = fieldValues[14].trim(); + break; + case 15: + callType = fieldValues[15].trim(); + break; + default: + return false; + } + return true; + } else { + return false; + } - if (isNonBlank(parentLevel)) { - toStringValue.append(parentLevel + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + } - toStringValue.append(levelId + SPAN_FIELD_SPILT_PATTERN); + @Override + public String toString() { + StringBuilder toStringValue = new StringBuilder(); + toStringValue.append(traceId + SPAN_FIELD_SPILT_PATTERN); - if (isNonBlank(viewPointId)) { - toStringValue.append(viewPointId + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(parentLevel)) { + toStringValue.append(parentLevel + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - toStringValue.append(startDate + SPAN_FIELD_SPILT_PATTERN); - toStringValue.append(cost + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(levelId + SPAN_FIELD_SPILT_PATTERN); - if (isNonBlank(address)) { - toStringValue.append(address + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(viewPointId)) { + toStringValue.append(viewPointId + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - toStringValue.append(statusCode + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(startDate + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(cost + SPAN_FIELD_SPILT_PATTERN); - if (isNonBlank(exceptionStack)) { - // 换行符在各个系统中表现不一致, - // windows平台的换行符为/r/n - // linux平台的换行符为/n - toStringValue.append(exceptionStack.replaceAll( - CARRIAGE_RETURN_CHARACTER_PATTERN, "").replaceAll( - NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) - + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(address)) { + toStringValue.append(address + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - toStringValue.append(spanType + SPAN_FIELD_SPILT_PATTERN); - toStringValue.append(isReceiver + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(statusCode + SPAN_FIELD_SPILT_PATTERN); - if (isNonBlank(businessKey)) { - // 换行符在各个系统中表现不一致, - // windows平台的换行符为/r/n - // linux平台的换行符为/n - toStringValue.append(businessKey.replaceAll( - CARRIAGE_RETURN_CHARACTER_PATTERN, "").replaceAll( - NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) - + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(exceptionStack)) { + // 换行符在各个系统中表现不一致, + // windows平台的换行符为/r/n + // linux平台的换行符为/n + toStringValue.append(exceptionStack.replaceAll( + CARRIAGE_RETURN_CHARACTER_PATTERN, "").replaceAll( + NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) + + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - if (isNonBlank(processNo)) { - toStringValue.append(processNo + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + toStringValue.append(spanType + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(isReceiver + SPAN_FIELD_SPILT_PATTERN); - if (isNonBlank(applicationId)) { - toStringValue.append(applicationId + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(businessKey)) { + // 换行符在各个系统中表现不一致, + // windows平台的换行符为/r/n + // linux平台的换行符为/n + toStringValue.append(businessKey.replaceAll( + CARRIAGE_RETURN_CHARACTER_PATTERN, "").replaceAll( + NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) + + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - if (isNonBlank(userId)) { - toStringValue.append(userId + SPAN_FIELD_SPILT_PATTERN); - } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); - } + if (isNonBlank(processNo)) { + toStringValue.append(processNo + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - toStringValue.append(callType); + if (isNonBlank(applicationId)) { + toStringValue.append(applicationId + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - return toStringValue.toString(); - } + if (isNonBlank(userId)) { + toStringValue.append(userId + SPAN_FIELD_SPILT_PATTERN); + } else { + toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + } - protected boolean isNonBlank(String str) { - return str != null && str.length() > 0; - } + toStringValue.append(callType); - public void handleException(Throwable e, Set exclusiveExceptionSet, - int maxExceptionStackLength) { - ByteArrayOutputStream buf = null; - StringBuilder expMessage = new StringBuilder(); - try { - buf = new ByteArrayOutputStream(); - Throwable causeException = e; - while (causeException != null - && (causeException.getCause() != null || expMessage - .length() < maxExceptionStackLength)) { - causeException.printStackTrace(new java.io.PrintWriter(buf, - true)); - expMessage.append(buf.toString()); - causeException = causeException.getCause(); - } + return toStringValue.toString(); + } - } finally { - try { - buf.close(); - } catch (IOException ioe) { - logger.log(Level.ALL, - "Close exception stack input stream failed", ioe); - } - } - this.exceptionStack = expMessage.toString(); + protected boolean isNonBlank(String str) { + return str != null && str.length() > 0; + } - if (!exclusiveExceptionSet.contains(e.getClass().getName())) { - this.statusCode = 1; - } - } + public void handleException(Throwable e, Set exclusiveExceptionSet, + int maxExceptionStackLength) { + ByteArrayOutputStream buf = null; + StringBuilder expMessage = new StringBuilder(); + try { + buf = new ByteArrayOutputStream(); + Throwable causeException = e; + while (causeException != null + && (causeException.getCause() != null || expMessage + .length() < maxExceptionStackLength)) { + causeException.printStackTrace(new java.io.PrintWriter(buf, + true)); + expMessage.append(buf.toString()); + causeException = causeException.getCause(); + } + + } finally { + try { + buf.close(); + } catch (IOException ioe) { + logger.log(Level.ALL, + "Close exception stack input stream failed", ioe); + } + } + this.exceptionStack = expMessage.toString(); + + if (!exclusiveExceptionSet.contains(e.getClass().getName())) { + this.statusCode = 1; + } + } }