Skip to content

Commit 14fabf7

Browse files
authored
Merge pull request #32 from newrelic-experimental/verify_fixes_1.21.25
fixed Mule-Http verify
2 parents 616d57a + 0730580 commit 14fabf7

9 files changed

Lines changed: 271 additions & 13 deletions

File tree

Mule-APIKit-Module/build.gradle

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@ jar {
2424
}
2525

2626
verifyInstrumentation {
27-
passes('org.mule.modules:mule-apikit-module:[1.1.6,1.1.10)') {
28-
implementation('org.mule.runtime:mule-core:4.3.0')
29-
implementation('org.mule.modules:mule-apikit-module:1.1.6:mule-plugin')
30-
}
27+
passes('org.mule.modules:mule-apikit-module:[1.1.6,1.1.10)')
3128
excludeRegex '.*BETA.*'
3229
excludeRegex '.*RC.*'
3330
}

Mule-Http-1.2/build.gradle

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
apply plugin: 'java'
55

66
dependencies {
7-
implementation 'org.mule.services:mule-service-http:1.2.0'
7+
implementation 'org.mule.services:mule-service-http:1.3.0'
88
implementation 'org.mule.runtime:mule-service-http-api:4.2.0'
99

1010

1111
// New Relic Labs Java Agent dependencies
12-
implementation 'com.newrelic.agent.java:newrelic-agent:6.0.0'
13-
implementation 'com.newrelic.agent.java:newrelic-api:6.0.0'
12+
implementation 'com.newrelic.agent.java:newrelic-agent:8.8.0'
13+
implementation 'com.newrelic.agent.java:newrelic-api:8.4.0'
1414
implementation fileTree(include: ['*.jar'], dir: '../libs')
1515
}
1616

@@ -30,12 +30,22 @@ verifyInstrumentation {
3030
passes("org.mule.services:mule-service-http:(1.4.0,1.5.18)") {
3131
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
3232
}
33-
passes("org.mule.services:mule-service-http:[1.6.0,)") {
33+
passes("org.mule.services:mule-service-http:[1.6.0,1.8.24)") {
3434
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
3535
}
36+
passes("org.mule.services:mule-service-http:[1.9.0,1.11.24)") {
37+
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
38+
}
39+
passes("org.mule.services:mule-service-http:[1.12.0,1.12.1)") {
40+
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
41+
}
3642
exclude 'org.mule.services:mule-service-http:1.5.18'
3743
exclude 'org.mule.services:mule-service-http:1.6.19'
44+
exclude 'org.mule.services:mule-service-http:1.11.10'
45+
exclude 'org.mule.services:mule-service-http:1.11.11'
46+
exclude 'org.mule.services:mule-service-http:1.11.12'
3847
excludeRegex '.*MULE.*'
3948
excludeRegex '.*SNAPSHOT.*'
4049
excludeRegex '.*-M.*'
50+
excludeRegex '.*rc.*'
4151
}

Mule-Http-1.8.24/build.gradle

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
// Build.gradle generated for instrumentation module Mule-Http-1.4
3+
4+
apply plugin: 'java'
5+
6+
dependencies {
7+
implementation 'org.mule.services:mule-service-http:1.8.24'
8+
9+
10+
// New Relic Labs Java Agent dependencies
11+
implementation 'com.newrelic.agent.java:newrelic-agent:8.8.0'
12+
implementation 'com.newrelic.agent.java:newrelic-api:8.4.0'
13+
implementation fileTree(include: ['*.jar'], dir: '../libs')
14+
}
15+
16+
jar {
17+
manifest {
18+
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.Mule-Http-1.2'
19+
attributes 'Implementation-Vendor': 'New Relic Labs'
20+
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
21+
attributes 'Implementation-Version': 1.0
22+
}
23+
}
24+
25+
verifyInstrumentation {
26+
passes("org.mule.services:mule-service-http:[1.8.24,1.9.0)") {
27+
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
28+
}
29+
passes("org.mule.services:mule-service-http:[1.11.11,)") {
30+
implementation 'org.mule.runtime:mule-service-http-api:4.3.0'
31+
}
32+
exclude 'org.mule.services:mule-service-http:1.12.0'
33+
excludeRegex '.*MULE.*'
34+
excludeRegex '.*SNAPSHOT.*'
35+
excludeRegex '.*-M.*'
36+
excludeRegex '.*rc.*'
37+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.nr.instrumentation.mule.http;
2+
3+
4+
import java.util.ArrayList;
5+
import java.util.Collections;
6+
import java.util.Enumeration;
7+
import java.util.List;
8+
import java.util.StringTokenizer;
9+
10+
import org.glassfish.grizzly.http.HttpRequestPacket;
11+
import org.glassfish.grizzly.http.util.DataChunk;
12+
13+
import com.newrelic.api.agent.ExtendedRequest;
14+
import com.newrelic.api.agent.HeaderType;
15+
16+
public class InboundRequest extends ExtendedRequest {
17+
18+
private HttpRequestPacket request = null;
19+
20+
public InboundRequest(HttpRequestPacket packet) {
21+
request = packet;
22+
}
23+
24+
@Override
25+
public String getRequestURI() {
26+
return request.getRequestURI();
27+
}
28+
29+
@Override
30+
public String getRemoteUser() {
31+
DataChunk remoteUserChuck = request.remoteUser();
32+
if(remoteUserChuck != null) {
33+
return remoteUserChuck.toString();
34+
}
35+
return null;
36+
}
37+
38+
@SuppressWarnings("rawtypes")
39+
@Override
40+
public Enumeration getParameterNames() {
41+
String queryString = request.getQueryString();
42+
if(queryString != null && !queryString.isEmpty()) {
43+
StringTokenizer st = new StringTokenizer(queryString, "&");
44+
List<String> list = new ArrayList<String>();
45+
46+
while(st.hasMoreTokens()) {
47+
String token = st.nextToken();
48+
int index = token.indexOf('=');
49+
if(index > 0) {
50+
String tmp = token.substring(0, index-1);
51+
list.add(tmp);
52+
}
53+
}
54+
return Collections.enumeration(list);
55+
}
56+
return null;
57+
}
58+
59+
@Override
60+
public String[] getParameterValues(String name) {
61+
String queryString = request.getQueryString();
62+
if(queryString != null && !queryString.isEmpty()) {
63+
StringTokenizer st = new StringTokenizer(queryString, "&");
64+
List<String> list = new ArrayList<String>();
65+
66+
while(st.hasMoreTokens()) {
67+
String token = st.nextToken();
68+
int index = token.indexOf('=');
69+
if(index > 0) {
70+
String tmp = token.substring(index+1);
71+
list.add(tmp);
72+
}
73+
}
74+
String[] values = new String[list.size()];
75+
list.toArray(values);
76+
return values;
77+
}
78+
return null;
79+
}
80+
81+
@Override
82+
public Object getAttribute(String name) {
83+
return request.getAttribute(name);
84+
}
85+
86+
@Override
87+
public String getCookieValue(String name) {
88+
return null;
89+
}
90+
91+
@Override
92+
public HeaderType getHeaderType() {
93+
return HeaderType.HTTP;
94+
}
95+
96+
@Override
97+
public String getHeader(String name) {
98+
return request.getHeader(name);
99+
}
100+
101+
@Override
102+
public String getMethod() {
103+
return request.getMethod().getMethodString();
104+
}
105+
106+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.nr.instrumentation.mule.http;
2+
3+
import org.glassfish.grizzly.http.HttpResponsePacket;
4+
5+
import com.newrelic.api.agent.ExtendedResponse;
6+
import com.newrelic.api.agent.HeaderType;
7+
8+
public class ResponseWrapper extends ExtendedResponse {
9+
10+
private HttpResponsePacket response = null;
11+
12+
public ResponseWrapper(HttpResponsePacket resp) {
13+
response = resp;
14+
}
15+
16+
@Override
17+
public String getContentType() {
18+
return response.getContentType();
19+
}
20+
21+
@Override
22+
public int getStatus() throws Exception {
23+
return response.getStatus();
24+
}
25+
26+
@Override
27+
public String getStatusMessage() throws Exception {
28+
return response.getReasonPhrase();
29+
}
30+
31+
@Override
32+
public HeaderType getHeaderType() {
33+
return HeaderType.HTTP;
34+
}
35+
36+
@Override
37+
public void setHeader(String name, String value) {
38+
response.setHeader(name, value);
39+
}
40+
41+
@Override
42+
public long getContentLength() {
43+
return response.getContentLength();
44+
}
45+
46+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.mule.service.http.impl.service.server.grizzly;
2+
3+
import java.net.InetSocketAddress;
4+
import java.util.concurrent.ExecutorService;
5+
6+
import org.glassfish.grizzly.filterchain.FilterChainContext;
7+
import org.glassfish.grizzly.filterchain.NextAction;
8+
import org.glassfish.grizzly.http.HttpContent;
9+
import org.glassfish.grizzly.http.HttpRequestPacket;
10+
import org.glassfish.grizzly.http.HttpResponsePacket;
11+
import org.mule.service.http.impl.service.server.DefaultServerAddress;
12+
import org.mule.service.http.impl.service.server.RequestHandlerProvider;
13+
14+
import com.newrelic.api.agent.NewRelic;
15+
import com.newrelic.api.agent.Trace;
16+
import com.newrelic.api.agent.Transaction;
17+
import com.newrelic.api.agent.TransactionNamePriority;
18+
import com.newrelic.api.agent.weaver.Weave;
19+
import com.newrelic.api.agent.weaver.Weaver;
20+
import com.nr.instrumentation.mule.http.InboundRequest;
21+
import com.nr.instrumentation.mule.http.ResponseWrapper;
22+
23+
@Weave
24+
public abstract class GrizzlyRequestDispatcherFilter {
25+
26+
private final RequestHandlerProvider requestHandlerProvider = Weaver.callOriginal();
27+
28+
GrizzlyRequestDispatcherFilter(final RequestHandlerProvider requestHandlerProvider, ExecutorService workerPool) {
29+
}
30+
31+
@Trace(dispatcher=true)
32+
public NextAction handleRead(final FilterChainContext ctx) {
33+
34+
Transaction txn = NewRelic.getAgent().getTransaction();
35+
if(!txn.isWebTransaction()) {
36+
txn.convertToWebTransaction();
37+
}
38+
if(ctx.getMessage() instanceof HttpContent) {
39+
HttpContent httpContent = (HttpContent) ctx.getMessage();
40+
HttpRequestPacket request = (HttpRequestPacket) httpContent.getHttpHeader();
41+
if(request != null) {
42+
String requestURI = request.getRequestURI();
43+
if(requestURI != null) {
44+
if(requestURI.isEmpty()) {
45+
requestURI = "Root";
46+
}
47+
NewRelic.getAgent().getTransaction().setTransactionName(TransactionNamePriority.REQUEST_URI, true, "Grizzly", "GrizzlyDispatcher");
48+
}
49+
InboundRequest wrapper = new InboundRequest(request);
50+
txn.setWebRequest(wrapper);
51+
HttpResponsePacket response = request.getResponse();
52+
NewRelic.getAgent().getTransaction().setWebResponse(new ResponseWrapper(response));
53+
}
54+
55+
}
56+
NewRelic.getAgent().getTracedMethod().setMetricName(new String[] {"Custom","GrizzlyRequestDispatcherFilter","handleRead",ctx.getMessage().getClass().getSimpleName()});
57+
return Weaver.callOriginal();
58+
}
59+
60+
61+
}

Mule-Http/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ apply plugin: 'java'
55

66
dependencies {
77
implementation 'org.mule.runtime:mule-service-http-api:4.1.0'
8-
implementation 'org.mule.services:mule-service-http:1.1.0'
8+
implementation 'org.mule.services:mule-service-http:1.1.1'
99

1010
// New Relic Labs Java Agent dependencies
11-
implementation 'com.newrelic.agent.java:newrelic-agent:6.0.0'
12-
implementation 'com.newrelic.agent.java:newrelic-api:6.0.0'
11+
implementation 'com.newrelic.agent.java:newrelic-agent:8.4.0'
12+
implementation 'com.newrelic.agent.java:newrelic-api:8.4.0'
1313
implementation fileTree(include: ['*.jar'], dir: '../libs')
1414
}
1515

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

settings.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
rootProject.name = 'java-instrumentation-template'
1+
rootProject.name = 'mule-instrumentation'
22
//include 'Mule-Agent'
33
include 'Mule-API'
44
include 'Mule-APIKit-Module'
@@ -23,6 +23,7 @@ include 'Mule-Extensions'
2323
include 'Mule-Http'
2424
include 'Mule-Http-Api'
2525
include 'Mule-Http-1.2'
26+
include 'Mule-Http-1.8.24'
2627
include 'Mule-Http-Api-4.2'
2728
include 'Mule-Java'
2829
include 'Mule-Java-1.1'

0 commit comments

Comments
 (0)