Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public void FromString_WithZeroes()
        {
            var spanId = SpanId.FromString("000000000000002a");

            Assert.Equal("000000000000002a", _spanId.ToString());
        }
Ejemplo n.º 5
0
        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);
        }