Skip to content

Commit 14a5360

Browse files
authored
make xxl-job indy-ready (#14571)
1 parent b3df635 commit 14a5360

File tree

15 files changed

+158
-254
lines changed

15 files changed

+158
-254
lines changed

instrumentation/xxl-job/xxl-job-1.9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v1_9_2/GlueJobHandlerInstrumentation.java

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,17 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v1_9_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.xxljob.v1_9_2.XxlJobSingletons.helper;
109
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1110
import static net.bytebuddy.matcher.ElementMatchers.named;
1211
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1312

1413
import com.xxl.job.core.handler.IJobHandler;
15-
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.context.Scope;
1714
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1815
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
16+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
1917
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
18+
import javax.annotation.Nullable;
2019
import net.bytebuddy.asm.Advice;
2120
import net.bytebuddy.description.type.TypeDescription;
2221
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -39,29 +38,20 @@ public void transform(TypeTransformer transformer) {
3938
@SuppressWarnings("unused")
4039
public static class ScheduleAdvice {
4140

41+
@Nullable
4242
@Advice.OnMethodEnter(suppress = Throwable.class)
43-
public static void onSchedule(
44-
@Advice.FieldValue("jobHandler") IJobHandler handler,
45-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
46-
@Advice.Local("otelContext") Context context,
47-
@Advice.Local("otelScope") Scope scope) {
48-
Context parentContext = currentContext();
49-
request = XxlJobProcessRequest.createGlueJobRequest(handler);
50-
context = helper().startSpan(parentContext, request);
51-
if (context == null) {
52-
return;
53-
}
54-
scope = context.makeCurrent();
43+
public static XxlJobHelper.XxlJobScope onSchedule(
44+
@Advice.FieldValue("jobHandler") IJobHandler handler) {
45+
return helper().startSpan(XxlJobProcessRequest.createGlueJobRequest(handler));
5546
}
5647

5748
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5849
public static void stopSpan(
59-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
60-
@Advice.Thrown Throwable throwable,
61-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
62-
@Advice.Local("otelContext") Context context,
63-
@Advice.Local("otelScope") Scope scope) {
64-
helper().stopSpan(result, request, throwable, scope, context);
50+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
51+
@Advice.Thrown @Nullable Throwable throwable,
52+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
53+
54+
helper().endSpan(scope, result, throwable);
6555
}
6656
}
6757
}

instrumentation/xxl-job/xxl-job-1.9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v1_9_2/ScriptJobHandlerInstrumentation.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v1_9_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.xxljob.v1_9_2.XxlJobSingletons.helper;
109
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1110
import static net.bytebuddy.matcher.ElementMatchers.named;
1211
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1312
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1413

1514
import com.xxl.job.core.glue.GlueTypeEnum;
16-
import io.opentelemetry.context.Context;
17-
import io.opentelemetry.context.Scope;
1815
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1916
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
17+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
2018
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
19+
import javax.annotation.Nullable;
2120
import net.bytebuddy.asm.Advice;
2221
import net.bytebuddy.description.type.TypeDescription;
2322
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -40,30 +39,20 @@ public void transform(TypeTransformer transformer) {
4039
@SuppressWarnings("unused")
4140
public static class ScheduleAdvice {
4241

42+
@Nullable
4343
@Advice.OnMethodEnter(suppress = Throwable.class)
44-
public static void onSchedule(
44+
public static XxlJobHelper.XxlJobScope onSchedule(
4545
@Advice.FieldValue("glueType") GlueTypeEnum glueType,
46-
@Advice.FieldValue("jobId") int jobId,
47-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
48-
@Advice.Local("otelContext") Context context,
49-
@Advice.Local("otelScope") Scope scope) {
50-
Context parentContext = currentContext();
51-
request = XxlJobProcessRequest.createScriptJobRequest(glueType, jobId);
52-
context = helper().startSpan(parentContext, request);
53-
if (context == null) {
54-
return;
55-
}
56-
scope = context.makeCurrent();
46+
@Advice.FieldValue("jobId") int jobId) {
47+
return helper().startSpan(XxlJobProcessRequest.createScriptJobRequest(glueType, jobId));
5748
}
5849

5950
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6051
public static void stopSpan(
61-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
62-
@Advice.Thrown Throwable throwable,
63-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
64-
@Advice.Local("otelContext") Context context,
65-
@Advice.Local("otelScope") Scope scope) {
66-
helper().stopSpan(result, request, throwable, scope, context);
52+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
53+
@Advice.Thrown @Nullable Throwable throwable,
54+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
55+
helper().endSpan(scope, result, throwable);
6756
}
6857
}
6958
}

instrumentation/xxl-job/xxl-job-1.9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v1_9_2/SimpleJobHandlerInstrumentation.java

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v1_9_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperType;
109
import static io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobConstants.XXL_GLUE_JOB_HANDLER;
1110
import static io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobConstants.XXL_METHOD_JOB_HANDLER;
@@ -19,11 +18,11 @@
1918
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
2019

2120
import com.xxl.job.core.handler.IJobHandler;
22-
import io.opentelemetry.context.Context;
23-
import io.opentelemetry.context.Scope;
2421
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2522
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
23+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
2624
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
25+
import javax.annotation.Nullable;
2726
import net.bytebuddy.asm.Advice;
2827
import net.bytebuddy.description.type.TypeDescription;
2928
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -44,33 +43,21 @@ public void transform(TypeTransformer transformer) {
4443
SimpleJobHandlerInstrumentation.class.getName() + "$ScheduleAdvice");
4544
}
4645

46+
@SuppressWarnings("unused")
4747
public static class ScheduleAdvice {
4848

49-
@SuppressWarnings("unused")
49+
@Nullable
5050
@Advice.OnMethodEnter(suppress = Throwable.class)
51-
public static void onSchedule(
52-
@Advice.This IJobHandler handler,
53-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
54-
@Advice.Local("otelContext") Context context,
55-
@Advice.Local("otelScope") Scope scope) {
56-
Context parentContext = currentContext();
57-
request = XxlJobProcessRequest.createSimpleJobRequest(handler);
58-
context = helper().startSpan(parentContext, request);
59-
if (context == null) {
60-
return;
61-
}
62-
scope = context.makeCurrent();
51+
public static XxlJobHelper.XxlJobScope onSchedule(@Advice.This IJobHandler handler) {
52+
return helper().startSpan(XxlJobProcessRequest.createSimpleJobRequest(handler));
6353
}
6454

65-
@SuppressWarnings("unused")
6655
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6756
public static void stopSpan(
68-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
69-
@Advice.Thrown Throwable throwable,
70-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
71-
@Advice.Local("otelContext") Context context,
72-
@Advice.Local("otelScope") Scope scope) {
73-
helper().stopSpan(result, request, throwable, scope, context);
57+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
58+
@Advice.Thrown @Nullable Throwable throwable,
59+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
60+
helper().endSpan(scope, result, throwable);
7461
}
7562
}
7663
}

instrumentation/xxl-job/xxl-job-1.9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v1_9_2/XxlJobInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@
1212
import com.google.auto.service.AutoService;
1313
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1516
import java.util.List;
1617
import net.bytebuddy.matcher.ElementMatcher;
1718

1819
@AutoService(InstrumentationModule.class)
19-
public class XxlJobInstrumentationModule extends InstrumentationModule {
20+
public class XxlJobInstrumentationModule extends InstrumentationModule
21+
implements ExperimentalInstrumentationModule {
2022

2123
public XxlJobInstrumentationModule() {
2224
super("xxl-job", "xxl-job-1.9.2");
@@ -35,4 +37,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3537
new SimpleJobHandlerInstrumentation(),
3638
new GlueJobHandlerInstrumentation());
3739
}
40+
41+
@Override
42+
public boolean isIndyReady() {
43+
return true;
44+
}
3845
}

instrumentation/xxl-job/xxl-job-2.1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v2_1_2/GlueJobHandlerInstrumentation.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2.XxlJobSingletons.helper;
109
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1110
import static net.bytebuddy.matcher.ElementMatchers.named;
1211

1312
import com.xxl.job.core.handler.IJobHandler;
14-
import io.opentelemetry.context.Context;
15-
import io.opentelemetry.context.Scope;
1613
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1714
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
15+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
1816
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
17+
import javax.annotation.Nullable;
1918
import net.bytebuddy.asm.Advice;
2019
import net.bytebuddy.description.type.TypeDescription;
2120
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -37,29 +36,19 @@ public void transform(TypeTransformer transformer) {
3736

3837
@SuppressWarnings("unused")
3938
public static class ScheduleAdvice {
39+
@Nullable
4040
@Advice.OnMethodEnter(suppress = Throwable.class)
41-
public static void onSchedule(
42-
@Advice.FieldValue("jobHandler") IJobHandler handler,
43-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
44-
@Advice.Local("otelContext") Context context,
45-
@Advice.Local("otelScope") Scope scope) {
46-
Context parentContext = currentContext();
47-
request = XxlJobProcessRequest.createGlueJobRequest(handler);
48-
context = helper().startSpan(parentContext, request);
49-
if (context == null) {
50-
return;
51-
}
52-
scope = context.makeCurrent();
41+
public static XxlJobHelper.XxlJobScope onSchedule(
42+
@Advice.FieldValue("jobHandler") IJobHandler handler) {
43+
return helper().startSpan(XxlJobProcessRequest.createGlueJobRequest(handler));
5344
}
5445

5546
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5647
public static void stopSpan(
57-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
58-
@Advice.Thrown Throwable throwable,
59-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
60-
@Advice.Local("otelContext") Context context,
61-
@Advice.Local("otelScope") Scope scope) {
62-
helper().stopSpan(result, request, throwable, scope, context);
48+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
49+
@Advice.Thrown @Nullable Throwable throwable,
50+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
51+
helper().endSpan(scope, result, throwable);
6352
}
6453
}
6554
}

instrumentation/xxl-job/xxl-job-2.1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v2_1_2/MethodJobHandlerInstrumentation.java

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2.XxlJobSingletons.helper;
109
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1110
import static net.bytebuddy.matcher.ElementMatchers.named;
1211

13-
import io.opentelemetry.context.Context;
14-
import io.opentelemetry.context.Scope;
1512
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1613
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
14+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
1715
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
1816
import java.lang.reflect.Method;
17+
import javax.annotation.Nullable;
1918
import net.bytebuddy.asm.Advice;
2019
import net.bytebuddy.description.type.TypeDescription;
2120
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -38,29 +37,17 @@ public void transform(TypeTransformer transformer) {
3837
@SuppressWarnings("unused")
3938
public static class ScheduleAdvice {
4039
@Advice.OnMethodEnter(suppress = Throwable.class)
41-
public static void onSchedule(
42-
@Advice.FieldValue("target") Object target,
43-
@Advice.FieldValue("method") Method method,
44-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
45-
@Advice.Local("otelContext") Context context,
46-
@Advice.Local("otelScope") Scope scope) {
47-
Context parentContext = currentContext();
48-
request = XxlJobProcessRequest.createMethodJobRequest(target, method);
49-
context = helper().startSpan(parentContext, request);
50-
if (context == null) {
51-
return;
52-
}
53-
scope = context.makeCurrent();
40+
public static XxlJobHelper.XxlJobScope onSchedule(
41+
@Advice.FieldValue("target") Object target, @Advice.FieldValue("method") Method method) {
42+
return helper().startSpan(XxlJobProcessRequest.createMethodJobRequest(target, method));
5443
}
5544

5645
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5746
public static void stopSpan(
58-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
59-
@Advice.Thrown Throwable throwable,
60-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
61-
@Advice.Local("otelContext") Context context,
62-
@Advice.Local("otelScope") Scope scope) {
63-
helper().stopSpan(result, request, throwable, scope, context);
47+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
48+
@Advice.Thrown @Nullable Throwable throwable,
49+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
50+
helper().endSpan(scope, result, throwable);
6451
}
6552
}
6653
}

instrumentation/xxl-job/xxl-job-2.1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/v2_1_2/ScriptJobHandlerInstrumentation.java

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55

66
package io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.xxljob.v2_1_2.XxlJobSingletons.helper;
109
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1110
import static net.bytebuddy.matcher.ElementMatchers.named;
1211

1312
import com.xxl.job.core.glue.GlueTypeEnum;
14-
import io.opentelemetry.context.Context;
15-
import io.opentelemetry.context.Scope;
1613
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1714
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
15+
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobHelper;
1816
import io.opentelemetry.javaagent.instrumentation.xxljob.common.XxlJobProcessRequest;
17+
import javax.annotation.Nullable;
1918
import net.bytebuddy.asm.Advice;
2019
import net.bytebuddy.description.type.TypeDescription;
2120
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -37,30 +36,21 @@ public void transform(TypeTransformer transformer) {
3736

3837
@SuppressWarnings("unused")
3938
public static class ScheduleAdvice {
39+
40+
@Nullable
4041
@Advice.OnMethodEnter(suppress = Throwable.class)
41-
public static void onSchedule(
42+
public static XxlJobHelper.XxlJobScope onSchedule(
4243
@Advice.FieldValue("glueType") GlueTypeEnum glueType,
43-
@Advice.FieldValue("jobId") int jobId,
44-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
45-
@Advice.Local("otelContext") Context context,
46-
@Advice.Local("otelScope") Scope scope) {
47-
Context parentContext = currentContext();
48-
request = XxlJobProcessRequest.createScriptJobRequest(glueType, jobId);
49-
context = helper().startSpan(parentContext, request);
50-
if (context == null) {
51-
return;
52-
}
53-
scope = context.makeCurrent();
44+
@Advice.FieldValue("jobId") int jobId) {
45+
return helper().startSpan(XxlJobProcessRequest.createScriptJobRequest(glueType, jobId));
5446
}
5547

5648
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5749
public static void stopSpan(
58-
@Advice.Return(typing = Assigner.Typing.DYNAMIC) Object result,
59-
@Advice.Thrown Throwable throwable,
60-
@Advice.Local("otelRequest") XxlJobProcessRequest request,
61-
@Advice.Local("otelContext") Context context,
62-
@Advice.Local("otelScope") Scope scope) {
63-
helper().stopSpan(result, request, throwable, scope, context);
50+
@Advice.Return(typing = Assigner.Typing.DYNAMIC) @Nullable Object result,
51+
@Advice.Thrown @Nullable Throwable throwable,
52+
@Advice.Enter @Nullable XxlJobHelper.XxlJobScope scope) {
53+
helper().endSpan(scope, result, throwable);
6454
}
6555
}
6656
}

0 commit comments

Comments
 (0)