diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/ProducerOperationHandlerInterceptor.java b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/ProducerOperationHandlerInterceptor.java index 52046eae650e593ca726a17a8c5cf246dc9ba648..ca1ed82ae29f5a9dbe7210b61301988b54053ee5 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/ProducerOperationHandlerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/ProducerOperationHandlerInterceptor.java @@ -48,16 +48,28 @@ public class ProducerOperationHandlerInterceptor implements InstanceMethodsAroun next = next.next(); next.setHeadValue(invocation.getContext().get(next.getHeadKey())); } + if (null == invocation.getOperationMeta()) { + return; + } String operationName = invocation.getMicroserviceQualifiedName(); AbstractSpan span = ContextManager.createEntrySpan(operationName, contextCarrier); - String url = invocation.getOperationMeta().getOperationPath(); - Tags.URL.set(span, url); + if (null != invocation.getOperationMeta() && null != invocation.getOperationMeta().getOperationPath()) { + String url = invocation.getOperationMeta().getOperationPath(); + Tags.URL.set(span, url); + } span.setComponent(ComponentsDefine.SERVICECOMB); SpanLayer.asRPCFramework(span); } @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + Invocation invocation = (Invocation)allArguments[0]; + AbstractSpan span = ContextManager.activeSpan(); + int statusCode = invocation.getStatus().getStatusCode(); + if (statusCode >= 400) { + span.errorOccurred(); + Tags.STATUS_CODE.set(span, Integer.toString(statusCode)); + } ContextManager.stopSpan(); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/TransportClientHandlerInterceptor.java b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/TransportClientHandlerInterceptor.java index 2eec6411612e9ce4555c692a2e37eef71aeffa85..cfb08a0d05eb9c6e0649c8ea3433e5544452278a 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/TransportClientHandlerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/servicecomb/TransportClientHandlerInterceptor.java @@ -43,10 +43,14 @@ public class TransportClientHandlerInterceptor implements InstanceMethodsAroundI public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { Invocation invocation = (Invocation)allArguments[0]; + if (null == invocation.getOperationMeta() || null == invocation.getEndpoint()) { + return; + } URI uri = new URI(invocation.getEndpoint().toString()); String peer = uri.getHost() + ":" + uri.getPort(); + String operationName = invocation.getMicroserviceQualifiedName(); final ContextCarrier contextCarrier = new ContextCarrier(); - AbstractSpan span = ContextManager.createExitSpan(invocation.getMicroserviceQualifiedName(), contextCarrier, peer); + AbstractSpan span = ContextManager.createExitSpan(operationName, contextCarrier, peer); CarrierItem next = contextCarrier.items(); while (next.hasNext()) { next = next.next();