Skip to content

Commit

Permalink
Merge pull request #4 from newrelic-experimental/useDT
Browse files Browse the repository at this point in the history
Fixed Distributed tracing inconsistencies
  • Loading branch information
dhilpipre committed May 13, 2022
2 parents 9304032 + d587324 commit 1853d34
Show file tree
Hide file tree
Showing 77 changed files with 1,206 additions and 269 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ plugins {

project.ext {
group = 'com.newrelic.instrumentation'
javaAgentVersion = '6.0.0'
javaAgentVersion = '6.4.1'

// Aligned with minimum Java major version supported by latest Java Agent
javaVersion = JavaVersion.VERSION_1_8
Expand Down
4 changes: 3 additions & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ include 'tibco_bw_binding_6'
include 'tibco_bw_coreapi_6'
include 'tibco_bw_http_6'
include 'tibco_bw_pvm_6.3'
include 'tibco_bw_pvm_6.6'
include 'apache_nhttp'
include 'tibco_bw_bx_2_6'
include 'tibco_bw_bx_6'
Expand All @@ -18,6 +19,7 @@ include 'tibco_bw_rest_6'
include 'tibco_bw_axisengine_6'
include 'tibco_bw_bxservice_6'
include 'tibco_bw_ftl_6'
include 'tibco_bw_jerseymodel_6'
include 'tibco_bw_msgrec_6'
include 'tibco_bw_soap_6'
include 'tibco_bw_jerseymodel_2.1'
include 'tibco_bw_jerseymodel_2.8'
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package org.apache.axis2.engine;

import java.util.logging.Level;

import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;

import com.newrelic.api.agent.Logger;
import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;
import com.newrelic.api.agent.weaver.MatchType;
Expand All @@ -20,10 +17,6 @@ public abstract class Phase {

@Trace(dispatcher=true)
public Handler.InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
Logger logger = NewRelic.getAgent().getLogger();
logger.log(Level.FINE, "In Phase: {0}", new Object[] {getClass().getCanonicalName()});
logger.log(Level.FINE, "Name: {0}", new Object[] {getName()});
logger.log(Level.FINE, "Phase - phase name: {0}", new Object[] {getPhaseName()});

NewRelic.getAgent().getTracedMethod().setMetricName(new String[] {"Custom",getName(),msgContext.getSoapAction(),getPhaseName()});
return Weaver.callOriginal();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.apache.axis2.receivers;

import java.util.logging.Level;

import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisMessage;

import com.newrelic.api.agent.Logger;
import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;
import com.newrelic.api.agent.TracedMethod;
Expand All @@ -20,9 +17,6 @@ public abstract class AbstractMessageReceiver {
@Trace(dispatcher=true)
public void receive(MessageContext msgCtx) throws AxisFault {
AxisMessage axisMsg = msgCtx.getAxisMessage();
Logger logger = NewRelic.getAgent().getLogger();

logger.log(Level.FINE, "AbstractMessageReceiver - receive: {0}", new Object[] {getClass().getCanonicalName()});
String axisName = axisMsg.getName();
String axisOpName = axisMsg.getAxisOperation().getName().getLocalPart();

Expand Down
6 changes: 3 additions & 3 deletions tibco_bw_bx_2_6/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'lib')

// New Relic Java Agent dependencies
implementation 'com.newrelic.agent.java:newrelic-agent:6.0.0'
implementation 'com.newrelic.agent.java:newrelic-api:6.0.0'
implementation 'com.newrelic.agent.java:newrelic-agent:6.4.1'
implementation 'com.newrelic.agent.java:newrelic-api:6.4.1'
implementation fileTree(include: ['*.jar'], dir: '../libs')
}

jar {
manifest {
attributes 'Implementation-Title': 'com.newrelic.instrumentation.tibco_bw_bx_6'
attributes 'Implementation-Title': 'com.newrelic.instrumentation.tibco_bw_bx_2_6'
attributes 'Implementation-Vendor': 'New Relic'
attributes 'Implementation-Vendor-Id': 'com.newrelic'
attributes 'Implementation-Version': 1.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.nr.instrumentation.bx;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.newrelic.api.agent.HeaderType;
import com.newrelic.api.agent.Headers;

public class TibcoBXHeaders implements Headers {

private Map<String, String> headers = new HashMap<>();

@Override
public HeaderType getHeaderType() {
return HeaderType.MESSAGE;
}

@Override
public String getHeader(String name) {
return headers.get(name);
}

@Override
public Collection<String> getHeaders(String name) {
List<String> list = new ArrayList<>();
String value = getHeader(name);
if(value != null && !value.isEmpty()) {
list.add(value);
}
return list ;
}

@Override
public void setHeader(String name, String value) {
headers.put(name, value);
}

@Override
public void addHeader(String name, String value) {
headers.put(name, value);
}

@Override
public Collection<String> getHeaderNames() {
return headers.keySet();
}

@Override
public boolean containsHeader(String name) {
return getHeaderNames().contains(name);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@
import com.newrelic.api.agent.weaver.MatchType;
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.instrumentation.bx.TibcoBXHeaders;

@Weave(type=MatchType.Interface)
public abstract class BxEndpointReference {

@Trace(dispatcher=true)
public <T> void send(T[] paramArrayOfT, BxResponseListener paramBxResponseListener, BxInvocationInfo paramBxInvocationInfo) {
if(paramBxResponseListener.token == null) {
paramBxResponseListener.token = NewRelic.getAgent().getTransaction().getToken();
}
NewRelic.getAgent().getTransaction().insertDistributedTraceHeaders(new TibcoBXHeaders());
Weaver.callOriginal();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@

import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;
import com.newrelic.api.agent.TransactionNamePriority;
import com.newrelic.api.agent.weaver.MatchType;
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.instrumentation.bx.OutboundWrapper;

@Weave(type=MatchType.Interface)
public abstract class BxInterfaceProvider {
Expand All @@ -25,12 +23,8 @@ public abstract class BxInterfaceProvider {

@Trace
public <T> void invoke(T[] paramArrayOfT, BxReplyEndpointReference replyEndpointReference, BxInvocationInfo invocationInfo) {
// if(replyEndpointReference.token == null) {
// replyEndpointReference.token = NewRelic.getAgent().getTransaction().getToken();
// }
NewRelic.getAgent().getTracedMethod().addOutboundRequestHeaders(new OutboundWrapper(invocationInfo));
NewRelic.getAgent().getTransaction().insertDistributedTraceHeaders(invocationInfo.headers);
Weaver.callOriginal();
NewRelic.getAgent().getTracedMethod().setMetricName(new String[] {"Custom/BXInterfaceProvider",getServiceName(),invocationInfo.getOperationName()});
NewRelic.getAgent().getTransaction().setTransactionName(TransactionNamePriority.CUSTOM_HIGH, true, "AxisService", new String[] {getServiceName(),invocationInfo.getOperationName()});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.tibco.bx.api.services;

import java.util.Map;

import javax.security.auth.Subject;

import com.newrelic.api.agent.weaver.NewField;
import com.newrelic.api.agent.weaver.Weave;
import com.nr.instrumentation.bx.TibcoBXHeaders;

@Weave
public abstract class BxInvocationInfo {

@NewField
public TibcoBXHeaders headers = new TibcoBXHeaders();

public abstract String getOperationName();

public abstract Map<String, Object> getInputContextVariables();

public abstract void setInputContextVariable(final String paramName, final Object value);

public abstract String getAppName();

public abstract String getProcessName();

public abstract String getComponentModuleName();

public BxInvocationInfo() {
}

public BxInvocationInfo(String operationName, BxMessageType messageType) {
}

public BxInvocationInfo(String operationName, BxMessageType messageType, String appName, String appVersion,
String componentModuleName, String componentModuleVersion) {
}

public BxInvocationInfo(String operationName, Subject subject, String correlationId, String contextId,
String parentContextId, BxMessageType messageType) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,55 +4,38 @@

import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;
import com.newrelic.api.agent.TransportType;
import com.newrelic.api.agent.weaver.MatchType;
import com.newrelic.api.agent.weaver.NewField;
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;

@Weave(type=MatchType.Interface)
public abstract class BxReplyEndpointReference {

@NewField
public com.newrelic.api.agent.Token token;

@Trace(dispatcher=true)
public <T> void send(T[] paramArrayOfT, BxInvocationInfo paramBxInvocationInfo) {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTransaction().acceptDistributedTraceHeaders(TransportType.Other, paramBxInvocationInfo.headers);
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","BxReplyEndpointReference",getClass().getSimpleName(),"send",getOperationName());
Weaver.callOriginal();
}


@Trace(dispatcher=true)
public <T> void sendFault(QName paramQName, T[] paramArrayOfT, BxInvocationInfo paramBxInvocationInfo) {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTransaction().acceptDistributedTraceHeaders(TransportType.Other, paramBxInvocationInfo.headers);
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","BxReplyEndpointReference",getClass().getSimpleName(),"sendFault",getOperationName());
Weaver.callOriginal();
}

@Trace(dispatcher=true)
public void onException(String paramString, Throwable paramThrowable) {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","BxReplyEndpointReference",getClass().getSimpleName(),"onException",getOperationName());
NewRelic.noticeError(paramThrowable);
Weaver.callOriginal();
}

@Trace(dispatcher=true)
public void onCompletion() {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","BxReplyEndpointReference",getClass().getSimpleName(),"onCompletion",getOperationName());
Weaver.callOriginal();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,26 @@
package com.tibco.bx.api.services;

import javax.xml.namespace.QName;
import com.newrelic.api.agent.Token;

import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;
import com.newrelic.api.agent.TransportType;
import com.newrelic.api.agent.weaver.MatchType;
import com.newrelic.api.agent.weaver.NewField;
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;

@Weave(type=MatchType.Interface)
public abstract class BxResponseListener {

@NewField
public Token token;

@Trace(dispatcher=true)
@Trace
public <T> void onMessage(T[] paramArrayOfT, QName paramQName, BxInvocationInfo paramBxInvocationInfo) {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTransaction().acceptDistributedTraceHeaders(TransportType.Other, paramBxInvocationInfo.headers);
Weaver.callOriginal();
}

@Trace(dispatcher=true)
@Trace
public <T> void onFault(QName paramQName1, T[] paramArrayOfT, QName paramQName2, BxInvocationInfo paramBxInvocationInfo) {
if(token != null) {
token.linkAndExpire();
token = null;
}
NewRelic.getAgent().getTransaction().acceptDistributedTraceHeaders(TransportType.Other, paramBxInvocationInfo.headers);
Weaver.callOriginal();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,9 @@ public abstract class BxServiceAgent {

public abstract BxModule getModule();

@Trace(dispatcher=true)
@Trace
public <T> PmProcessInstance onDispatch(String paramString1, String paramString2, QName paramQName, T[] paramArrayOfT, BxReplyEndpointReference paramBxReplyEndpointReference, BxInvocationInfo paramBxInvocationInfo) {
// if(paramBxReplyEndpointReference.token == null) {
// paramBxReplyEndpointReference.token = NewRelic.getAgent().getTransaction().getToken();
// }

NewRelic.getAgent().getTransaction().insertDistributedTraceHeaders(paramBxInvocationInfo.headers);
return Weaver.callOriginal();
}

Expand Down
Loading

0 comments on commit 1853d34

Please sign in to comment.