1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice;
19
20 import io.opentelemetry.api.GlobalOpenTelemetry;
21 import io.opentelemetry.api.trace.Span;
22 import io.opentelemetry.api.trace.SpanBuilder;
23 import io.opentelemetry.api.trace.StatusCode;
24 import io.opentelemetry.api.trace.Tracer;
25 import io.opentelemetry.context.Context;
26 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
27 import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingSQLParserEngineAdvice;
28 import org.apache.shardingsphere.agent.plugin.tracing.core.constant.AttributeConstants;
29 import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
30
31 import java.lang.reflect.Method;
32
33
34
35
36 public final class OpenTelemetrySQLParserEngineAdvice extends TracingSQLParserEngineAdvice<Span> {
37
38 @Override
39 protected Object recordSQLParseInfo(final Span parentSpan, final TargetAdviceObject target, final String sql) {
40 Tracer tracer = GlobalOpenTelemetry.getTracer(OpenTelemetryConstants.TRACER_NAME);
41 SpanBuilder spanBuilder = tracer.spanBuilder(OPERATION_NAME)
42 .setAttribute(AttributeConstants.COMPONENT, AttributeConstants.COMPONENT_NAME)
43 .setAttribute(AttributeConstants.DB_STATEMENT, sql)
44 .setAttribute(AttributeConstants.SPAN_KIND, AttributeConstants.SPAN_KIND_INTERNAL);
45 spanBuilder.setParent(Context.current().with(parentSpan));
46 Span result = spanBuilder.startSpan();
47 target.setAttachment(result);
48 return result;
49 }
50
51 @Override
52 public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final Object result, final String pluginType) {
53 Span span = (Span) target.getAttachment();
54 span.setStatus(StatusCode.OK);
55 span.end();
56 }
57
58 @Override
59 public void onThrowing(final TargetAdviceObject target, final Method method, final Object[] args, final Throwable throwable, final String pluginType) {
60 Span span = (Span) target.getAttachment();
61 span.setStatus(StatusCode.ERROR).recordException(throwable);
62 span.end();
63 }
64 }