Skip to content

Commit 19adf28

Browse files
authored
Merge pull request #1 from newrelic-experimental/initial
Initial
2 parents 80b1652 + 9044e2d commit 19adf28

File tree

40 files changed

+1520
-0
lines changed

40 files changed

+1520
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
.java-version
22
.git
33
.github
4+
build
5+
bin
6+
.classpath
7+
.project
8+
.settings
9+
lib

fabric-runtime/build.gradle

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
// Build.gradle generated for instrumentation module fabric-runtime
3+
4+
apply plugin: 'java'
5+
6+
dependencies {
7+
implementation 'javax.servlet:servlet-api:2.5'
8+
compileOnly group: 'javax', name: 'javaee-api', version: '6.0'
9+
10+
// New Relic Java Agent dependencies
11+
implementation 'com.newrelic.agent.java:newrelic-agent:6.4.0'
12+
implementation 'com.newrelic.agent.java:newrelic-api:6.4.0'
13+
implementation fileTree(include: ['*.jar'], dir: '../libs')
14+
implementation fileTree(include: ['*.jar'], dir: 'lib')
15+
implementation fileTree(include: ['*.jar'], dir: '../test-lib')
16+
}
17+
18+
jar {
19+
manifest {
20+
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.fabric-runtime'
21+
attributes 'Implementation-Vendor': 'New Relic Labs'
22+
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
23+
attributes 'Implementation-Version': 1.0
24+
}
25+
}
26+
27+
verifyInstrumentation {
28+
// Verifier plugin documentation:
29+
// https://github.com/newrelic/newrelic-gradle-verify-instrumentation
30+
// Example:
31+
// passes 'javax.servlet:servlet-api:[2.2,2.5]'
32+
// exclude 'javax.servlet:servlet-api:2.4.public_draft'
33+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.newrelic.instrumentation.labs.fabric.runtime;
2+
3+
public class FabricPathInfo {
4+
5+
private String dn;
6+
private String serviceName;
7+
8+
public FabricPathInfo(String dn, String serviceName) {
9+
super();
10+
this.dn = dn;
11+
this.serviceName = serviceName;
12+
}
13+
14+
public String getDn() {
15+
return dn;
16+
}
17+
18+
public String getServiceName() {
19+
return serviceName;
20+
}
21+
22+
23+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.newrelic.instrumentation.labs.fabric.runtime;
2+
3+
import oracle.integration.platform.blocks.PathInfo;
4+
import oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent;
5+
6+
public class FabricRuntimeUtils {
7+
8+
9+
public static FabricPathInfo getServiceName(String pathInfo, WebServiceEntryBindingComponent wsEntryBC) {
10+
if(pathInfo == null || pathInfo.isEmpty()) return null;
11+
12+
String temp = pathInfo.startsWith("/") ? pathInfo.substring(1) : pathInfo;
13+
String[] path = temp.split("/");
14+
if(path.length == 0) return null;
15+
16+
if(path.length == 1) {
17+
PathInfo info = wsEntryBC.getCustomPath(pathInfo);
18+
if(info != null) {
19+
return new FabricPathInfo(info.getCompositeName(), info.getService());
20+
}
21+
} else {
22+
String dn = path[0] + '/' + path[1];
23+
String serviceName = path.length == 3 ? path[2] : null;
24+
return new FabricPathInfo(dn, serviceName);
25+
}
26+
27+
28+
29+
return null;
30+
}
31+
32+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package oracle.integration.platform.blocks.mesh;
2+
3+
4+
import com.newrelic.api.agent.NewRelic;
5+
import com.newrelic.api.agent.Trace;
6+
import com.newrelic.api.agent.weaver.Weave;
7+
import com.newrelic.api.agent.weaver.Weaver;
8+
9+
import oracle.fabric.common.InvocationContext;
10+
import oracle.fabric.common.NormalizedMessage;
11+
import oracle.fabric.common.Operation;
12+
13+
@Weave
14+
public class MeshImpl {
15+
16+
@Trace
17+
public NormalizedMessage request(NormalizedMessage message, Operation operation, InvocationContext context) {
18+
if(operation != null) {
19+
String opName = operation.getName();
20+
if(opName != null) {
21+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","Mesh","request",opName);
22+
}
23+
}
24+
return Weaver.callOriginal();
25+
}
26+
27+
@Trace
28+
public void post(NormalizedMessage message, Operation operation, InvocationContext context) {
29+
if(operation != null) {
30+
String opName = operation.getName();
31+
if(opName != null) {
32+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","Mesh","post",opName);
33+
}
34+
}
35+
Weaver.callOriginal();
36+
}
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package oracle.integration.platform.blocks.mesh;
2+
3+
import com.newrelic.api.agent.NewRelic;
4+
import com.newrelic.api.agent.Trace;
5+
import com.newrelic.api.agent.weaver.MatchType;
6+
import com.newrelic.api.agent.weaver.Weave;
7+
import com.newrelic.api.agent.weaver.Weaver;
8+
9+
import oracle.fabric.common.InvocationContext;
10+
import oracle.fabric.common.NormalizedMessage;
11+
import oracle.fabric.common.Operation;
12+
13+
@Weave(type = MatchType.Interface)
14+
public abstract class MessageHandler {
15+
16+
@Trace
17+
public NormalizedMessage doCallbackRequest(NormalizedMessage var1, Operation var2, InvocationContext var3) {
18+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageHandler",getClass().getSimpleName(),"doCallbackRequest");
19+
return Weaver.callOriginal();
20+
}
21+
22+
@Trace
23+
public NormalizedMessage doRequest(NormalizedMessage var1, Operation var2, InvocationContext var3) {
24+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageHandler",getClass().getSimpleName(),"doRequest");
25+
return Weaver.callOriginal();
26+
}
27+
28+
@Trace
29+
public void doCallbackPost(NormalizedMessage var1, Operation var2, InvocationContext var3) {
30+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageHandler",getClass().getSimpleName(),"doCallbackPost");
31+
Weaver.callOriginal();
32+
}
33+
34+
@Trace
35+
public void doPost(NormalizedMessage var1, Operation var2, InvocationContext var3) {
36+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageHandler",getClass().getSimpleName(),"doPost");
37+
Weaver.callOriginal();
38+
}
39+
40+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package oracle.integration.platform.blocks.mesh;
2+
3+
import com.newrelic.api.agent.NewRelic;
4+
import com.newrelic.api.agent.Trace;
5+
import com.newrelic.api.agent.weaver.Weave;
6+
import com.newrelic.api.agent.weaver.Weaver;
7+
8+
import oracle.fabric.common.InvocationContext;
9+
import oracle.fabric.common.NormalizedMessage;
10+
import oracle.fabric.common.Operation;
11+
12+
@Weave
13+
public abstract class MessageRouter {
14+
15+
@Trace
16+
public NormalizedMessage request(NormalizedMessage message, Operation operation, InvocationContext context) {
17+
if(operation != null) {
18+
String opName = operation.getName();
19+
if(opName != null) {
20+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageRouter","request",opName);
21+
}
22+
}
23+
return Weaver.callOriginal();
24+
}
25+
26+
public void post(NormalizedMessage message, Operation operation, InvocationContext context) {
27+
if(operation != null) {
28+
String opName = operation.getName();
29+
if(opName != null) {
30+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Fabric","MessageRouter","post",opName);
31+
}
32+
}
33+
Weaver.callOriginal();
34+
}
35+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package oracle.integration.platform.blocks.soap;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
import javax.servlet.http.HttpServletResponse;
5+
6+
import com.newrelic.api.agent.NewRelic;
7+
import com.newrelic.api.agent.Trace;
8+
import com.newrelic.api.agent.TransactionNamePriority;
9+
import com.newrelic.api.agent.weaver.Weave;
10+
import com.newrelic.api.agent.weaver.Weaver;
11+
import com.newrelic.instrumentation.labs.fabric.runtime.FabricPathInfo;
12+
import com.newrelic.instrumentation.labs.fabric.runtime.FabricRuntimeUtils;
13+
14+
@Weave
15+
public abstract class FabricProviderServlet {
16+
17+
protected WebServiceEntryBindingComponent wsEntryBC = Weaver.callOriginal();
18+
19+
@Trace
20+
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
21+
Weaver.callOriginal();
22+
}
23+
24+
@Trace
25+
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
26+
String pInfo = request.getPathInfo();
27+
if(pInfo != null) {
28+
FabricPathInfo fInfo = FabricRuntimeUtils.getServiceName(pInfo, wsEntryBC);
29+
if(fInfo != null) {
30+
String tName = fInfo.getServiceName() != null ? fInfo.getDn() + "/" + fInfo.getServiceName() : fInfo.getDn() + "/Unknown";
31+
NewRelic.getAgent().getTransaction().setTransactionName(TransactionNamePriority.FRAMEWORK_HIGH, false, "Fabric", tName);
32+
}
33+
}
34+
Weaver.callOriginal();
35+
}
36+
}

oracle-as-scheduler/build.gradle

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
// Build.gradle generated for instrumentation module oracle-as-scheduler
3+
4+
apply plugin: 'java'
5+
6+
dependencies {
7+
// Declare a dependency on each JAR you want to instrument
8+
// Example:
9+
// implementation 'javax.servlet:servlet-api:2.5'
10+
11+
// New Relic Java Agent dependencies
12+
implementation 'com.newrelic.agent.java:newrelic-agent:6.4.0'
13+
implementation 'com.newrelic.agent.java:newrelic-api:6.4.0'
14+
implementation fileTree(include: ['*.jar'], dir: '../libs')
15+
implementation fileTree(include: ['*.jar'], dir: 'lib')
16+
implementation fileTree(include: ['*.jar'], dir: '../test-lib')
17+
}
18+
19+
jar {
20+
manifest {
21+
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.oracle-as-scheduler'
22+
attributes 'Implementation-Vendor': 'New Relic Labs'
23+
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
24+
attributes 'Implementation-Version': 1.0
25+
}
26+
}
27+
28+
verifyInstrumentation {
29+
// Verifier plugin documentation:
30+
// https://github.com/newrelic/newrelic-gradle-verify-instrumentation
31+
// Example:
32+
// passes 'javax.servlet:servlet-api:[2.2,2.5]'
33+
// exclude 'javax.servlet:servlet-api:2.4.public_draft'
34+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.newrelic.instrumentation.labs.job.ws;
2+
3+
import java.util.Map;
4+
5+
public class SchedulerWSUtils {
6+
7+
8+
public static void addAttribute(Map<String, Object> attributes, String key, Object value) {
9+
if(attributes != null && key != null && !key.isEmpty() && value != null) {
10+
attributes.put(key, value);
11+
}
12+
}
13+
14+
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package oracle.as.scheduler.job.webservice;
2+
3+
import com.newrelic.api.agent.Trace;
4+
import com.newrelic.api.agent.weaver.Weave;
5+
import com.newrelic.api.agent.weaver.Weaver;
6+
7+
import oracle.as.scheduler.RequestExecutionContext;
8+
import oracle.as.scheduler.RequestParameters;
9+
10+
@Weave
11+
public abstract class AsyncWSJob {
12+
13+
@Trace
14+
public void execute(RequestExecutionContext context, RequestParameters params) {
15+
Weaver.callOriginal();
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package oracle.as.scheduler.job.webservice;
2+
3+
import com.newrelic.api.agent.Trace;
4+
import com.newrelic.api.agent.weaver.Weave;
5+
import com.newrelic.api.agent.weaver.Weaver;
6+
7+
import oracle.as.scheduler.RequestExecutionContext;
8+
import oracle.as.scheduler.RequestParameters;
9+
10+
@Weave
11+
public abstract class OnewayWSJob extends WebServiceJob {
12+
13+
@Trace
14+
public void execute(RequestExecutionContext context, RequestParameters params) {
15+
Weaver.callOriginal();
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package oracle.as.scheduler.job.webservice;
2+
3+
import com.newrelic.api.agent.Trace;
4+
import com.newrelic.api.agent.weaver.Weave;
5+
import com.newrelic.api.agent.weaver.Weaver;
6+
7+
import oracle.as.scheduler.RequestExecutionContext;
8+
import oracle.as.scheduler.RequestParameters;
9+
10+
@Weave
11+
public class SyncWSJob {
12+
13+
@Trace
14+
public void execute(RequestExecutionContext context, RequestParameters params) {
15+
Weaver.callOriginal();
16+
}
17+
}

0 commit comments

Comments
 (0)