Add metrics collection to smoke-tests' fake-backend (#2597)

* Add metrics collection to smoke-tests' fake-backend

* Fix a bug
This commit is contained in:
Mateusz Rzeszutek 2021-03-19 07:03:40 +01:00 committed by GitHub
parent 9fff4a3b47
commit 5e1f52659f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 65 additions and 7 deletions

View File

@ -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(

View File

@ -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<ExportMetricsServiceRequest> exportRequests =
new LinkedBlockingDeque<>();
List<ExportMetricsServiceRequest> getRequests() {
return ImmutableList.copyOf(exportRequests);
}
void clearRequests() {
exportRequests.clear();
}
@Override
public void export(
ExportMetricsServiceRequest request,
StreamObserver<ExportMetricsServiceResponse> responseObserver) {
exportRequests.add(request);
responseObserver.onNext(ExportMetricsServiceResponse.getDefaultInstance());
responseObserver.onCompleted();
}
}

View File

@ -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<ExportTraceServiceRequest> exportRequests =
new LinkedBlockingDeque<>();