use of com.microsoft.applicationinsights.agent.internal.common.OperationLogger in project ApplicationInsights-Java by microsoft.
the class TelemetryChannel method internalSend.
/**
* Object can be a list of {@link ByteBuffer} or a raw byte array. Regular telemetries will be
* sent as {@code List<ByteBuffer>}. Persisted telemetries will be sent as byte[]
*/
private CompletableResultCode internalSend(List<ByteBuffer> byteBuffers, String instrumentationKey, Runnable onSuccess, Consumer<Boolean> onFailure, OperationLogger operationLogger) {
HttpRequest request = new HttpRequest(HttpMethod.POST, endpointUrl);
request.setBody(Flux.fromIterable(byteBuffers));
int contentLength = byteBuffers.stream().mapToInt(ByteBuffer::limit).sum();
request.setHeader("Content-Length", Integer.toString(contentLength));
// need to suppress the default User-Agent "ReactorNetty/dev", otherwise Breeze ingestion
// service will put that
// User-Agent header into the client_Browser field for all telemetry that doesn't explicitly set
// it's own
// UserAgent (ideally Breeze would only have this behavior for ingestion directly from browsers)
// TODO(trask)
// not setting User-Agent header at all would be a better option, but haven't figured out how
// to do that yet
request.setHeader("User-Agent", "");
request.setHeader("Content-Encoding", "gzip");
// TODO(trask) subscribe with listener
// * retry on first failure (may not need to worry about this if retry policy in pipeline
// already, see above)
// * write to disk on second failure
CompletableResultCode result = new CompletableResultCode();
final long startTime = System.currentTimeMillis();
// Add instrumentation key to context to use in redirectPolicy
Map<Object, Object> contextKeyValues = new HashMap<>();
contextKeyValues.put(RedirectPolicy.INSTRUMENTATION_KEY, instrumentationKey);
contextKeyValues.put(Tracer.DISABLE_TRACING_KEY, true);
pipeline.send(request, Context.of(contextKeyValues)).subscribe(responseHandler(instrumentationKey, startTime, () -> {
onSuccess.run();
result.succeed();
}, retryable -> {
onFailure.accept(retryable);
result.fail();
}, operationLogger), errorHandler(instrumentationKey, retryable -> {
onFailure.accept(retryable);
result.fail();
}, operationLogger));
return result;
}
Aggregations