Skip to content

Commit 0c658b1

Browse files
committed
Add gRPC export for profiles signal type.
Changes per code review feedback
1 parent 3deda40 commit 0c658b1

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterUtil.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ public final class GrpcExporterUtil {
2828
public static final int GRPC_STATUS_DATA_LOSS = 15;
2929

3030
static void logUnimplemented(Logger logger, String type, @Nullable String fullErrorMessage) {
31+
32+
// hopefully temporary special handling for profile signal as it evolves towards stability.
33+
if ("profile".equals(type)) {
34+
logger.log(
35+
Level.SEVERE,
36+
"Failed to export profile. The profile signal type is still under development "
37+
+ "and the endpoint you are connecting to may not support it yet, "
38+
+ "or may support a different version. "
39+
+ "Full error message: "
40+
+ fullErrorMessage);
41+
return;
42+
}
43+
3144
String envVar;
3245
switch (type) {
3346
case "span":
@@ -39,9 +52,6 @@ static void logUnimplemented(Logger logger, String type, @Nullable String fullEr
3952
case "log":
4053
envVar = "OTEL_LOGS_EXPORTER";
4154
break;
42-
case "profile":
43-
envVar = "OTEL_PROFILES_EXPORTER";
44-
break;
4555
default:
4656
throw new IllegalStateException(
4757
"Unrecognized type, this is a programming bug in the OpenTelemetry SDK");

exporters/otlp/profiles/src/test/java/io/opentelemetry/exporter/otlp/profiles/OtlpGrpcProfileExporterTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,21 @@
77

88
import static org.assertj.core.api.Assertions.assertThat;
99

10+
import io.opentelemetry.exporter.internal.grpc.GrpcExporter;
1011
import io.opentelemetry.exporter.internal.marshal.Marshaler;
1112
import io.opentelemetry.exporter.otlp.testing.internal.AbstractGrpcTelemetryExporterTest;
1213
import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporter;
1314
import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporterBuilder;
1415
import io.opentelemetry.exporter.sender.okhttp.internal.OkHttpGrpcSender;
16+
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
1517
import io.opentelemetry.proto.profiles.v1development.ResourceProfiles;
1618
import java.io.Closeable;
19+
import java.util.Collections;
1720
import java.util.List;
21+
import java.util.concurrent.TimeUnit;
1822
import org.junit.jupiter.api.Test;
23+
import org.slf4j.event.Level;
24+
import org.slf4j.event.LoggingEvent;
1925

2026
class OtlpGrpcProfileExporterTest
2127
extends AbstractGrpcTelemetryExporterTest<ProfileData, ResourceProfiles> {
@@ -31,6 +37,29 @@ void usingOkHttp() throws Exception {
3137
}
3238
}
3339

40+
@Test
41+
@Override // whilst profile signal type is in development it uses a different error message
42+
@SuppressLogger(GrpcExporter.class)
43+
protected void testExport_Unimplemented() {
44+
addGrpcError(12, "UNIMPLEMENTED");
45+
46+
TelemetryExporter<ProfileData> exporter = nonRetryingExporter();
47+
48+
try {
49+
assertThat(
50+
exporter
51+
.export(Collections.singletonList(generateFakeTelemetry()))
52+
.join(10, TimeUnit.SECONDS)
53+
.isSuccess())
54+
.isFalse();
55+
56+
LoggingEvent log = logs.assertContains("The profile signal type is still under development");
57+
assertThat(log.getLevel()).isEqualTo(Level.ERROR);
58+
} finally {
59+
exporter.shutdown();
60+
}
61+
}
62+
3463
@Override
3564
protected TelemetryExporterBuilder<ProfileData> exporterBuilder() {
3665
return TelemetryExporterBuilder.wrap(OtlpGrpcProfileExporter.builder());

exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractGrpcTelemetryExporterTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ protected CompletionStage<byte[]> handleMessage(ServiceRequestContext ctx, byte[
188188
}
189189
}
190190

191-
@RegisterExtension LogCapturer logs = LogCapturer.create().captureForType(GrpcExporter.class);
191+
@RegisterExtension
192+
protected LogCapturer logs = LogCapturer.create().captureForType(GrpcExporter.class);
192193

193194
private final String type;
194195
private final U resourceTelemetryInstance;
@@ -710,7 +711,7 @@ void testExport_Unavailable() {
710711

711712
@Test
712713
@SuppressLogger(GrpcExporter.class)
713-
void testExport_Unimplemented() {
714+
protected void testExport_Unimplemented() {
714715
addGrpcError(12, "UNIMPLEMENTED");
715716

716717
TelemetryExporter<T> exporter = nonRetryingExporter();
@@ -1160,11 +1161,11 @@ private List<U> toProto(List<T> telemetry) {
11601161
.collect(Collectors.toList());
11611162
}
11621163

1163-
private TelemetryExporter<T> nonRetryingExporter() {
1164+
protected TelemetryExporter<T> nonRetryingExporter() {
11641165
return exporterBuilder().setEndpoint(server.httpUri().toString()).setRetryPolicy(null).build();
11651166
}
11661167

1167-
private static void addGrpcError(int code, @Nullable String message) {
1168+
protected static void addGrpcError(int code, @Nullable String message) {
11681169
grpcErrors.add(new ArmeriaStatusException(code, message));
11691170
}
11701171
}

0 commit comments

Comments
 (0)