From 221378d3654dfc9c2b8a4025594cc77c7fac2f4b Mon Sep 17 00:00:00 2001 From: wusheng Date: Thu, 28 Jan 2016 11:32:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0SpanData=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E3=80=82=E8=AF=A6=E7=BB=86=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E6=AF=8F=E4=B8=AA=E5=B1=9E=E6=80=A7=E7=9A=84=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E5=90=AB=E4=B9=89=E3=80=82=202.=E4=BF=AE=E6=94=B9=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=90=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/cloud/skywalking/protocol/Span.java | 60 ++++++------- .../cloud/skywalking/protocol/SpanData.java | 87 +++++++++++++++++-- .../httpclient/v42x/HttpClientTracing.java | 2 +- ...PointType.java => WebBuriedPointType.java} | 8 +- .../httpclient/v43x/HttpClientTracing.java | 2 +- ...PointType.java => WebBuriedPointType.java} | 8 +- .../plugin/web/SkyWalkingFilter.java | 2 +- ...PointType.java => WebBuriedPointType.java} | 8 +- 8 files changed, 127 insertions(+), 50 deletions(-) rename skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/{WEBBuriedPointType.java => WebBuriedPointType.java} (69%) rename skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/{WEBBuriedPointType.java => WebBuriedPointType.java} (69%) rename skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/{WEBBuriedPointType.java => WebBuriedPointType.java} (69%) 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 a62acb7f6..958f4b72f 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 @@ -29,7 +29,7 @@ public class Span extends SpanData { } public Span(String originData) { - String[] fieldValues = originData.split(SPAN_FIELD_SPILT_PATTERN); + String[] fieldValues = originData.split(SPAN_FIELD_SEPARATOR); int index = 0; while (this.setValueByIndex(fieldValues, index)) { @@ -67,7 +67,7 @@ public class Span extends SpanData { break; case 8: exceptionStack = fieldValues[8].trim().replaceAll( - SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); + NEW_LINE_PLACEHOLDER, OS_NEW_LINE); break; case 9: spanType = fieldValues[9]; @@ -77,7 +77,7 @@ public class Span extends SpanData { break; case 11: businessKey = fieldValues[11].trim().replaceAll( - SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); + NEW_LINE_PLACEHOLDER, OS_NEW_LINE); break; case 12: processNo = fieldValues[12].trim(); @@ -104,76 +104,76 @@ public class Span extends SpanData { @Override public String toString() { StringBuilder toStringValue = new StringBuilder(); - toStringValue.append(traceId + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(traceId + SPAN_FIELD_SEPARATOR); if (isNonBlank(parentLevel)) { - toStringValue.append(parentLevel + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(parentLevel + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } - toStringValue.append(levelId + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(levelId + SPAN_FIELD_SEPARATOR); if (isNonBlank(viewPointId)) { - toStringValue.append(viewPointId + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(viewPointId + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } - toStringValue.append(startDate + SPAN_FIELD_SPILT_PATTERN); - toStringValue.append(cost + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(startDate + SPAN_FIELD_SEPARATOR); + toStringValue.append(cost + SPAN_FIELD_SEPARATOR); if (isNonBlank(address)) { - toStringValue.append(address + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(address + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } - toStringValue.append(statusCode + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(statusCode + SPAN_FIELD_SEPARATOR); 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); + WINDOWS_OS_NEW_LINE_REDUNDANT_CHAR, "").replaceAll( + OS_NEW_LINE, NEW_LINE_PLACEHOLDER) + + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } - toStringValue.append(spanType + SPAN_FIELD_SPILT_PATTERN); - toStringValue.append(isReceiver + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(spanType + SPAN_FIELD_SEPARATOR); + toStringValue.append(isReceiver + SPAN_FIELD_SEPARATOR); 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); + WINDOWS_OS_NEW_LINE_REDUNDANT_CHAR, "").replaceAll( + OS_NEW_LINE, NEW_LINE_PLACEHOLDER) + + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } if (isNonBlank(processNo)) { - toStringValue.append(processNo + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(processNo + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } if (isNonBlank(applicationId)) { - toStringValue.append(applicationId + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(applicationId + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } if (isNonBlank(userId)) { - toStringValue.append(userId + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(userId + SPAN_FIELD_SEPARATOR); } else { - toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); + toStringValue.append(" " + SPAN_FIELD_SEPARATOR); } toStringValue.append(callType); diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java index 02413e68f..f9e139fa6 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java @@ -1,28 +1,105 @@ package com.ai.cloud.skywalking.protocol; public abstract class SpanData { + /** + * Span在序列中,各字段间的分隔符 + */ + protected static final String SPAN_FIELD_SEPARATOR = "@~"; + /** + * Span在序列化中,新的换行符 + */ + protected static final String NEW_LINE_PLACEHOLDER = "#~"; + /** + * 字符串中的换行符 + */ + protected static final String OS_NEW_LINE = "\n"; + /** + * windows操作系统的多余换行字符 + */ + protected static final String WINDOWS_OS_NEW_LINE_REDUNDANT_CHAR = "\r"; - protected static final String SPAN_FIELD_SPILT_PATTERN = "@~"; - protected static final String SPAN_ATTR_SPILT_CHARACTER = "#~"; - protected static final String NEW_LINE_CHARACTER_PATTERN = "\n"; - protected static final String CARRIAGE_RETURN_CHARACTER_PATTERN = "\r"; - + /** + * tid,调用链的全局唯一标识 + */ protected String traceId; + /** + * 当前调用链的上级描述
+ * 如当前序号为:0.1.0时,parentLevel=0.1 + */ protected String parentLevel; + /** + * 当前调用链的本机描述
+ * 如当前序号为:0.1.0时,levelId=0 + */ protected int levelId = 0; + /** + * 调用链中单个节点的入口描述
+ * 如:java方法名,调用的RPC地址等等 + */ protected String viewPointId = ""; + /** + * 节点调用开始时间 + */ protected long startDate = System.currentTimeMillis(); + /** + * 节点调用花费时间 + */ protected long cost = 0L; + /** + * 节点调用的发生机器描述
+ * 包含机器名 + IP地址 + */ protected String address = ""; + /** + * 节点调用的状态
+ * 0:成功
+ * 1:异常
+ * 异常判断原则:代码产生exception,并且此exception不在忽略列表中 + */ protected byte statusCode = 0; + /** + * 节点调用的错误堆栈
+ * 堆栈以JAVA的exception为主要判断依据 + */ protected String exceptionStack; + /** + * 节点类型描述
+ * 已字符串的形式描述
+ * 如:java,dubbo等 + */ protected String spanType = ""; + /** + * 节点调用类型描述
+ * @see com.ai.cloud.skywalking.protocol.CallType + */ protected String callType = ""; + /** + * 节点分布式类型
+ * 服务端/客户端 + */ protected boolean isReceiver = false; + /** + * 节点调用过程中的业务字段
+ * 如:业务系统设置的订单号,SQL语句等 + */ protected String businessKey = ""; + /** + * 节点调用的所在进程号 + */ protected String processNo = ""; + /** + * 节点调用所在的系统逻辑名称
+ * 由授权文件指定 + */ protected String applicationId = ""; + /** + * 反序列化时,存储序列化前的字符串原文 + */ protected String originData = ""; + /** + * 用户id
+ * 由授权文件指定 + */ protected String userId; diff --git a/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/HttpClientTracing.java b/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/HttpClientTracing.java index 7102dd35a..3080417d2 100644 --- a/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/HttpClientTracing.java +++ b/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/HttpClientTracing.java @@ -20,7 +20,7 @@ public class HttpClientTracing { httpRequest.setHeader(traceHearName, "ContextData=" + sender.beforeSend(Identification.newBuilder() .viewPoint(url) - .spanType(WEBBuriedPointType.instance()) + .spanType(WebBuriedPointType.instance()) .build()) .toString()); return executor.execute(); diff --git a/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WEBBuriedPointType.java b/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WebBuriedPointType.java similarity index 69% rename from skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WEBBuriedPointType.java rename to skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WebBuriedPointType.java index 26c4a85a7..15aeeef68 100644 --- a/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WEBBuriedPointType.java +++ b/skywalking-sdk-plugin/httpclient-4.2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v42x/WebBuriedPointType.java @@ -3,13 +3,13 @@ package com.ai.cloud.skywalking.plugin.httpclient.v42x; import com.ai.cloud.skywalking.api.IBuriedPointType; import com.ai.cloud.skywalking.protocol.CallType; -public class WEBBuriedPointType implements IBuriedPointType { +public class WebBuriedPointType implements IBuriedPointType { - private static WEBBuriedPointType webBuriedPointType; + private static WebBuriedPointType webBuriedPointType; public static IBuriedPointType instance() { if (webBuriedPointType == null) { - webBuriedPointType = new WEBBuriedPointType(); + webBuriedPointType = new WebBuriedPointType(); } return webBuriedPointType; @@ -25,7 +25,7 @@ public class WEBBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private WEBBuriedPointType() { + private WebBuriedPointType() { // Non } } diff --git a/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/HttpClientTracing.java b/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/HttpClientTracing.java index 0d8ccb940..2b179ee84 100644 --- a/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/HttpClientTracing.java +++ b/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/HttpClientTracing.java @@ -20,7 +20,7 @@ public class HttpClientTracing { httpRequest.setHeader(traceHearName, "ContextData=" + sender.beforeSend(Identification.newBuilder() .viewPoint(url) - .spanType(WEBBuriedPointType.instance()) + .spanType(WebBuriedPointType.instance()) .build()) .toString()); return executor.execute(); diff --git a/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WEBBuriedPointType.java b/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WebBuriedPointType.java similarity index 69% rename from skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WEBBuriedPointType.java rename to skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WebBuriedPointType.java index dde842a6f..e9b0af155 100644 --- a/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WEBBuriedPointType.java +++ b/skywalking-sdk-plugin/httpclient-4.3.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/httpclient/v43x/WebBuriedPointType.java @@ -3,13 +3,13 @@ package com.ai.cloud.skywalking.plugin.httpclient.v43x; import com.ai.cloud.skywalking.api.IBuriedPointType; import com.ai.cloud.skywalking.protocol.CallType; -public class WEBBuriedPointType implements IBuriedPointType { +public class WebBuriedPointType implements IBuriedPointType { - private static WEBBuriedPointType webBuriedPointType; + private static WebBuriedPointType webBuriedPointType; public static IBuriedPointType instance() { if (webBuriedPointType == null) { - webBuriedPointType = new WEBBuriedPointType(); + webBuriedPointType = new WebBuriedPointType(); } return webBuriedPointType; @@ -25,7 +25,7 @@ public class WEBBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private WEBBuriedPointType() { + private WebBuriedPointType() { // Non } } diff --git a/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/SkyWalkingFilter.java b/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/SkyWalkingFilter.java index 0bb232738..c75794cda 100644 --- a/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/SkyWalkingFilter.java +++ b/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/SkyWalkingFilter.java @@ -70,7 +70,7 @@ public class SkyWalkingFilter implements Filter { private Identification generateIdentification(HttpServletRequest request) { return Identification.newBuilder() .viewPoint(request.getRequestURL().toString()) - .spanType(WEBBuriedPointType.instance()) + .spanType(WebBuriedPointType.instance()) .build(); } diff --git a/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WEBBuriedPointType.java b/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WebBuriedPointType.java similarity index 69% rename from skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WEBBuriedPointType.java rename to skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WebBuriedPointType.java index c9ff0a2b9..2bef953b2 100644 --- a/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WEBBuriedPointType.java +++ b/skywalking-sdk-plugin/web-plugin/src/main/java/com/ai/cloud/skywalking/plugin/web/WebBuriedPointType.java @@ -3,13 +3,13 @@ package com.ai.cloud.skywalking.plugin.web; import com.ai.cloud.skywalking.api.IBuriedPointType; import com.ai.cloud.skywalking.protocol.CallType; -public class WEBBuriedPointType implements IBuriedPointType { +public class WebBuriedPointType implements IBuriedPointType { - private static WEBBuriedPointType webBuriedPointType; + private static WebBuriedPointType webBuriedPointType; public static IBuriedPointType instance() { if (webBuriedPointType == null) { - webBuriedPointType = new WEBBuriedPointType(); + webBuriedPointType = new WebBuriedPointType(); } return webBuriedPointType; @@ -25,7 +25,7 @@ public class WEBBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private WEBBuriedPointType() { + private WebBuriedPointType() { // Non } } From 3aa2156e02cb69b554911f74784badcb048133cf Mon Sep 17 00:00:00 2001 From: wusheng Date: Thu, 28 Jan 2016 15:33:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=E7=A7=BB=E9=99=A4webui/src=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/cloud/util/common/SortUtil.java | 124 ---------------- .../com/ai/cloud/util/common/SortTest.java | 137 ++++++++++++++++++ 2 files changed, 137 insertions(+), 124 deletions(-) create mode 100644 skywalking-webui/src/test/java/com/ai/cloud/util/common/SortTest.java diff --git a/skywalking-webui/src/main/java/com/ai/cloud/util/common/SortUtil.java b/skywalking-webui/src/main/java/com/ai/cloud/util/common/SortUtil.java index e2cb45e53..890d7d71b 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/util/common/SortUtil.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/util/common/SortUtil.java @@ -3,21 +3,11 @@ */ package com.ai.cloud.util.common; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Random; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.junit.Test; -import com.ai.cloud.dao.impl.BuriedPointSDAO; import com.ai.cloud.util.Constants; import com.ai.cloud.vo.mvo.TraceLogEntry; @@ -73,118 +63,4 @@ public class SortUtil { return false; } } - - /** - * 测试读取hbase 测试自动补充父级节点 测试排序 - * - * @throws IOException - * @throws NoSuchMethodException - * @throws InvocationTargetException - * @throws IllegalAccessException - * - */ - @Test - public void testSelectByTraceId() throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { - BuriedPointSDAO sdao = new BuriedPointSDAO(); - Map bpe = sdao.queryLogByTraceId(Constants.TABLE_NAME_CHAIN, - "71e28364128847b3a12626966b60fd8f123"); - - List keyList = new ArrayList(); - - keyList.addAll(bpe.values()); - - Collections.sort(keyList, new Comparator() { - @Override - public int compare(TraceLogEntry arg0, TraceLogEntry arg1) { - return arg0.getColId().compareTo(arg1.getColId()); - } - }); - - int m = 1; - for (TraceLogEntry tmpEntry : keyList) { - logger.info("sort result level:{} : {}", m++, tmpEntry); - } - - } - - /*** - * 深度补全测试 - * - * @throws IOException - */ - @Test - public void testGenTreeMapKey() throws IOException { - - StringBuffer sb = new StringBuffer("0"); - - /*** - * 深度测试 level 5 [ 11ms ] level 10[ 11ms ] level 15[ 11ms ] level 20[ - * 12ms ] level 50[ 12ms ] level 100[ 12ms ] level 500[ 12ms ] level - * 1000[ 16ms ] level 2000[ 28ms ] level 5000[ 144ms ] level10000[ 445ms - * ] - */ - for (int i = 1; i < 10000; i++) { - sb.append(".0"); - } - - String colId = sb.toString(); - TraceLogEntry tmpEntry = null; - Map reMap = new HashMap(); - long startTime = System.currentTimeMillis(); - logger.info("start time : {}", startTime); - - addCurNodeTreeMapKey(reMap, colId, tmpEntry); - - long endTime = System.currentTimeMillis(); - logger.info("end time : {}", endTime); - logger.info("run time : {} ms", (endTime - startTime)); - - // List keyList = new ArrayList(); - // keyList.addAll(reMap.keySet()); - // Collections.sort(keyList); - // int m = 1; - // for (String str : keyList) { - // logger.info("sort result level:{} : {}", m++, str); - // } - - } - - /*** - * collection sort 性能测试 - * - * @param args - */ - @Test - public void testSortList() { - List StrList = new ArrayList(); - Random random = new Random(System.currentTimeMillis()); - StrList.add("0"); - - /*** - * Collections.sort(StrList)性能 1000条/19 ms 10000条/42 ms 100000条/129 ms - * 1000000条/1070 ms - */ - for (int m = 0; m < 1000; m++) { - String radNum = "" + Math.abs(random.nextLong()); - StringBuffer tmpBf = new StringBuffer("0"); - for (int n = 0; n < radNum.length(); n++) { - tmpBf.append(".").append(radNum.charAt(n)); - } - StrList.add(tmpBf.toString()); - } - - long startTime = System.currentTimeMillis(); - logger.info("start time : {}", startTime); - - Collections.sort(StrList); - - long endTime = System.currentTimeMillis(); - logger.info("end time : {}", endTime); - logger.info("run time : {} ms", (endTime - startTime)); - - // int i = 1; - // for (String tmpStr : StrList) { - // logger.info("sort {} : {}", i++, tmpStr); - // } - } } diff --git a/skywalking-webui/src/test/java/com/ai/cloud/util/common/SortTest.java b/skywalking-webui/src/test/java/com/ai/cloud/util/common/SortTest.java new file mode 100644 index 000000000..f2f2311d4 --- /dev/null +++ b/skywalking-webui/src/test/java/com/ai/cloud/util/common/SortTest.java @@ -0,0 +1,137 @@ +package com.ai.cloud.util.common; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.Test; + +import com.ai.cloud.dao.impl.BuriedPointSDAO; +import com.ai.cloud.util.Constants; +import com.ai.cloud.vo.mvo.TraceLogEntry; + +public class SortTest { + private static Logger logger = LogManager.getLogger(SortUtil.class); + + /** + * 测试读取hbase 测试自动补充父级节点 测试排序 + * + * @throws IOException + * @throws NoSuchMethodException + * @throws InvocationTargetException + * @throws IllegalAccessException + * + */ + @Test + public void testSelectByTraceId() throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { + BuriedPointSDAO sdao = new BuriedPointSDAO(); + Map bpe = sdao.queryLogByTraceId(Constants.TABLE_NAME_CHAIN, + "71e28364128847b3a12626966b60fd8f123"); + + List keyList = new ArrayList(); + + keyList.addAll(bpe.values()); + + Collections.sort(keyList, new Comparator() { + @Override + public int compare(TraceLogEntry arg0, TraceLogEntry arg1) { + return arg0.getColId().compareTo(arg1.getColId()); + } + }); + + int m = 1; + for (TraceLogEntry tmpEntry : keyList) { + logger.info("sort result level:{} : {}", m++, tmpEntry); + } + + } + + /*** + * 深度补全测试 + * + * @throws IOException + */ + @Test + public void testGenTreeMapKey() throws IOException { + + StringBuffer sb = new StringBuffer("0"); + + /*** + * 深度测试 level 5 [ 11ms ] level 10[ 11ms ] level 15[ 11ms ] level 20[ + * 12ms ] level 50[ 12ms ] level 100[ 12ms ] level 500[ 12ms ] level + * 1000[ 16ms ] level 2000[ 28ms ] level 5000[ 144ms ] level10000[ 445ms + * ] + */ + for (int i = 1; i < 10000; i++) { + sb.append(".0"); + } + + String colId = sb.toString(); + TraceLogEntry tmpEntry = null; + Map reMap = new HashMap(); + long startTime = System.currentTimeMillis(); + logger.info("start time : {}", startTime); + + SortUtil.addCurNodeTreeMapKey(reMap, colId, tmpEntry); + + long endTime = System.currentTimeMillis(); + logger.info("end time : {}", endTime); + logger.info("run time : {} ms", (endTime - startTime)); + + // List keyList = new ArrayList(); + // keyList.addAll(reMap.keySet()); + // Collections.sort(keyList); + // int m = 1; + // for (String str : keyList) { + // logger.info("sort result level:{} : {}", m++, str); + // } + + } + + /*** + * collection sort 性能测试 + * + * @param args + */ + @Test + public void testSortList() { + List StrList = new ArrayList(); + Random random = new Random(System.currentTimeMillis()); + StrList.add("0"); + + /*** + * Collections.sort(StrList)性能 1000条/19 ms 10000条/42 ms 100000条/129 ms + * 1000000条/1070 ms + */ + for (int m = 0; m < 1000; m++) { + String radNum = "" + Math.abs(random.nextLong()); + StringBuffer tmpBf = new StringBuffer("0"); + for (int n = 0; n < radNum.length(); n++) { + tmpBf.append(".").append(radNum.charAt(n)); + } + StrList.add(tmpBf.toString()); + } + + long startTime = System.currentTimeMillis(); + logger.info("start time : {}", startTime); + + Collections.sort(StrList); + + long endTime = System.currentTimeMillis(); + logger.info("end time : {}", endTime); + logger.info("run time : {} ms", (endTime - startTime)); + + // int i = 1; + // for (String tmpStr : StrList) { + // logger.info("sort {} : {}", i++, tmpStr); + // } + } +}