示例#1
0
        internal static ISpan StartSpan(
            ISpanContext context,
            SpanOptions options,
            string name,
            ISpanId parentSpanId,
            bool?hasRemoteParent,
            ITraceParams traceParams,
            IStartEndHandler startEndHandler,
            ITimestampConverter timestampConverter,
            IClock clock
            )
        {
            var span = new Span(
                context,
                options,
                name,
                parentSpanId,
                hasRemoteParent,
                traceParams,
                startEndHandler,
                timestampConverter,
                clock);

            // Call onStart here instead of calling in the constructor to make sure the span is completely
            // initialized.
            if (span.Options.HasFlag(SpanOptions.RECORD_EVENTS))
            {
                startEndHandler.OnStart(span);
            }
            return(span);
        }
示例#2
0
        //public virtual void AddMessageEvent(MessageEventBase messageEvent)
        //{
        // Default implementation by invoking addNetworkEvent() so that any existing derived classes,
        // including implementation and the mocked ones, do not need to override this method explicitly.
        //addNetworkEvent(BaseMessageEventUtil.asNetworkEvent(messageEvent));
        //}

        //public abstract void AddLink(LinkBase link);

        private Span(
            ISpanContext context,
            SpanOptions options,
            string name,
            ISpanId parentSpanId,
            bool?hasRemoteParent,
            ITraceParams traceParams,
            IStartEndHandler startEndHandler,
            ITimestampConverter timestampConverter,
            IClock clock)
            : base(context, options)
        {
            this.parentSpanId           = parentSpanId;
            this.hasRemoteParent        = hasRemoteParent;
            this.name                   = name;
            this.traceParams            = traceParams;
            this.startEndHandler        = startEndHandler;
            this.clock                  = clock;
            this.hasBeenEnded           = false;
            this.sampleToLocalSpanStore = false;
            if (options.HasFlag(SpanOptions.RECORD_EVENTS))
            {
                this.timestampConverter = timestampConverter != null ? timestampConverter : Census.Internal.TimestampConverter.Now(clock);
                startNanoTime           = clock.NowNanos;
            }
            else
            {
                this.startNanoTime      = 0;
                this.timestampConverter = timestampConverter;
            }
        }
示例#3
0
 private Span(
     ISpanContext context,
     SpanOptions options,
     string name,
     ISpanId parentSpanId,
     bool?hasRemoteParent,
     ITraceParams traceParams,
     IStartEndHandler startEndHandler,
     ITimestampConverter timestampConverter,
     IClock clock)
     : base(context, options)
 {
     this.parentSpanId           = parentSpanId;
     this.hasRemoteParent        = hasRemoteParent;
     this.Name                   = name;
     this.traceParams            = traceParams ?? throw new ArgumentNullException(nameof(traceParams));
     this.startEndHandler        = startEndHandler;
     this.clock                  = clock;
     this.hasBeenEnded           = false;
     this.sampleToLocalSpanStore = false;
     if (options.HasFlag(SpanOptions.RecordEvents))
     {
         this.timestampConverter = timestampConverter ?? OpenCensus.Internal.TimestampConverter.Now(clock);
         this.startNanoTime      = clock.NowNanos;
     }
     else
     {
         this.startNanoTime      = 0;
         this.timestampConverter = timestampConverter;
     }
 }
示例#4
0
        internal static ISpan StartSpan(
            SpanContext context,
            SpanOptions options,
            string name,
            SpanKind spanKind,
            ISpanId parentSpanId,
            ITraceParams traceParams,
            IStartEndHandler startEndHandler,
            Timer timestampConverter)
        {
            var span = new Span(
                context,
                options,
                name,
                spanKind,
                parentSpanId,
                traceParams,
                startEndHandler,
                timestampConverter);

            // Call onStart here instead of calling in the constructor to make sure the span is completely
            // initialized.
            if (span.IsRecordingEvents)
            {
                startEndHandler.OnStart(span);
            }

            return(span);
        }
示例#5
0
        private ISpan StartSpanInternal(
            SpanContext parent,
            string name,
            ISampler sampler,
            IEnumerable <ISpan> parentLinks,
            bool recordEvents,
            Timer timestampConverter)
        {
            ITraceParams        activeTraceParams = this.Options.TraceConfig.ActiveTraceParams;
            IRandomGenerator    random            = this.Options.RandomHandler;
            ITraceId            traceId;
            ISpanId             spanId       = SpanId.GenerateRandomId(random);
            ISpanId             parentSpanId = null;
            TraceOptionsBuilder traceOptionsBuilder;

            if (parent == null || !parent.IsValid)
            {
                // New root span.
                traceId             = TraceId.GenerateRandomId(random);
                traceOptionsBuilder = TraceOptions.Builder();
            }
            else
            {
                // New child span.
                traceId             = parent.TraceId;
                parentSpanId        = parent.SpanId;
                traceOptionsBuilder = TraceOptions.Builder(parent.TraceOptions);
            }

            traceOptionsBuilder.SetIsSampled(
                MakeSamplingDecision(
                    parent,
                    name,
                    sampler,
                    parentLinks,
                    traceId,
                    spanId,
                    activeTraceParams));
            TraceOptions traceOptions = traceOptionsBuilder.Build();
            SpanOptions  spanOptions  = SpanOptions.None;

            if (traceOptions.IsSampled || recordEvents)
            {
                spanOptions = SpanOptions.RecordEvents;
            }

            ISpan span = Span.StartSpan(
                SpanContext.Create(traceId, spanId, traceOptions, parent?.Tracestate ?? Tracestate.Empty),
                spanOptions,
                name,
                this.Kind,
                parentSpanId,
                activeTraceParams,
                this.Options.StartEndHandler,
                timestampConverter);

            LinkSpans(span, parentLinks);
            return(span);
        }
示例#6
0
 protected SpanBase(ISpanContext context, SpanOptions options = SpanOptions.NONE)
 {
     if (context == null)
     {
         throw new ArgumentNullException(nameof(context));
     }
     if (context.TraceOptions.IsSampled && !options.HasFlag(SpanOptions.RECORD_EVENTS))
     {
         throw new ArgumentOutOfRangeException("Span is sampled, but does not have RECORD_EVENTS set.");
     }
     Context = context;
     Options = options;
 }
示例#7
0
 public SpanBaseTest()
 {
     random      = new RandomGenerator(1234);
     spanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Builder().SetIsSampled(true).Build());
     notSampledSpanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.DEFAULT);
     spanOptions = SpanOptions.RECORD_EVENTS;
 }
示例#8
0
 public SpanBaseTest()
 {
     random      = new RandomGenerator(1234);
     spanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Default, Tracestate.Empty);
     spanOptions = SpanOptions.RecordEvents;
 }
示例#9
0
        public CurrentSpanUtilsTest()
        {
            random      = new RandomGenerator(1234);
            spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.Builder().SetIsSampled(true).Build());

            spanOptions = SpanOptions.RECORD_EVENTS;
            var mockSpan = new Mock <NoopSpan>(spanContext, spanOptions)
            {
                CallBase = true
            };

            span = mockSpan.Object;
        }
        public CurrentSpanUtilsTest()
        {
            random      = new RandomGenerator(1234);
            spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.Builder().SetIsSampled(true).Build(),
                    Tracestate.Empty);

            spanOptions = SpanOptions.RecordEvents;
            var mockSpan = new Mock <TestSpan>()
            {
                CallBase = true
            };

            span = mockSpan.Object;
        }
示例#11
0
 private Span(
     SpanContext context,
     SpanOptions options,
     string name,
     SpanKind spanKind,
     SpanId parentSpanId,
     ITraceParams traceParams,
     IStartEndHandler startEndHandler,
     Timer timestampConverter)
 {
     this.Context                = context;
     this.Options                = options;
     this.parentSpanId           = parentSpanId;
     this.Name                   = name;
     this.traceParams            = traceParams ?? throw new ArgumentNullException(nameof(traceParams));
     this.startEndHandler        = startEndHandler;
     this.hasBeenEnded           = false;
     this.sampleToLocalSpanStore = false;
     this.Kind                   = spanKind;
     if (this.IsRecordingEvents)
     {
         if (timestampConverter == null)
         {
             this.TimestampConverter = Timer.StartNew();
             this.startTime          = this.TimestampConverter.StartTime;
         }
         else
         {
             this.TimestampConverter = timestampConverter;
             this.startTime          = this.TimestampConverter.Now;
         }
     }
     else
     {
         this.startTime          = DateTimeOffset.MinValue;
         this.TimestampConverter = timestampConverter;
     }
 }
示例#12
0
 private Span(
     ISpanContext context,
     SpanOptions options,
     string name,
     ISpanId parentSpanId,
     bool?hasRemoteParent,
     ITraceParams traceParams,
     IStartEndHandler startEndHandler,
     Timer timestampConverter)
     : base(context, options)
 {
     this.parentSpanId           = parentSpanId;
     this.hasRemoteParent        = hasRemoteParent;
     this.Name                   = name;
     this.traceParams            = traceParams ?? throw new ArgumentNullException(nameof(traceParams));
     this.startEndHandler        = startEndHandler;
     this.hasBeenEnded           = false;
     this.sampleToLocalSpanStore = false;
     if (options.HasFlag(SpanOptions.RecordEvents))
     {
         if (timestampConverter == null)
         {
             this.timestampConverter = Timer.StartNew();
             this.startTime          = this.timestampConverter.StartTime;
         }
         else
         {
             this.timestampConverter = timestampConverter;
             this.startTime          = this.timestampConverter.Now;
         }
     }
     else
     {
         this.startTime          = DateTimeOffset.MinValue;
         this.timestampConverter = timestampConverter;
     }
 }
示例#13
0
 public NoopSpan(ISpanContext context, SpanOptions options)
     : base(context, options)
 {
 }
示例#14
0
        private ISpan StartSpanInternal(
            ISpanContext parent,
            bool hasRemoteParent,
            string name,
            ISampler sampler,
            IList <ISpan> parentLinks,
            bool recordEvents,
            ITimestampConverter timestampConverter)
        {
            ITraceParams        activeTraceParams = Options.TraceConfig.ActiveTraceParams;
            IRandomGenerator    random            = Options.RandomHandler;
            ITraceId            traceId;
            ISpanId             spanId       = SpanId.GenerateRandomId(random);
            ISpanId             parentSpanId = null;
            TraceOptionsBuilder traceOptionsBuilder;

            if (parent == null || !parent.IsValid)
            {
                // New root span.
                traceId             = TraceId.GenerateRandomId(random);
                traceOptionsBuilder = TraceOptions.Builder();
                // This is a root span so no remote or local parent.
                //hasRemoteParent = null;
                hasRemoteParent = false;
            }
            else
            {
                // New child span.
                traceId             = parent.TraceId;
                parentSpanId        = parent.SpanId;
                traceOptionsBuilder = TraceOptions.Builder(parent.TraceOptions);
            }
            traceOptionsBuilder.SetIsSampled(
                MakeSamplingDecision(
                    parent,
                    hasRemoteParent,
                    name,
                    sampler,
                    parentLinks,
                    traceId,
                    spanId,
                    activeTraceParams));
            TraceOptions traceOptions = traceOptionsBuilder.Build();
            SpanOptions  spanOptions  = SpanOptions.NONE;

            if (traceOptions.IsSampled || recordEvents)
            {
                spanOptions = SpanOptions.RECORD_EVENTS;
            }

            ISpan span = Span.StartSpan(
                SpanContext.Create(traceId, spanId, traceOptions),
                spanOptions,
                name,
                parentSpanId,
                hasRemoteParent,
                activeTraceParams,
                Options.StartEndHandler,
                timestampConverter,
                Options.Clock);

            LinkSpans(span, parentLinks);
            return(span);
        }
示例#15
0
 public TestSpan(SpanContext context, SpanOptions options)
     : base(context, options)
 {
 }