Search in sources :

Example 1 with ExportTraceServiceRequest

use of io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest in project instrumentation-java by census-instrumentation.

the class OcAgentTraceExporterIntegrationTest method testExportSpans.

@Test
public void testExportSpans() throws InterruptedException, IOException {
    // Mock a real-life scenario in production, where Agent is not enabled at first, then enabled
    // after an outage. Users should be able to see traces shortly after Agent is up.
    // Configure to be always-sampled.
    TraceConfig traceConfig = Tracing.getTraceConfig();
    TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
    traceConfig.updateActiveTraceParams(activeTraceParams.toBuilder().setSampler(Samplers.alwaysSample()).build());
    // Register the OcAgent Exporter first.
    // Agent is not yet up and running so Exporter will just retry connection.
    OcAgentTraceExporter.createAndRegister(OcAgentTraceExporterConfiguration.builder().setServiceName(SERVICE_NAME).setUseInsecure(true).setEnableConfig(false).build());
    // Create one root span and 5 children.
    try (Scope scope = tracer.spanBuilder("root").startScopedSpan()) {
        for (int i = 0; i < 5; i++) {
            // Fake work
            doWork("first-iteration-child-" + i, i);
        }
    }
    // Wait 5s so that SpanExporter exports exports all spans.
    Thread.sleep(5000);
    // No interaction with Agent so far.
    assertThat(fakeOcAgentTraceServiceGrpc.getExportTraceServiceRequests()).isEmpty();
    // Image an outage happened, now start Agent. Exporter should be able to connect to Agent
    // when the next batch of SpanData arrives.
    agent.start();
    // Create one root span and 8 children.
    try (Scope scope = tracer.spanBuilder("root2").startScopedSpan()) {
        for (int i = 0; i < 8; i++) {
            // Fake work
            doWork("second-iteration-child-" + i, i);
        }
    }
    // Wait 5s so that SpanExporter exports exports all spans.
    Thread.sleep(5000);
    List<ExportTraceServiceRequest> exportRequests = fakeOcAgentTraceServiceGrpc.getExportTraceServiceRequests();
    assertThat(exportRequests.size()).isAtLeast(2);
    ExportTraceServiceRequest firstRequest = exportRequests.get(0);
    Node expectedNode = OcAgentNodeUtils.getNodeInfo(SERVICE_NAME);
    Node actualNode = firstRequest.getNode();
    assertThat(actualNode.getIdentifier().getHostName()).isEqualTo(expectedNode.getIdentifier().getHostName());
    assertThat(actualNode.getIdentifier().getPid()).isEqualTo(expectedNode.getIdentifier().getPid());
    assertThat(actualNode.getLibraryInfo()).isEqualTo(expectedNode.getLibraryInfo());
    assertThat(actualNode.getServiceInfo()).isEqualTo(expectedNode.getServiceInfo());
    List<io.opencensus.proto.trace.v1.Span> spanProtos = new ArrayList<>();
    for (int i = 1; i < exportRequests.size(); i++) {
        spanProtos.addAll(exportRequests.get(i).getSpansList());
    }
    // On some platforms (e.g Windows) SpanData will never be dropped, so spans from the first batch
    // may also be exported after Agent is up.
    assertThat(spanProtos.size()).isAtLeast(9);
    Set<String> exportedSpanNames = new HashSet<>();
    for (io.opencensus.proto.trace.v1.Span spanProto : spanProtos) {
        if ("root2".equals(spanProto.getName().getValue())) {
            assertThat(spanProto.getChildSpanCount().getValue()).isEqualTo(8);
            assertThat(spanProto.getParentSpanId()).isEqualTo(ByteString.EMPTY);
        } else if ("root".equals(spanProto.getName().getValue())) {
            // This won't happen on Linux but does happen on Windows.
            assertThat(spanProto.getChildSpanCount().getValue()).isEqualTo(5);
            assertThat(spanProto.getParentSpanId()).isEqualTo(ByteString.EMPTY);
        }
        exportedSpanNames.add(spanProto.getName().getValue());
    }
    // The second batch of spans should be exported no matter what.
    assertThat(exportedSpanNames).contains("root2");
    for (int i = 0; i < 8; i++) {
        assertThat(exportedSpanNames).contains("second-iteration-child-" + i);
    }
}
Also used : ExportTraceServiceRequest(io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest) Node(io.opencensus.proto.agent.common.v1.Node) ArrayList(java.util.ArrayList) ByteString(com.google.protobuf.ByteString) TraceParams(io.opencensus.trace.config.TraceParams) Span(io.opencensus.trace.Span) Scope(io.opencensus.common.Scope) TraceConfig(io.opencensus.trace.config.TraceConfig) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 2 with ExportTraceServiceRequest

use of io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest in project instrumentation-java by census-instrumentation.

the class OcAgentTraceExporterHandler method createExportRpcHandlerAndConnect.

@Nullable
private static OcAgentTraceServiceExportRpcHandler createExportRpcHandlerAndConnect(TraceServiceGrpc.TraceServiceStub stub, Node node) {
    @Nullable OcAgentTraceServiceExportRpcHandler exportRpcHandler = null;
    try {
        exportRpcHandler = OcAgentTraceServiceExportRpcHandler.create(stub);
        // First message must have Node set.
        ExportTraceServiceRequest firstExportReq = ExportTraceServiceRequest.newBuilder().setNode(node).build();
        exportRpcHandler.onExport(firstExportReq);
    } catch (RuntimeException e) {
        if (exportRpcHandler != null) {
            exportRpcHandler.onComplete(e);
        }
    }
    return exportRpcHandler;
}
Also used : ExportTraceServiceRequest(io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest) Nullable(javax.annotation.Nullable) Nullable(javax.annotation.Nullable)

Example 3 with ExportTraceServiceRequest

use of io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest in project instrumentation-java by census-instrumentation.

the class OcAgentTraceServiceRpcHandlersTest method export_createAndExport.

@Test
public void export_createAndExport() {
    OcAgentTraceServiceExportRpcHandler exportRpcHandler = OcAgentTraceServiceExportRpcHandler.create(getStub(serverName));
    ExportTraceServiceRequest request = ExportTraceServiceRequest.newBuilder().build();
    exportRpcHandler.onExport(request);
    assertThat(traceServiceGrpc.getExportTraceServiceRequests()).containsExactly(request);
}
Also used : ExportTraceServiceRequest(io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest) Test(org.junit.Test)

Example 4 with ExportTraceServiceRequest

use of io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest in project instrumentation-java by census-instrumentation.

the class FakeOcAgentTraceServiceGrpcImplTest method export.

@Test
public void export() {
    FakeOcAgentTraceServiceGrpcImpl traceServiceGrpc = new FakeOcAgentTraceServiceGrpcImpl();
    StreamObserver<ExportTraceServiceRequest> exportRequestObserver = traceServiceGrpc.export(exportResponseObserver);
    ExportTraceServiceRequest request = ExportTraceServiceRequest.getDefaultInstance();
    exportRequestObserver.onNext(request);
    assertThat(traceServiceGrpc.getExportTraceServiceRequests()).containsExactly(request);
}
Also used : ExportTraceServiceRequest(io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest) Test(org.junit.Test)

Aggregations

ExportTraceServiceRequest (io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest)4 Test (org.junit.Test)3 ByteString (com.google.protobuf.ByteString)1 Scope (io.opencensus.common.Scope)1 Node (io.opencensus.proto.agent.common.v1.Node)1 Span (io.opencensus.trace.Span)1 TraceConfig (io.opencensus.trace.config.TraceConfig)1 TraceParams (io.opencensus.trace.config.TraceParams)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 Nullable (javax.annotation.Nullable)1