private bool TryExtractTracestate(string[] tracestateCollection, out List <KeyValuePair <string, string> > tracestateResult) { tracestateResult = null; try { if (tracestateCollection != null) { tracestateResult = new List <KeyValuePair <string, string> >(); // Iterate in reverse order because when call builder set the elements is added in the // front of the list. for (int i = tracestateCollection.Length - 1; i >= 0; i--) { if (!TracestateUtils.AppendTracestate(tracestateCollection[i], tracestateResult)) { return(false); } } } return(true); } catch (Exception) { // failure to parse tracestate should not disregard traceparent // TODO: logging } return(false); }
/// <inheritdoc/> public void Inject <T>(SpanContext spanContext, T carrier, Action <T, string, string> setter) { if (!spanContext.IsValid) { OpenTelemetryApiEventSource.Log.FailedToInjectSpanContext("Invalid context"); return; } if (carrier == null) { OpenTelemetryApiEventSource.Log.FailedToInjectSpanContext("null carrier"); return; } if (setter == null) { OpenTelemetryApiEventSource.Log.FailedToInjectSpanContext("null setter"); return; } var traceparent = string.Concat("00-", spanContext.TraceId.ToHexString(), "-", spanContext.SpanId.ToHexString()); traceparent = string.Concat(traceparent, (spanContext.TraceFlags & ActivityTraceFlags.Recorded) != 0 ? "-01" : "-00"); setter(carrier, TraceParent, traceparent); string tracestateStr = TracestateUtils.GetString(spanContext.Tracestate); if (tracestateStr.Length > 0) { setter(carrier, TraceState, tracestateStr); } }
private bool TryExtractTracestate(string[] tracestateCollection, out Tracestate tracestateResult) { tracestateResult = Tracestate.Empty; var tracestateBuilder = Tracestate.Builder; try { var names = new HashSet <string>(); if (tracestateCollection != null) { // Iterate in reverse order because when call builder set the elements is added in the // front of the list. for (int i = tracestateCollection.Length - 1; i >= 0; i--) { if (!TracestateUtils.TryExtractTracestate(tracestateCollection[i], tracestateBuilder)) { return(false); } } } tracestateResult = tracestateBuilder.Build(); return(true); } catch (Exception) { // failure to parse tracestate should not disregard traceparent // TODO: logging } return(false); }
/// <inheritdoc/> public void Inject <T>(SpanContext spanContext, T carrier, Action <T, string, string> setter) { var traceparent = string.Concat("00-", spanContext.TraceId.ToHexString(), "-", spanContext.SpanId.ToHexString()); traceparent = string.Concat(traceparent, (spanContext.TraceOptions & ActivityTraceFlags.Recorded) != 0 ? "-01" : "-00"); setter(carrier, "traceparent", traceparent); string tracestateStr = TracestateUtils.GetString(spanContext.Tracestate); if (tracestateStr.Length > 0) { setter(carrier, "tracestate", tracestateStr); } }
private bool TryExtractTracestate(string[] tracestateCollection, out List <KeyValuePair <string, string> > tracestateResult) { tracestateResult = null; if (tracestateCollection != null) { tracestateResult = new List <KeyValuePair <string, string> >(); // Iterate in reverse order because when call builder set the elements is added in the // front of the list. for (int i = tracestateCollection.Length - 1; i >= 0; i--) { if (!TracestateUtils.AppendTracestate(tracestateCollection[i], tracestateResult)) { return(false); } } } return(true); }