From 98b5085f53e3e1fe6bc564a9470b6680ea9a38ae Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sat, 13 Aug 2016 23:34:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skywalking/agent/SkyWalkingAgent.java | 5 +- .../invoke/monitor/BaseInvokeMonitor.java | 4 +- .../monitor/RPCClientInvokeMonitor.java | 5 + .../ai/cloud/skywalking/logging/Logger.java | 3 +- .../CustomLocalMethodInterceptor.java | 18 +- .../protocol/proto/TraceProtocol.java | 344 +++++++++++++++++- .../ai/cloud/skywalking/protocol/AckSpan.java | 19 +- .../skywalking/protocol/RequestSpan.java | 2 +- .../ai/cloud/skywalking/protocol/Span.java | 3 + .../src/main/proto/TraceProtocol.proto | 1 + .../processor/AbstractSpanProcessor.java | 2 +- .../reciever/processor/AckSpanProcessor.java | 1 - .../processor/RequestSpanProcessor.java | 3 - .../cloud/skywalking/web/util/Constants.java | 1 + 14 files changed, 376 insertions(+), 35 deletions(-) diff --git a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkyWalkingAgent.java b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkyWalkingAgent.java index ca0f08355..96641af00 100644 --- a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkyWalkingAgent.java +++ b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkyWalkingAgent.java @@ -20,6 +20,9 @@ import java.io.File; import java.lang.instrument.Instrumentation; import java.net.URL; +import static net.bytebuddy.matcher.ElementMatchers.isInterface; +import static net.bytebuddy.matcher.ElementMatchers.not; + public class SkyWalkingAgent { private static Logger logger = LogManager.getLogger(SkyWalkingAgent.class); @@ -29,7 +32,7 @@ public class SkyWalkingAgent { final PluginDefineCategory pluginDefineCategory = PluginDefineCategory.category(new PluginBootstrap().loadPlugins()); - new AgentBuilder.Default().type(enhanceClassMatcher(pluginDefineCategory)) + new AgentBuilder.Default().type(enhanceClassMatcher(pluginDefineCategory).and(not(isInterface()))) .transform(new AgentBuilder.Transformer() { public DynamicType.Builder transform(DynamicType.Builder builder, TypeDescription typeDescription, ClassLoader classLoader) { diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/BaseInvokeMonitor.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/BaseInvokeMonitor.java index 0e6e895e2..71295174f 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/BaseInvokeMonitor.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/BaseInvokeMonitor.java @@ -28,8 +28,8 @@ public abstract class BaseInvokeMonitor { protected ContextData beforeInvoke(Span spanData, Identification id) { if (Config.BuriedPoint.PRINTF) { - logger.debug("TraceId:" + spanData.getTraceId() + "\tviewpointId:" + id.getViewPoint() + "\tParentLevelId:" - + spanData.getParentLevel() + "\tLevelId:" + spanData.getLevelId()); + logger.debug("TraceId:" + spanData.getTraceId() + "\tParentLevelId:" + spanData.getParentLevel() + + "\tLevelId:" + spanData.getLevelId() + "\tbusinessKey:" + spanData.getParameters()); } // 将新创建的Context存放到ThreadLocal栈中。 diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/RPCClientInvokeMonitor.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/RPCClientInvokeMonitor.java index c6ec5aecc..f593c75b6 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/RPCClientInvokeMonitor.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/RPCClientInvokeMonitor.java @@ -2,6 +2,7 @@ package com.ai.cloud.skywalking.invoke.monitor; import com.ai.cloud.skywalking.buffer.ContextBuffer; import com.ai.cloud.skywalking.conf.AuthDesc; +import com.ai.cloud.skywalking.conf.Config; import com.ai.cloud.skywalking.context.CurrentThreadSpanStack; import com.ai.cloud.skywalking.logging.LogManager; import com.ai.cloud.skywalking.logging.Logger; @@ -28,6 +29,10 @@ public class RPCClientInvokeMonitor extends BaseInvokeMonitor { //设置SpanType的类型 spanData.setSpanType(SpanType.RPC_CLIENT); + if (Config.BuriedPoint.PRINTF) { + logger.debug("TraceId:" + spanData.getTraceId() + "\tParentLevelId:" + spanData.getParentLevel() + + "\tLevelId:" + spanData.getLevelId() + "\tbusinessKey:" + spanData.getParameters()); + } CurrentThreadSpanStack.push(spanData); diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java index 950761f35..d4b648ffb 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java @@ -3,6 +3,7 @@ package com.ai.cloud.skywalking.logging; import com.ai.cloud.skywalking.protocol.util.LoggingUtil; +import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; @@ -89,7 +90,7 @@ public class Logger { break; } - tmpMessage = tmpMessage.replaceFirst("\\{\\}", String.valueOf(parameters[parametersIndex++])); + tmpMessage = tmpMessage.replaceFirst("\\{\\}", URLEncoder.encode(String.valueOf(parameters[parametersIndex++]))); startSize = index + 2; } return tmpMessage; diff --git a/skywalking-collector/skywalking-sdk-plugin/custom-local-method-interceptor-plugin/src/main/java/com/ai/cloud/skywalking/plugin/custom/localmethod/CustomLocalMethodInterceptor.java b/skywalking-collector/skywalking-sdk-plugin/custom-local-method-interceptor-plugin/src/main/java/com/ai/cloud/skywalking/plugin/custom/localmethod/CustomLocalMethodInterceptor.java index 72abfb6dd..90a3ae7ee 100644 --- a/skywalking-collector/skywalking-sdk-plugin/custom-local-method-interceptor-plugin/src/main/java/com/ai/cloud/skywalking/plugin/custom/localmethod/CustomLocalMethodInterceptor.java +++ b/skywalking-collector/skywalking-sdk-plugin/custom-local-method-interceptor-plugin/src/main/java/com/ai/cloud/skywalking/plugin/custom/localmethod/CustomLocalMethodInterceptor.java @@ -43,7 +43,7 @@ public class CustomLocalMethodInterceptor implements InstanceMethodsAroundInterc @Override public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { - new LocalMethodInvokeMonitor().afterInvoke(); + recordResultIfNecessary(ret); return ret; } @@ -65,10 +65,24 @@ public class CustomLocalMethodInterceptor implements InstanceMethodsAroundInterc @Override public Object afterMethod(StaticMethodInvokeContext interceptorContext, Object ret) { - new LocalMethodInvokeMonitor().afterInvoke(); + recordResultIfNecessary(ret); return ret; } + private void recordResultIfNecessary(Object ret) { + if (Config.Plugin.CustomLocalMethodInterceptorPlugin.RECORD_PARAM_ENABLE){ + String retStr; + try{ + retStr = new Gson().toJson(ret); + }catch (Exception e){ + retStr = "N/A"; + } + new LocalMethodInvokeMonitor().afterInvoke(retStr); + }else { + new LocalMethodInvokeMonitor().afterInvoke(); + } + } + @Override public void handleMethodException(Throwable t, MethodInvokeContext interceptorContext) { new LocalMethodInvokeMonitor().occurException(t); diff --git a/skywalking-protocol/src/main/gen-java/com/ai/cloud/skywalking/protocol/proto/TraceProtocol.java b/skywalking-protocol/src/main/gen-java/com/ai/cloud/skywalking/protocol/proto/TraceProtocol.java index 87c0f2a96..dccb25119 100644 --- a/skywalking-protocol/src/main/gen-java/com/ai/cloud/skywalking/protocol/proto/TraceProtocol.java +++ b/skywalking-protocol/src/main/gen-java/com/ai/cloud/skywalking/protocol/proto/TraceProtocol.java @@ -100,6 +100,40 @@ public final class TraceProtocol { */ com.google.protobuf.ByteString getViewpointIdBytes(); + + /** + * map<string, string> parameters = 8; + */ + int getParametersCount(); + /** + * map<string, string> parameters = 8; + */ + boolean containsParameters( + java.lang.String key); + /** + * Use {@link #getParametersMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getParameters(); + /** + * map<string, string> parameters = 8; + */ + java.util.Map + getParametersMap(); + /** + * map<string, string> parameters = 8; + */ + + java.lang.String getParametersOrDefault( + java.lang.String key, + java.lang.String defaultValue); + /** + * map<string, string> parameters = 8; + */ + + java.lang.String getParametersOrThrow( + java.lang.String key); } /** * Protobuf type {@code AckSpan} @@ -189,6 +223,18 @@ public final class TraceProtocol { viewpointId_ = bs; break; } + case 66: { + if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) { + parameters_ = com.google.protobuf.MapField.newMapField( + ParametersDefaultEntryHolder.defaultEntry); + mutable_bitField0_ |= 0x00000080; + } + com.google.protobuf.MapEntry + parameters = input.readMessage( + ParametersDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + parameters_.getMutableMap().put(parameters.getKey(), parameters.getValue()); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -206,6 +252,17 @@ public final class TraceProtocol { return com.ai.cloud.skywalking.protocol.proto.TraceProtocol.internal_static_AckSpan_descriptor; } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 8: + return internalGetParameters(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { return com.ai.cloud.skywalking.protocol.proto.TraceProtocol.internal_static_AckSpan_fieldAccessorTable @@ -427,6 +484,82 @@ public final class TraceProtocol { } } + public static final int PARAMETERS_FIELD_NUMBER = 8; + private static final class ParametersDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, java.lang.String> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + com.ai.cloud.skywalking.protocol.proto.TraceProtocol.internal_static_AckSpan_ParametersEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> parameters_; + private com.google.protobuf.MapField + internalGetParameters() { + if (parameters_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ParametersDefaultEntryHolder.defaultEntry); + } + return parameters_; + } + + public int getParametersCount() { + return internalGetParameters().getMap().size(); + } + /** + * map<string, string> parameters = 8; + */ + + public boolean containsParameters( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetParameters().getMap().containsKey(key); + } + /** + * Use {@link #getParametersMap()} instead. + */ + @java.lang.Deprecated + public java.util.Map getParameters() { + return getParametersMap(); + } + /** + * map<string, string> parameters = 8; + */ + + public java.util.Map getParametersMap() { + return internalGetParameters().getMap(); + } + /** + * map<string, string> parameters = 8; + */ + + public java.lang.String getParametersOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetParameters().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + * map<string, string> parameters = 8; + */ + + public java.lang.String getParametersOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetParameters().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + private byte memoizedIsInitialized = -1; public final boolean isInitialized() { byte isInitialized = memoizedIsInitialized; @@ -480,6 +613,15 @@ public final class TraceProtocol { if (((bitField0_ & 0x00000040) == 0x00000040)) { com.google.protobuf.GeneratedMessageV3.writeString(output, 7, viewpointId_); } + for (java.util.Map.Entry entry + : internalGetParameters().getMap().entrySet()) { + com.google.protobuf.MapEntry + parameters = ParametersDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + output.writeMessage(8, parameters); + } unknownFields.writeTo(output); } @@ -512,6 +654,16 @@ public final class TraceProtocol { if (((bitField0_ & 0x00000040) == 0x00000040)) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, viewpointId_); } + for (java.util.Map.Entry entry + : internalGetParameters().getMap().entrySet()) { + com.google.protobuf.MapEntry + parameters = ParametersDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, parameters); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -564,6 +716,8 @@ public final class TraceProtocol { result = result && getViewpointId() .equals(other.getViewpointId()); } + result = result && internalGetParameters().equals( + other.internalGetParameters()); result = result && unknownFields.equals(other.unknownFields); return result; } @@ -604,6 +758,10 @@ public final class TraceProtocol { hash = (37 * hash) + VIEWPOINTID_FIELD_NUMBER; hash = (53 * hash) + getViewpointId().hashCode(); } + if (!internalGetParameters().getMap().isEmpty()) { + hash = (37 * hash) + PARAMETERS_FIELD_NUMBER; + hash = (53 * hash) + internalGetParameters().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -698,6 +856,28 @@ public final class TraceProtocol { return com.ai.cloud.skywalking.protocol.proto.TraceProtocol.internal_static_AckSpan_descriptor; } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 8: + return internalGetParameters(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMutableMapField( + int number) { + switch (number) { + case 8: + return internalGetMutableParameters(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { return com.ai.cloud.skywalking.protocol.proto.TraceProtocol.internal_static_AckSpan_fieldAccessorTable @@ -736,6 +916,7 @@ public final class TraceProtocol { bitField0_ = (bitField0_ & ~0x00000020); viewpointId_ = ""; bitField0_ = (bitField0_ & ~0x00000040); + internalGetMutableParameters().clear(); return this; } @@ -788,6 +969,8 @@ public final class TraceProtocol { to_bitField0_ |= 0x00000040; } result.viewpointId_ = viewpointId_; + result.parameters_ = internalGetParameters(); + result.parameters_.makeImmutable(); result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -859,6 +1042,8 @@ public final class TraceProtocol { viewpointId_ = other.viewpointId_; onChanged(); } + internalGetMutableParameters().mergeFrom( + other.internalGetParameters()); this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1301,6 +1486,125 @@ public final class TraceProtocol { onChanged(); return this; } + + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> parameters_; + private com.google.protobuf.MapField + internalGetParameters() { + if (parameters_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ParametersDefaultEntryHolder.defaultEntry); + } + return parameters_; + } + private com.google.protobuf.MapField + internalGetMutableParameters() { + onChanged();; + if (parameters_ == null) { + parameters_ = com.google.protobuf.MapField.newMapField( + ParametersDefaultEntryHolder.defaultEntry); + } + if (!parameters_.isMutable()) { + parameters_ = parameters_.copy(); + } + return parameters_; + } + + public int getParametersCount() { + return internalGetParameters().getMap().size(); + } + /** + * map<string, string> parameters = 8; + */ + + public boolean containsParameters( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetParameters().getMap().containsKey(key); + } + /** + * Use {@link #getParametersMap()} instead. + */ + @java.lang.Deprecated + public java.util.Map getParameters() { + return getParametersMap(); + } + /** + * map<string, string> parameters = 8; + */ + + public java.util.Map getParametersMap() { + return internalGetParameters().getMap(); + } + /** + * map<string, string> parameters = 8; + */ + + public java.lang.String getParametersOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetParameters().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + * map<string, string> parameters = 8; + */ + + public java.lang.String getParametersOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetParameters().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearParameters() { + getMutableParameters().clear(); + return this; + } + /** + * map<string, string> parameters = 8; + */ + + public Builder removeParameters( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + getMutableParameters().remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableParameters() { + return internalGetMutableParameters().getMutableMap(); + } + /** + * map<string, string> parameters = 8; + */ + public Builder putParameters( + java.lang.String key, + java.lang.String value) { + if (key == null) { throw new java.lang.NullPointerException(); } + if (value == null) { throw new java.lang.NullPointerException(); } + getMutableParameters().put(key, value); + return this; + } + /** + * map<string, string> parameters = 8; + */ + + public Builder putAllParameters( + java.util.Map values) { + getMutableParameters().putAll(values); + return this; + } public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); @@ -4199,6 +4503,11 @@ public final class TraceProtocol { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_AckSpan_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_AckSpan_ParametersEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_AckSpan_ParametersEntry_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_RequestSpan_descriptor; private static final @@ -4218,21 +4527,24 @@ public final class TraceProtocol { descriptor; static { java.lang.String[] descriptorData = { - "\n\023TraceProtocol.proto\"\217\001\n\007AckSpan\022\017\n\007tra" + + "\n\023TraceProtocol.proto\"\360\001\n\007AckSpan\022\017\n\007tra" + "ceId\030\001 \002(\t\022\023\n\013parentLevel\030\002 \001(\t\022\017\n\007level" + "Id\030\003 \002(\005\022\014\n\004cost\030\004 \002(\003\022\022\n\nstatusCode\030\005 \002" + "(\005\022\026\n\016exceptionStack\030\006 \001(\t\022\023\n\013viewpointI" + - "d\030\007 \002(\t\"\375\002\n\013RequestSpan\022\017\n\007traceId\030\001 \002(\t" + - "\022\023\n\013parentLevel\030\002 \001(\t\022\017\n\007levelId\030\003 \002(\005\022\023" + - "\n\013viewPointId\030\004 \002(\t\022\021\n\tstartDate\030\005 \002(\003\022\024" + - "\n\014spanTypeDesc\030\006 \002(\t\022\020\n\010callType\030\007 \002(\t\022\020" + - "\n\010spanType\030\010 \002(\r\022\025\n\rapplicationId\030\t \002(\t\022" + - "\016\n\006userId\030\n \002(\t\022\024\n\014bussinessKey\030\013 \001(\t\022\017\n", - "\007agentId\030\014 \002(\t\0220\n\nparameters\030\r \003(\0132\034.Req" + - "uestSpan.ParametersEntry\022\021\n\tprocessNo\030\016 " + - "\002(\t\022\017\n\007address\030\017 \002(\t\0321\n\017ParametersEntry\022" + - "\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B(\n&com.a" + - "i.cloud.skywalking.protocol.proto" + "d\030\007 \002(\t\022,\n\nparameters\030\010 \003(\0132\030.AckSpan.Pa" + + "rametersEntry\0321\n\017ParametersEntry\022\013\n\003key\030" + + "\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\375\002\n\013RequestSpan" + + "\022\017\n\007traceId\030\001 \002(\t\022\023\n\013parentLevel\030\002 \001(\t\022\017" + + "\n\007levelId\030\003 \002(\005\022\023\n\013viewPointId\030\004 \002(\t\022\021\n\t" + + "startDate\030\005 \002(\003\022\024\n\014spanTypeDesc\030\006 \002(\t\022\020\n", + "\010callType\030\007 \002(\t\022\020\n\010spanType\030\010 \002(\r\022\025\n\rapp" + + "licationId\030\t \002(\t\022\016\n\006userId\030\n \002(\t\022\024\n\014buss" + + "inessKey\030\013 \001(\t\022\017\n\007agentId\030\014 \002(\t\0220\n\nparam" + + "eters\030\r \003(\0132\034.RequestSpan.ParametersEntr" + + "y\022\021\n\tprocessNo\030\016 \002(\t\022\017\n\007address\030\017 \002(\t\0321\n" + + "\017ParametersEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002" + + " \001(\t:\0028\001B(\n&com.ai.cloud.skywalking.prot" + + "ocol.proto" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -4251,7 +4563,13 @@ public final class TraceProtocol { internal_static_AckSpan_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_AckSpan_descriptor, - new java.lang.String[] { "TraceId", "ParentLevel", "LevelId", "Cost", "StatusCode", "ExceptionStack", "ViewpointId", }); + new java.lang.String[] { "TraceId", "ParentLevel", "LevelId", "Cost", "StatusCode", "ExceptionStack", "ViewpointId", "Parameters", }); + internal_static_AckSpan_ParametersEntry_descriptor = + internal_static_AckSpan_descriptor.getNestedTypes().get(0); + internal_static_AckSpan_ParametersEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_AckSpan_ParametersEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); internal_static_RequestSpan_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_RequestSpan_fieldAccessorTable = new diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java index 947d61a68..b4332714f 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java @@ -122,14 +122,6 @@ public class AckSpan extends AbstractDataSerializable { this.exceptionStack = exceptionStack; } - public Map getParamters() { - return paramters; - } - - public void setParamters(Map paramters) { - this.paramters = paramters; - } - @Override public int getDataType() { return 2; @@ -137,9 +129,15 @@ public class AckSpan extends AbstractDataSerializable { @Override public byte[] getData() { - return TraceProtocol.AckSpan.newBuilder().setTraceId(traceId).setParentLevel(parentLevel). + TraceProtocol.AckSpan.Builder builder = TraceProtocol.AckSpan.newBuilder().setTraceId(traceId).setParentLevel(parentLevel). setLevelId(levelId).setCost(cost).setViewpointId(viewPointId).setStatusCode(statusCode) - .setExceptionStack(exceptionStack).build().toByteArray(); + .setExceptionStack(exceptionStack); + + if (paramters != null && paramters.size() > 0){ + builder.putAllParameters(paramters); + } + + return builder.build().toByteArray(); } @Override @@ -154,6 +152,7 @@ public class AckSpan extends AbstractDataSerializable { ackSpan.setExceptionStack(ackSpanProtocol.getExceptionStack()); ackSpan.setStatusCode((byte) ackSpanProtocol.getStatusCode()); ackSpan.viewPointId = ackSpanProtocol.getViewpointId(); + ackSpan.paramters = ackSpanProtocol.getParametersMap(); } catch (InvalidProtocolBufferException e) { throw new ConvertFailedException(e.getMessage(),e); } diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/RequestSpan.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/RequestSpan.java index b79d62369..743582fd5 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/RequestSpan.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/RequestSpan.java @@ -221,7 +221,7 @@ public class RequestSpan extends AbstractDataSerializable { } if (parameters != null && parameters.size() > 0) { - builder.getParametersMap().putAll(parameters); + builder.putAllParameters(parameters); } return builder.setCallType(callType).setApplicationId(applicationId).setUserId(userId).setAgentId(agentId) 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 efd08be5d..d689395ff 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 @@ -209,6 +209,9 @@ public class Span { } public void setInvokeResult(String result){ + if (result == null){ + result = ""; + } this.parameters.put(INVOKE_RESULT_PARAMETER_KEY, result); } diff --git a/skywalking-protocol/src/main/proto/TraceProtocol.proto b/skywalking-protocol/src/main/proto/TraceProtocol.proto index 8fb195176..95a5a9143 100644 --- a/skywalking-protocol/src/main/proto/TraceProtocol.proto +++ b/skywalking-protocol/src/main/proto/TraceProtocol.proto @@ -10,6 +10,7 @@ message AckSpan { required int32 statusCode = 5; optional string exceptionStack = 6; required string viewpointId = 7; + map parameters = 8; } message RequestSpan { diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AbstractSpanProcessor.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AbstractSpanProcessor.java index 012055d58..9f2d8847d 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AbstractSpanProcessor.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AbstractSpanProcessor.java @@ -56,7 +56,7 @@ public abstract class AbstractSpanProcessor implements IProcessor { @Override public void process(List serializedObjects) { - //doAlarm(serializedObjects); + doAlarm(serializedObjects); doSaveHBase(connection, serializedObjects); } diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AckSpanProcessor.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AckSpanProcessor.java index ec127fe7b..8d8d9f74d 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AckSpanProcessor.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/AckSpanProcessor.java @@ -47,7 +47,6 @@ public class AckSpanProcessor extends AbstractSpanProcessor { String columnName; for (AbstractDataSerializable serializedObject : serializedObjects) { AckSpan ackSpan = (AckSpan) serializedObject; - System.out.println(ackSpan.getTraceId() + "-ACK:" + ackSpan.getViewPointId()); Put put = new Put(Bytes.toBytes(ackSpan.getTraceId()), getTSBySpanTraceId(ackSpan.getTraceId())); if (StringUtils.isEmpty(ackSpan.getParentLevel().trim())) { columnName = ackSpan.getLevelId() + ""; diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/RequestSpanProcessor.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/RequestSpanProcessor.java index dd67086d5..b4c979edf 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/RequestSpanProcessor.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/processor/RequestSpanProcessor.java @@ -31,9 +31,6 @@ public class RequestSpanProcessor extends AbstractSpanProcessor { String columnName; for (AbstractDataSerializable serializedObject : serializedObjects) { RequestSpan requestSpan = (RequestSpan) serializedObject; - System.out.println( - requestSpan.getTraceId() + ":" + requestSpan.getParentLevel() + "." + requestSpan.getLevelId() + ":" - + requestSpan.getViewPointId()); Put put = new Put(Bytes.toBytes(requestSpan.getTraceId()), getTSBySpanTraceId(requestSpan.getTraceId())); if (StringUtils.isEmpty(requestSpan.getParentLevel().trim())) { columnName = requestSpan.getLevelId() + ""; diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/util/Constants.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/util/Constants.java index 37e219a0c..2204bb1ab 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/util/Constants.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/util/Constants.java @@ -27,6 +27,7 @@ public class Constants { put("J", "JDBC"); put("W", "WEB"); put("D", "DUBBO"); + put("L", "LOCAL"); put("U", "UNKNOWN"); } };