public async Task Invoke() { if (_dbContext.PersistedEvents.Any(pe => !pe.Processed)) { foreach (var persistedEvent in _dbContext.PersistedEvents.Where(pe => !pe.Processed).ToList()) { Console.WriteLine($"Sending event: {JsonSerializer.Serialize(persistedEvent)}"); var eventType = GetEventType(persistedEvent.Type); var @event = JsonSerializer.Deserialize(persistedEvent.Body, eventType); var persistedEventContext = _dbContext.EventContexts.Single(ec => ec.EventId == persistedEvent.Id); var operationName = $"Publishing Message: {eventType}"; var spanBuilder = GlobalTracer.Instance.BuildSpan(operationName); var spanContext = new SpanContext(TraceId.FromString(persistedEventContext.TraceId), SpanId.NewUniqueId(), SpanId.FromString(persistedEventContext.SpanId), SpanContextFlags.Sampled); using (var scope = spanBuilder.AsChildOf(spanContext).StartActive()) { await _eventBus.Publish(@event); } persistedEvent.Processed = true; } await _dbContext.SaveChangesAsync(); } }
private SpanId TryFindParentId(MySpan mySpan) { var myLocalReferences = mySpan.References; if (myLocalReferences != null) { foreach (var reference in myLocalReferences) { //reference.Type may be lower case! if ("CHILD_OF".Equals(reference.Type, StringComparison.OrdinalIgnoreCase)) { return(SpanId.FromString(reference.SpanID)); } } } return(new SpanId()); }
protected override SpanContext Extract(ITextMap carrier) { TraceId? traceId = null; SpanId? spanId = null; SpanId parentId = new SpanId(0); // Conventionally, parent id == 0 means the root span SpanContextFlags flags = SpanContextFlags.None; foreach (var entry in carrier) { if (string.Equals(entry.Key, SampledName, StringComparison.OrdinalIgnoreCase)) { string value = entry.Value; if (string.Equals(value, "1", StringComparison.Ordinal) || string.Equals(value, "true", StringComparison.OrdinalIgnoreCase)) { flags |= SpanContextFlags.Sampled; } } else if (string.Equals(entry.Key, TraceIdName, StringComparison.OrdinalIgnoreCase)) { traceId = TraceId.FromString(entry.Value); } else if (string.Equals(entry.Key, ParentSpanIdName, StringComparison.OrdinalIgnoreCase)) { parentId = SpanId.FromString(entry.Value); } else if (string.Equals(entry.Key, SpanIdName, StringComparison.OrdinalIgnoreCase)) { spanId = SpanId.FromString(entry.Value); } else if (string.Equals(entry.Key, FlagsName, StringComparison.OrdinalIgnoreCase)) { if (string.Equals(entry.Value, "1", StringComparison.OrdinalIgnoreCase)) { flags |= SpanContextFlags.Debug; } } } if (traceId != null && spanId != null) { return(new SpanContext(traceId.Value, spanId.Value, parentId, flags)); } return(null); }
public void FromString_WithZeroes() { var spanId = SpanId.FromString("000000000000002a"); Assert.Equal("000000000000002a", _spanId.ToString()); }
private Span ConvertToSpan(TempSpan tempSpan, Tracer tracer) { var mySpan = tempSpan.Span; var tags = mySpan.Tags; var parentId = TryFindParentId(mySpan); var context = new SpanContext(TraceId.FromString(mySpan.TraceId), SpanId.FromString(mySpan.SpanId), parentId, (SpanContextFlags)mySpan.Flags); if (SpanAssembly == null) { var filePath = AppDomain.CurrentDomain.Combine("Jaeger.dll"); if (!File.Exists(filePath)) { throw new InvalidOperationException("SpanAssembly Not Found: " + filePath); } SpanAssembly = Assembly.LoadFile(filePath); } var references = new List <Reference>(); foreach (var reference in mySpan.References) { references.Add(new Reference(context, reference.Type)); } //hack it, attention for same types, or fail wit ex: System.MissingMethodException! //internal Span( // Tracer tracer, // string operationName, // SpanContext context, // DateTime startTimestampUtc, // Dictionary<string, object> tags, // IReadOnlyList<Reference> references) var span = CreateSpanWithReflection(SpanAssembly, tracer, mySpan.OpName, context, mySpan.StartTime.ToUniversalTime(), tags, references.AsReadOnly() ); var logs = mySpan.Logs; foreach (var log in logs) { if (log.Message != null) { //"fields": [ //{ // "key": "event", // "type": "string", // "value": "myLog by FooDomain" //} span.Log(log.TimestampUtc, log.Message); } else { span.Log(log.TimestampUtc, log.Fields); } } //span.Finish(mySpan.StopTime); return(span); }