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.TargetAdviceMethod;
27 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
28 import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingSQLParserEngineAdvice;
29 import org.apache.shardingsphere.agent.plugin.tracing.core.constant.AttributeConstants;
30 import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
31
32
33
34
35 public final class OpenTelemetrySQLParserEngineAdvice extends TracingSQLParserEngineAdvice<Span> {
36
37 @Override
38 protected Object recordSQLParseInfo(final Span parentSpan, final TargetAdviceObject target, final String sql) {
39 Tracer tracer = GlobalOpenTelemetry.getTracer(OpenTelemetryConstants.TRACER_NAME);
40 SpanBuilder spanBuilder = tracer.spanBuilder(OPERATION_NAME)
41 .setAttribute(AttributeConstants.COMPONENT, AttributeConstants.COMPONENT_NAME)
42 .setAttribute(AttributeConstants.DB_STATEMENT, sql)
43 .setAttribute(AttributeConstants.SPAN_KIND, AttributeConstants.SPAN_KIND_INTERNAL);
44 spanBuilder.setParent(Context.current().with(parentSpan));
45 Span result = spanBuilder.startSpan();
46 target.setAttachment(result);
47 return result;
48 }
49
50 @Override
51 public void afterMethod(final TargetAdviceObject target, final TargetAdviceMethod method, final Object[] args, final Object result, final String pluginType) {
52 Span span = (Span) target.getAttachment();
53 span.setStatus(StatusCode.OK);
54 span.end();
55 }
56
57 @Override
58 public void onThrowing(final TargetAdviceObject target, final TargetAdviceMethod method, final Object[] args, final Throwable throwable, final String pluginType) {
59 Span span = (Span) target.getAttachment();
60 span.setStatus(StatusCode.ERROR).recordException(throwable);
61 span.end();
62 }
63 }