コード例 #1
0
        private void RunGetRequestedDataOtherSampler(Activity activity)
        {
            ActivityContext parentContext;

            // Check activity.ParentId alone is sufficient to normally determine if a activity is root or not. But if one uses activity.SetParentId to override the TraceId (without intending to set an actual parent), then additional check of parentspanid being empty is required to confirm if an activity is root or not.
            // This checker can be removed, once Activity exposes an API to customize ID Generation (https://github.com/dotnet/runtime/issues/46704) or issue https://github.com/dotnet/runtime/issues/46706 is addressed.
            if (string.IsNullOrEmpty(activity.ParentId) || activity.ParentSpanId.ToHexString() == "0000000000000000")
            {
                parentContext = default;
            }
            else if (activity.Parent != null)
            {
                parentContext = activity.Parent.Context;
            }
            else
            {
                parentContext = new ActivityContext(
                    activity.TraceId,
                    activity.ParentSpanId,
                    activity.ActivityTraceFlags,
                    activity.TraceStateString,
                    isRemote: true);
            }

            var samplingParameters = new SamplingParameters(
                parentContext,
                activity.TraceId,
                activity.DisplayName,
                activity.Kind,
                activity.TagObjects,
                activity.Links);

            var samplingResult = this.sampler.ShouldSample(samplingParameters);

            switch (samplingResult.Decision)
            {
            case SamplingDecision.Drop:
                activity.IsAllDataRequested = false;
                break;

            case SamplingDecision.RecordOnly:
                activity.IsAllDataRequested = true;
                break;

            case SamplingDecision.RecordAndSample:
                activity.IsAllDataRequested  = true;
                activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded;
                break;
            }

            if (samplingResult.Decision != SamplingDecision.Drop)
            {
                foreach (var att in samplingResult.Attributes)
                {
                    activity.SetTag(att.Key, att.Value);
                }
            }
        }
コード例 #2
0
        private void RunGetRequestedDataOtherSampler(Activity activity)
        {
            ActivityContext parentContext;

            if (string.IsNullOrEmpty(activity.ParentId))
            {
                parentContext = default;
            }
            else if (activity.Parent != null)
            {
                parentContext = activity.Parent.Context;
            }
            else
            {
                parentContext = new ActivityContext(
                    activity.TraceId,
                    activity.ParentSpanId,
                    activity.ActivityTraceFlags,
                    activity.TraceStateString,
                    isRemote: true);
            }

            var samplingParameters = new SamplingParameters(
                parentContext,
                activity.TraceId,
                activity.DisplayName,
                activity.Kind,
                activity.TagObjects,
                activity.Links);

            var samplingResult = this.sampler.ShouldSample(samplingParameters);

            switch (samplingResult.Decision)
            {
            case SamplingDecision.Drop:
                activity.IsAllDataRequested = false;
                break;

            case SamplingDecision.RecordOnly:
                activity.IsAllDataRequested = true;
                break;

            case SamplingDecision.RecordAndSample:
                activity.IsAllDataRequested  = true;
                activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded;
                break;
            }

            if (samplingResult.Decision != SamplingDecision.Drop)
            {
                foreach (var att in samplingResult.Attributes)
                {
                    activity.SetTag(att.Key, att.Value);
                }
            }
        }
コード例 #3
0
        private void RunGetRequestedData(Activity activity)
        {
            ActivityContext parentContext;

            if (string.IsNullOrEmpty(activity.ParentId))
            {
                parentContext = default;
            }
            else if (activity.Parent != null)
            {
                parentContext = activity.Parent.Context;
            }
            else
            {
                parentContext = new ActivityContext(
                    activity.TraceId,
                    activity.ParentSpanId,
                    activity.ActivityTraceFlags,
                    activity.TraceStateString,
                    isRemote: true);
            }

            var samplingParameters = new SamplingParameters(
                parentContext,
                activity.TraceId,
                activity.DisplayName,
                activity.Kind,
                activity.TagObjects,
                activity.Links);

            var samplingResult = this.sampler.ShouldSample(samplingParameters);

            switch (samplingResult.Decision)
            {
            case SamplingDecision.NotRecord:
                activity.IsAllDataRequested = false;
                break;

            case SamplingDecision.Record:
                activity.IsAllDataRequested = true;
                break;

            case SamplingDecision.RecordAndSampled:
                activity.IsAllDataRequested  = true;
                activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded;
                break;
            }
        }
コード例 #4
0
        private void RunGetRequestedData(Activity activity)
        {
            ActivityContext parentContext;

            if (string.IsNullOrEmpty(activity.ParentId))
            {
                parentContext = default(ActivityContext);
            }
            else
            {
                if (activity.Parent != null)
                {
                    parentContext = activity.Parent.Context;
                }
                else
                {
                    parentContext = new ActivityContext(activity.TraceId, activity.ParentSpanId, activity.ActivityTraceFlags, activity.TraceStateString);

                    // TODO: once IsRemote is exposed on ActivityContext set parentContext's IsRemote=true
                }
            }

            var samplingParameters = new SamplingParameters(
                parentContext,
                activity.TraceId,
                activity.DisplayName,
                activity.Kind,
                activity.TagObjects,
                activity.Links);

            var samplingDecision = this.sampler.ShouldSample(samplingParameters);

            activity.IsAllDataRequested = samplingDecision.IsSampled;
            if (samplingDecision.IsSampled)
            {
                activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded;
            }
        }