Skip to content

Commit 3eabca0

Browse files
committed
refactor: implement OTEL handler with SPI for extensibility
1 parent 3355d77 commit 3eabca0

File tree

7 files changed

+58
-23
lines changed

7 files changed

+58
-23
lines changed

docs/en/changes/changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
* Implement the Status API on Settings page.
4343
* Bump vite from 6.2.6 to 6.3.4.
4444
* Enhance async profiling by adding shorter and custom duration options.
45+
* refactor: implement OTEL handler with SPI for extensibility.
4546

4647
#### Documentation
4748

oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/Handler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818

1919
package org.apache.skywalking.oap.server.receiver.otel;
2020

21+
import org.apache.skywalking.oap.server.library.module.ModuleManager;
2122
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
2223

2324
public interface Handler {
25+
void init(ModuleManager manager, OtelMetricReceiverConfig config);
26+
2427
String type();
2528

2629
void active() throws ModuleStartException;

oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/OtelMetricReceiverProvider.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,12 @@
2222
import org.apache.skywalking.oap.server.library.module.ModuleProvider;
2323
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
2424
import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
25-
import org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryLogHandler;
26-
import org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryMetricHandler;
2725
import org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryMetricRequestProcessor;
28-
import org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryTraceHandler;
2926
import org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
3027

3128
import java.util.ArrayList;
3229
import java.util.List;
30+
import java.util.ServiceLoader;
3331

3432
public class OtelMetricReceiverProvider extends ModuleProvider {
3533
public static final String NAME = "default";
@@ -71,19 +69,13 @@ public void prepare() throws ServiceNotProvidedException, ModuleStartException {
7169
getManager(), config);
7270
registerServiceImplementation(OpenTelemetryMetricRequestProcessor.class, metricRequestProcessor);
7371
final List<String> enabledHandlers = config.getEnabledHandlers();
74-
List<Handler> handlers = new ArrayList<>();
7572

76-
final var openTelemetryMetricHandler = new OpenTelemetryMetricHandler(getManager(), metricRequestProcessor);
77-
if (enabledHandlers.contains(openTelemetryMetricHandler.type())) {
78-
handlers.add(openTelemetryMetricHandler);
79-
}
80-
final var openTelemetryLogHandler = new OpenTelemetryLogHandler(getManager());
81-
if (enabledHandlers.contains(openTelemetryLogHandler.type())) {
82-
handlers.add(openTelemetryLogHandler);
83-
}
84-
final var openTelemetryTraceHandler = new OpenTelemetryTraceHandler(getManager());
85-
if (enabledHandlers.contains(openTelemetryTraceHandler.type())) {
86-
handlers.add(openTelemetryTraceHandler);
73+
final var handlers = new ArrayList<Handler>();
74+
for (final var handler: ServiceLoader.load(Handler.class)) {
75+
if (enabledHandlers.contains(handler.type())) {
76+
handler.init(getManager(), config);
77+
handlers.add(handler);
78+
}
8779
}
8880
this.handlers = handlers;
8981
}

oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.apache.skywalking.oap.server.library.module.ModuleManager;
4040
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
4141
import org.apache.skywalking.oap.server.receiver.otel.Handler;
42+
import org.apache.skywalking.oap.server.receiver.otel.OtelMetricReceiverConfig;
4243
import org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
4344
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
4445
import org.apache.skywalking.oap.server.telemetry.api.HistogramMetrics;
@@ -55,7 +56,7 @@
5556
public class OpenTelemetryLogHandler
5657
extends LogsServiceGrpc.LogsServiceImplBase
5758
implements Handler {
58-
private final ModuleManager manager;
59+
private ModuleManager manager;
5960

6061
private ILogAnalyzerService logAnalyzerService;
6162

@@ -70,6 +71,11 @@ public class OpenTelemetryLogHandler
7071
MetricsTag.EMPTY_VALUE
7172
);
7273

74+
@Override
75+
public void init(ModuleManager manager, OtelMetricReceiverConfig config) {
76+
this.manager = manager;
77+
}
78+
7379
@Override
7480
public String type() {
7581
return "otlp-logs";

oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryMetricHandler.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,30 @@
2222
import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest;
2323
import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse;
2424
import io.opentelemetry.proto.collector.metrics.v1.MetricsServiceGrpc;
25-
import lombok.RequiredArgsConstructor;
2625
import lombok.extern.slf4j.Slf4j;
2726
import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
2827
import org.apache.skywalking.oap.server.library.module.ModuleManager;
2928
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
3029
import org.apache.skywalking.oap.server.receiver.otel.Handler;
30+
import org.apache.skywalking.oap.server.receiver.otel.OtelMetricReceiverConfig;
31+
import org.apache.skywalking.oap.server.receiver.otel.OtelMetricReceiverModule;
3132
import org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
3233

3334
@Slf4j
34-
@RequiredArgsConstructor
3535
public class OpenTelemetryMetricHandler
3636
extends MetricsServiceGrpc.MetricsServiceImplBase
3737
implements Handler {
38-
private final ModuleManager manager;
3938

40-
private final OpenTelemetryMetricRequestProcessor metricRequestProcessor;
39+
private OpenTelemetryMetricRequestProcessor metricRequestProcessor;
40+
private ModuleManager manager;
41+
42+
@Override
43+
public void init(ModuleManager manager, OtelMetricReceiverConfig config) {
44+
this.manager = manager;
45+
metricRequestProcessor = manager.find(OtelMetricReceiverModule.NAME)
46+
.provider()
47+
.getService(OpenTelemetryMetricRequestProcessor.class);
48+
}
4149

4250
@Override
4351
public String type() {

oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryTraceHandler.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@
3131
import io.opentelemetry.proto.trace.v1.ScopeSpans;
3232
import io.opentelemetry.proto.trace.v1.Status;
3333
import lombok.Getter;
34-
import lombok.RequiredArgsConstructor;
3534
import lombok.extern.slf4j.Slf4j;
3635
import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
3736
import org.apache.skywalking.oap.server.library.module.ModuleManager;
3837
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
3938
import org.apache.skywalking.oap.server.library.util.StringUtil;
4039
import org.apache.skywalking.oap.server.receiver.otel.Handler;
40+
import org.apache.skywalking.oap.server.receiver.otel.OtelMetricReceiverConfig;
4141
import org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
4242
import org.apache.skywalking.oap.server.receiver.zipkin.SpanForwardService;
4343
import org.apache.skywalking.oap.server.receiver.zipkin.ZipkinReceiverModule;
@@ -62,11 +62,10 @@
6262
import java.util.stream.Collectors;
6363

6464
@Slf4j
65-
@RequiredArgsConstructor
6665
public class OpenTelemetryTraceHandler
6766
extends TraceServiceGrpc.TraceServiceImplBase
6867
implements Handler {
69-
private final ModuleManager manager;
68+
private ModuleManager manager;
7069
private SpanForwardService forwardService;
7170

7271
@Getter(lazy = true)
@@ -80,6 +79,11 @@ public class OpenTelemetryTraceHandler
8079
MetricsTag.EMPTY_VALUE
8180
);
8281

82+
@Override
83+
public void init(ModuleManager manager, OtelMetricReceiverConfig config) {
84+
this.manager = manager;
85+
}
86+
8387
@Override
8488
public String type() {
8589
return "otlp-traces";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#
2+
# Licensed to the Apache Software Foundation (ASF) under one or more
3+
# contributor license agreements. See the NOTICE file distributed with
4+
# this work for additional information regarding copyright ownership.
5+
# The ASF licenses this file to You under the Apache License, Version 2.0
6+
# (the "License"); you may not use this file except in compliance with
7+
# the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
#
17+
#
18+
19+
org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryMetricHandler
20+
org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryLogHandler
21+
org.apache.skywalking.oap.server.receiver.otel.otlp.OpenTelemetryTraceHandler

0 commit comments

Comments
 (0)