Flush metrics in Lambda wrapper too (#3748)

This commit is contained in:
Anuraag Agrawal 2021-08-03 12:20:33 +09:00 committed by GitHub
parent a167c5c2b1
commit 7634394664
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 22 deletions

View File

@ -5,21 +5,18 @@
package io.opentelemetry.instrumentation.awslambda.v1_0;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
final class LambdaUtils {
static void forceFlush() {
OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
if (openTelemetry instanceof OpenTelemetrySdk) {
((OpenTelemetrySdk) openTelemetry)
.getSdkTracerProvider()
.forceFlush()
.join(1, TimeUnit.SECONDS);
}
static void forceFlush(OpenTelemetrySdk openTelemetrySdk, long flushTimeout, TimeUnit unit) {
CompletableResultCode traceFlush = openTelemetrySdk.getSdkTracerProvider().forceFlush();
CompletableResultCode metricsFlush = IntervalMetricReader.forceFlushGlobal();
CompletableResultCode.ofAll(Arrays.asList(traceFlush, metricsFlush)).join(flushTimeout, unit);
}
private LambdaUtils() {}

View File

@ -84,10 +84,7 @@ public abstract class TracingRequestHandler<I, O> implements RequestHandler<I, O
} else {
tracer.end(otelContext);
}
openTelemetrySdk
.getSdkTracerProvider()
.forceFlush()
.join(flushTimeoutNanos, TimeUnit.NANOSECONDS);
LambdaUtils.forceFlush(openTelemetrySdk, flushTimeoutNanos, TimeUnit.NANOSECONDS);
}
}

View File

@ -72,10 +72,7 @@ public abstract class TracingRequestStreamHandler implements RequestStreamHandle
context);
} catch (Throwable t) {
tracer.endExceptionally(otelContext, t);
openTelemetrySdk
.getSdkTracerProvider()
.forceFlush()
.join(flushTimeoutNanos, TimeUnit.NANOSECONDS);
LambdaUtils.forceFlush(openTelemetrySdk, flushTimeoutNanos, TimeUnit.NANOSECONDS);
throw t;
}
}
@ -122,10 +119,7 @@ public abstract class TracingRequestStreamHandler implements RequestStreamHandle
public void close() throws IOException {
delegate.close();
tracer.end(otelContext);
openTelemetrySdk
.getSdkTracerProvider()
.forceFlush()
.join(flushTimeoutNanos, TimeUnit.NANOSECONDS);
LambdaUtils.forceFlush(openTelemetrySdk, flushTimeoutNanos, TimeUnit.NANOSECONDS);
}
}
}