You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by GitBox <gi...@apache.org> on 2018/05/31 05:06:48 UTC
[GitHub] yrjjf commented on issue #1297: tiny框架插件开发,遇到探针启动报错
yrjjf commented on issue #1297: tiny框架插件开发,遇到探针启动报错
URL: https://github.com/apache/incubator-skywalking/issues/1297#issuecomment-393404343
package com.hsjry.monitor.sw.client.agent;
import com.google.common.base.MoreObjects;
import org.apache.skywalking.apm.agent.core.context.CarrierItem;
import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
import org.apache.skywalking.apm.agent.core.context.ContextManager;
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
import org.apache.skywalking.apm.network.trace.component.Component;
import org.tinygroup.event.Event;
import java.lang.reflect.Method;
public class TinyRPCInterceptor implements InstanceMethodsAroundInterceptor {
private static String generateViewPoint(Event request) {
StringBuilder viewPoint = new StringBuilder(request.getServiceRequest().getNodeName());
viewPoint.append("." + request.getServiceRequest().getServiceId());
viewPoint.append("(" + request.getServiceRequest().getContext().getItemMap().toString() + ")");
return viewPoint.toString();
}
@Override
public void beforeMethod(EnhancedInstance enhancedInstance, Method method, Object[] objects, Class<?>[] classes, MethodInterceptResult methodInterceptResult) throws Throwable {
Event request = (Event)objects[0];
ContextCarrier contextCarrier = new ContextCarrier();
CarrierItem next = contextCarrier.items();
while (next.hasNext()) {
next = next.next();
next.setHeadValue(MoreObjects.toStringHelper(request.getServiceRequest().getContext().getItemMap().get(next.getHeadKey())).toString());
}
AbstractSpan span = ContextManager.createEntrySpan(generateViewPoint(request), contextCarrier);
SpanLayer.asRPCFramework(span);
span.setComponent(new Component() {
@Override
public int getId() {
return 110;
}
@Override
public String getName() {
return "tiny-rpc";
}
});
}
@Override
public Object afterMethod(EnhancedInstance enhancedInstance, Method method, Object[] objects, Class<?>[] classes, Object o) throws Throwable {
Event response = (Event)o;
if (response != null && response.getThrowable() != null) {
AbstractSpan span = ContextManager.activeSpan();
span.log(response.getThrowable());
span.errorOccurred();
}
ContextManager.stopSpan();
return o;
}
@Override
public void handleMethodException(EnhancedInstance enhancedInstance, Method method, Object[] objects, Class<?>[] classes, Throwable throwable) {
AbstractSpan activeSpan = ContextManager.activeSpan();
activeSpan.errorOccurred();
activeSpan.log(throwable);
}
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services