From 5e1f52659f1731095405f873f42701f850085633 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 19 Mar 2021 07:03:40 +0100 Subject: [PATCH] Add metrics collection to smoke-tests' fake-backend (#2597) * Add metrics collection to smoke-tests' fake-backend * Fix a bug --- .../fakebackend/FakeBackendMain.java | 37 ++++++++++++++++--- .../FakeMetricsCollectorService.java | 33 +++++++++++++++++ ...ce.java => FakeTraceCollectorService.java} | 2 +- 3 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeMetricsCollectorService.java rename smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/{FakeCollectorService.java => FakeTraceCollectorService.java} (95%) diff --git a/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeBackendMain.java b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeBackendMain.java index b1bc2ebbf9..790dd047af 100644 --- a/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeBackendMain.java +++ b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeBackendMain.java @@ -30,6 +30,7 @@ import com.linecorp.armeria.server.Server; import com.linecorp.armeria.server.grpc.GrpcService; import com.linecorp.armeria.server.healthcheck.HealthCheckService; import io.netty.buffer.ByteBufOutputStream; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; import java.io.IOException; import java.io.OutputStream; @@ -43,6 +44,7 @@ public class FakeBackendMain { var marshaller = MessageMarshaller.builder() .register(ExportTraceServiceRequest.getDefaultInstance()) + .register(ExportMetricsServiceRequest.getDefaultInstance()) .build(); var mapper = JsonMapper.builder(); @@ -57,27 +59,50 @@ public class FakeBackendMain { marshaller.writeValue(value, gen); } }); + serializers.addSerializer( + new StdSerializer<>(ExportMetricsServiceRequest.class) { + @Override + public void serialize( + ExportMetricsServiceRequest value, JsonGenerator gen, SerializerProvider provider) + throws IOException { + marshaller.writeValue(value, gen); + } + }); module.setSerializers(serializers); mapper.addModule(module); OBJECT_MAPPER = mapper.build(); } public static void main(String[] args) { - var collector = new FakeCollectorService(); + var traceCollector = new FakeTraceCollectorService(); + var metricsCollector = new FakeMetricsCollectorService(); var server = Server.builder() .http(8080) - .service(GrpcService.builder().addService(collector).build()) + .service(GrpcService.builder() + .addService(traceCollector) + .addService(metricsCollector) + .build()) .service( - "/clear-requests", + "/clear", (ctx, req) -> { - collector.clearRequests(); + traceCollector.clearRequests(); + metricsCollector.clearRequests(); return HttpResponse.of(HttpStatus.OK); }) .service( - "/get-requests", + "/get-traces", (ctx, req) -> { - var requests = collector.getRequests(); + var requests = traceCollector.getRequests(); + var buf = new ByteBufOutputStream(ctx.alloc().buffer()); + OBJECT_MAPPER.writeValue((OutputStream) buf, requests); + return HttpResponse.of( + HttpStatus.OK, MediaType.JSON, HttpData.wrap(buf.buffer())); + }) + .service( + "/get-metrics", + (ctx, req) -> { + var requests = metricsCollector.getRequests(); var buf = new ByteBufOutputStream(ctx.alloc().buffer()); OBJECT_MAPPER.writeValue((OutputStream) buf, requests); return HttpResponse.of( diff --git a/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeMetricsCollectorService.java b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeMetricsCollectorService.java new file mode 100644 index 0000000000..8f7b7b0fb2 --- /dev/null +++ b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeMetricsCollectorService.java @@ -0,0 +1,33 @@ +package io.opentelemetry.smoketest.fakebackend; + +import com.google.common.collect.ImmutableList; +import io.grpc.stub.StreamObserver; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; +import io.opentelemetry.proto.collector.metrics.v1.MetricsServiceGrpc; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; + +class FakeMetricsCollectorService extends MetricsServiceGrpc.MetricsServiceImplBase { + + private final BlockingQueue exportRequests = + new LinkedBlockingDeque<>(); + + List getRequests() { + return ImmutableList.copyOf(exportRequests); + } + + void clearRequests() { + exportRequests.clear(); + } + + @Override + public void export( + ExportMetricsServiceRequest request, + StreamObserver responseObserver) { + exportRequests.add(request); + responseObserver.onNext(ExportMetricsServiceResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } +} diff --git a/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeCollectorService.java b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeTraceCollectorService.java similarity index 95% rename from smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeCollectorService.java rename to smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeTraceCollectorService.java index 131eb86717..54214d872e 100644 --- a/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeCollectorService.java +++ b/smoke-tests/fake-backend/src/main/java/io/opentelemetry/smoketest/fakebackend/FakeTraceCollectorService.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; -class FakeCollectorService extends TraceServiceGrpc.TraceServiceImplBase { +class FakeTraceCollectorService extends TraceServiceGrpc.TraceServiceImplBase { private final BlockingQueue exportRequests = new LinkedBlockingDeque<>();