diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/SpanEntry.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/SpanEntry.java index 7f90ea56b..e90d339d5 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/SpanEntry.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/SpanEntry.java @@ -89,24 +89,31 @@ public class SpanEntry { return serverSpan.getBusinessKey(); } + public void setBusinessKey(String businessKey) { + if (clientSpan != null) { + clientSpan.setBusinessKey(businessKey); + } + serverSpan.setBusinessKey(businessKey); + } + public ChainNode.NodeStatus getSpanStatus() { if (clientSpan != null) { if (clientSpan.getExceptionStack() != null && clientSpan.getExceptionStack().length() > 0) { - if(clientSpan.getStatusCode() == 1){ - return ChainNode.NodeStatus.ABNORMAL; - }else{ - return ChainNode.NodeStatus.HUMAN_INTERRUPTION; - } + if (clientSpan.getStatusCode() == 1) { + return ChainNode.NodeStatus.ABNORMAL; + } else { + return ChainNode.NodeStatus.HUMAN_INTERRUPTION; + } } } if (serverSpan != null) { if (serverSpan.getExceptionStack() != null && serverSpan.getExceptionStack().length() > 0) { - if(clientSpan != null && clientSpan.getStatusCode() == 1){ - return ChainNode.NodeStatus.ABNORMAL; - }else{ - return ChainNode.NodeStatus.HUMAN_INTERRUPTION; - } + if (clientSpan != null && clientSpan.getStatusCode() == 1) { + return ChainNode.NodeStatus.ABNORMAL; + } else { + return ChainNode.NodeStatus.HUMAN_INTERRUPTION; + } } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/filter/impl/JDBCBusinessKeyHandleFilter.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/filter/impl/JDBCBusinessKeyHandleFilter.java new file mode 100644 index 000000000..211308bc1 --- /dev/null +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/filter/impl/JDBCBusinessKeyHandleFilter.java @@ -0,0 +1,39 @@ +package com.ai.cloud.skywalking.analysis.chainbuild.filter.impl; + +import com.ai.cloud.skywalking.analysis.chainbuild.SpanEntry; +import com.ai.cloud.skywalking.analysis.chainbuild.filter.SpanNodeProcessFilter; +import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; +import com.ai.cloud.skywalking.analysis.chainbuild.util.SubLevelSpanCostCounter; + +public class JDBCBusinessKeyHandleFilter extends SpanNodeProcessFilter { + @Override + public void doFilter(SpanEntry spanEntry, ChainNode node, SubLevelSpanCostCounter costMap) { + String businessKey = spanEntry.getBusinessKey(); + if (businessKey != null) { + int index = businessKey.lastIndexOf(":"); + if (index != -1) { + businessKey = businessKey.substring(index + 1).trim(); + String key = businessKey.toUpperCase(); + if (key.startsWith("SELECT")) { + businessKey = subBusinessKey(businessKey, key, "WHERE"); + } else if (key.startsWith("UPDATE")) { + businessKey = subBusinessKey(businessKey, key, "SET"); + } else if (key.startsWith("DELETE")) { + businessKey = subBusinessKey(businessKey, key, "WHERE"); + } else if (key.startsWith("INSERT")) { + businessKey = subBusinessKey(businessKey, key, "VALUES"); + } + } + } + spanEntry.setBusinessKey(businessKey); + this.doNext(spanEntry, node, costMap); + } + + private String subBusinessKey(String businessKey, String key,String keyWord) { + int whereIndex = key.indexOf(keyWord); + if (whereIndex != -1) { + businessKey = businessKey.substring(0, whereIndex - 1).trim(); + } + return businessKey; + } +} diff --git a/skywalking-analysis/src/main/resources/viewpointfilter.conf b/skywalking-analysis/src/main/resources/viewpointfilter.conf index 788b82387..19d5bc8b6 100644 --- a/skywalking-analysis/src/main/resources/viewpointfilter.conf +++ b/skywalking-analysis/src/main/resources/viewpointfilter.conf @@ -1,3 +1,3 @@ # default=CopyAttrFilter->ReplaceAddressFilter->ProcessCostTimeFilter->TokenGenerateFilter -J=CopyAttrFilter->AppendBusinessKeyFilter->ProcessCostTimeFilter->TokenGenerateFilter +J=CopyAttrFilter->JDBCBusinessKeyHandleFilter->AppendBusinessKeyFilter->ProcessCostTimeFilter->TokenGenerateFilter