public override void OnStartActivity(Activity activity, object payload)
        {
            const string EventNameSuffix = ".OnStartActivity";
            var          context         = this.startContextFetcher.Fetch(payload) as HttpContext;

            if (context == null)
            {
                CollectorEventSource.Log.NullPayload(nameof(HttpInListener) + EventNameSuffix);
                return;
            }

            var request = context.Request;

            // see the spec https://github.com/open-telemetry/OpenTelemetry-specs/blob/master/trace/HTTP.md
            var path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";

            ISpan span = null;

            if (this.hostingSupportsW3C)
            {
                span = this.Tracer.StartSpanFromActivity(path, Activity.Current, SpanKind.Server);
            }
            else
            {
                var ctx = this.Tracer.TextFormat.Extract <HttpRequest>(
                    request,
                    (r, name) => r.Headers[name]);

                span = this.Tracer.StartSpan(path, ctx, SpanKind.Server);
            }

            this.Tracer.WithSpan(span);

            if (span.IsRecordingEvents)
            {
                // Note, route is missing at this stage. It will be available later
                span.PutHttpHostAttribute(request.Host.Host, request.Host.Port ?? 80);
                span.PutHttpMethodAttribute(request.Method);
                span.PutHttpPathAttribute(path);

                var userAgent = request.Headers["User-Agent"].FirstOrDefault();
                span.PutHttpUserAgentAttribute(userAgent);
                span.PutHttpRawUrlAttribute(GetUri(request));
            }
        }
        public override void OnStartActivity(Activity activity, object payload)
        {
            var context = this.startContextFetcher.Fetch(payload) as HttpContext;

            if (context == null)
            {
                // Debug.WriteLine("context is null");
                return;
            }

            var request = context.Request;

            var ctx = this.propagationComponent.TextFormat.Extract <HttpRequest>(
                request,
                (r, name) => r.Headers[name]);

            // see the spec https://github.com/census-instrumentation/opencensus-specs/blob/master/trace/HTTP.md

            string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";

            ISpan span = null;

            this.Tracer.SpanBuilderWithRemoteParent(path, ctx).SetSampler(this.Sampler).StartScopedSpan(out span);
            if (span == null)
            {
                // Debug.WriteLine("span is null");
                return;
            }

            // Note, route is missing at this stage. It will be available later

            span.PutServerSpanKindAttribute();
            span.PutHttpHostAttribute(request.Host.Host, request.Host.Port ?? 80);
            span.PutHttpMethodAttribute(request.Method);
            span.PutHttpPathAttribute(path);

            var userAgent = request.Headers["User-Agent"].FirstOrDefault();

            span.PutHttpUserAgentAttribute(userAgent);
            span.PutHttpRawUrlAttribute(GetUri(request));
        }
示例#3
0
        public override void OnStartActivity(Activity activity, object payload)
        {
            var context = this.startContextFetcher.Fetch(payload) as HttpContext;

            if (context == null)
            {
                // Debug.WriteLine("context is null");
                return;
            }

            var request = context.Request;

            var ctx = this.Tracer.TextFormat.Extract <HttpRequest>(
                request,
                (r, name) => r.Headers[name]);

            // see the spec https://github.com/open-telemetry/OpenTelemetry-specs/blob/master/trace/HTTP.md

            var path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";

            ISpan span = this.Tracer.SpanBuilder(path)
                         .SetSpanKind(SpanKind.Server)
                         .SetParent(ctx)
                         .SetSampler(this.SamplerFactory(request))
                         .StartSpan();

            this.Tracer.WithSpan(span);

            // Note, route is missing at this stage. It will be available later

            span.PutHttpHostAttribute(request.Host.Host, request.Host.Port ?? 80);
            span.PutHttpMethodAttribute(request.Method);
            span.PutHttpPathAttribute(path);

            var userAgent = request.Headers["User-Agent"].FirstOrDefault();

            span.PutHttpUserAgentAttribute(userAgent);
            span.PutHttpRawUrlAttribute(GetUri(request));
        }