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 8c0b2f273..7aab8ae7b 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 @@ -11,8 +11,10 @@ public class SkywalkingAgent { public static void premain(String agentArgs, Instrumentation inst) { ConfigInitializer.initialize(); - if (Config.SkyWalking.ALL_METHOD_MONITOR){ - inst.addTransformer(new ClassTransformer()); + + if (Config.SkyWalking.ALL_METHOD_MONITOR) { + String interceptorPackage = System.getProperty("interceptor.package", ""); + inst.addTransformer(new ClassTransformer(interceptorPackage)); } PluginBootstrap bootstrap = new PluginBootstrap(); 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 4c1e990eb..7b6b63b19 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 @@ -46,6 +46,10 @@ public abstract class BaseInvokeMonitor { } protected void afterInvoke() { + afterInvoke(null); + } + + protected void afterInvoke(String resultJson) { try { if (!AuthDesc.isAuth()) return; @@ -56,6 +60,11 @@ public abstract class BaseInvokeMonitor { return; } + // 追加Result JSon + if (resultJson != null){ + spanData.appendParameter("Result", resultJson); + } + if (Config.BuriedPoint.PRINTF) { logger.debug( "TraceId-ACK:" + spanData.getTraceId() + "\tParentLevelId:" + spanData.getParentLevel() + "\tLevelId:" + spanData diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java index 687f90fa1..cd96235e4 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java @@ -32,6 +32,10 @@ public class LocalMethodInvokeMonitor extends BaseInvokeMonitor { super.afterInvoke(); } + public void afterInvoke(String resultJsonStr){ + super.afterInvoke(resultJsonStr); + } + public void occurException(Throwable th){ super.occurException(th); diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/ClassTransformer.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/ClassTransformer.java index e36c867cf..d0c7c5c39 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/ClassTransformer.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/ClassTransformer.java @@ -15,9 +15,15 @@ public class ClassTransformer implements ClassFileTransformer { private Logger logger = LogManager.getLogger(ClassTransformer.class); + private String interceptorPackage; + + public ClassTransformer(String interceptorPackage){ + this.interceptorPackage = interceptorPackage; + } + @Override public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { - String interceptorPackage = System.getProperty("interceptor.package", ""); + if (interceptorPackage == null || interceptorPackage.length() == 0) { return classfileBuffer; } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/MethodInterceptor.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/MethodInterceptor.java index bc3ba88c9..6fcdde96f 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/MethodInterceptor.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/transformer/MethodInterceptor.java @@ -9,7 +9,8 @@ import com.google.gson.Gson; public class MethodInterceptor { - public void before(Class originClass, Class[] parametersType, Object[] allArgument, Object superCall, String methodName) { + public void before(Class originClass, Class[] parametersType, Object[] allArgument, Object superCall, + String methodName) { LocalMethodInvokeMonitor localMethodInvokeMonitor = new LocalMethodInvokeMonitor(); Identification.IdentificationBuilder identificationBuilder = Identification.newBuilder(); identificationBuilder.viewPoint(generateViewPoint(originClass, parametersType, methodName)); @@ -35,8 +36,6 @@ public class MethodInterceptor { try { identificationBuilder.appendParameter("P" + i, new Gson().toJson(allArgument[i])); } catch (Exception e) { - // Do nothing - } finally { identificationBuilder.appendParameter("P" + i, "Cannot convert parameter"); } } @@ -58,8 +57,16 @@ public class MethodInterceptor { public void after(Class originClass, Class resultType, Object result) { - //TODO 需要把参数累加上去 - new LocalMethodInvokeMonitor().afterInvoke(); + String resultJson = null; + if (!void.class.getName().equals(resultType.getName())) { + try { + resultJson = new Gson().toJson(result); + } catch (Exception e) { + resultJson = "Can not convert result"; + } + } + + new LocalMethodInvokeMonitor().afterInvoke(resultJson); } diff --git a/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java b/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java index 6bd6adde8..e4cdb6fba 100644 --- a/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java +++ b/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/AckSpan.java @@ -64,7 +64,7 @@ public class AckSpan extends AbstractDataSerializable { this.exceptionStack = spanData.getExceptionStack(); this.userId = spanData.getUserId(); this.applicationId = spanData.getApplicationId(); - + this.paramters.putAll(spanData.getParameters()); } public AckSpan() { diff --git a/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java b/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java index 49c93febe..857bb6a3e 100644 --- a/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java +++ b/skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java @@ -225,4 +225,8 @@ public class Span { public void setViewPointId(String viewPointId) { this.viewPointId = viewPointId; } + + public void appendParameter(String key, String value) { + this.parameters.put(key, value); + } }