Exemplo n.º 1
0
        private void Event(HttpContext httpContext, string @event)
        {
            // todo - if the user isnt using tracing the code gets here and will blow up on
            // _tracer.Tracer.TryExtract. We already use the fake tracer for another scenario
            // so sticking it here as well..I guess we need a factory for this but cba to do it at
            // the moment
            if (_tracer.GetType() == typeof(FakeServiceTracer))
            {
                return;
            }

            var span = httpContext.GetSpan();

            if (span == null)
            {
                var spanBuilder = new SpanBuilder($"server {httpContext.Request.Method} {httpContext.Request.Path}");
                if (_tracer.Tracer.TryExtract(out var spanContext, httpContext.Request.Headers, (c, k) => c[k].GetValue(),
                                              c => c.Select(x => new KeyValuePair <string, string>(x.Key, x.Value.GetValue())).GetEnumerator()))
                {
                    spanBuilder.AsChildOf(spanContext);
                }

                span = _tracer.Start(spanBuilder);
                httpContext.SetSpan(span);
            }

            span?.Log(LogField.CreateNew().Event(@event));
        }
        public void BeginRequest([Property] HttpContext httpContext)
        {
            var patterns = _options.IgnoredRoutesRegexPatterns;

            if (patterns == null || patterns.Any(x => Regex.IsMatch(httpContext.Request.Path, x)))
            {
                return;
            }
            var spanBuilder = new SpanBuilder($"server {httpContext.Request.Method} {httpContext.Request.Path}");

            if (_tracer.Tracer.TryExtract(out var spanContext, httpContext.Request.Headers, (c, k) => c[k].GetValue(),
                                          c => c.Select(x => new KeyValuePair <string, string>(x.Key, x.Value.GetValue())).GetEnumerator()))
            {
                spanBuilder.AsChildOf(spanContext);
            }
            var span = _tracer.Start(spanBuilder);

            span.Log(LogField.CreateNew().ServerReceive());
            span.Log(LogField.CreateNew().Event("AspNetCore BeginRequest"));
            span.Tags
            .Server().Component("AspNetCore")
            .HttpMethod(httpContext.Request.Method)
            .HttpUrl($"{httpContext.Request.Scheme}://{httpContext.Request.Host.ToUriComponent()}{httpContext.Request.Path}{httpContext.Request.QueryString}")
            .HttpHost(httpContext.Request.Host.ToUriComponent())
            .HttpPath(httpContext.Request.Path)
            .HttpStatusCode(httpContext.Response.StatusCode)
            .PeerAddress(httpContext.Connection.RemoteIpAddress.ToString())
            .PeerPort(httpContext.Connection.RemotePort)
            .UserIp(httpContext.GetUserIp());

            _tracer.Tracer.SetEntrySpan(span);
        }
Exemplo n.º 3
0
        public void Event(HttpContext httpContext, string @event)
        {
            // todo - if the user isnt using tracing the code gets here and will blow up on
            // _tracer.Tracer.TryExtract..
            if (_tracer == null)
            {
                return;
            }

            var span = httpContext.GetSpan();

            if (span == null)
            {
                var spanBuilder = new SpanBuilder($"server {httpContext.Request.Method} {httpContext.Request.Path}");
                if (_tracer.Tracer.TryExtract(out var spanContext, httpContext.Request.Headers, (c, k) => c[k].GetValue(),
                                              c => c.Select(x => new KeyValuePair <string, string>(x.Key, x.Value.GetValue())).GetEnumerator()))
                {
                    spanBuilder.AsChildOf(spanContext);
                }

                span = _tracer.Start(spanBuilder);
                httpContext.SetSpan(span);
            }

            span?.Log(LogField.CreateNew().Event(@event));
        }
        public void HttpRequest([Property(Name = "Request")] HttpRequestMessage request)
        {
            var patterns = _options.IgnoredRoutesRegexPatterns;

            if (patterns == null || patterns.Any(x => Regex.IsMatch(request.RequestUri.AbsolutePath, x)))
            {
                return;
            }
            var spanBuilder = new SpanBuilder($"httpclient {request.Method}");
            var spanContext = _tracer.Tracer.GetEntrySpan()?.SpanContext;

            if (spanContext != null)
            {
                spanBuilder.AsChildOf(spanContext);
            }
            var span = _tracer.Start(spanBuilder);

            span.Tags.Client().Component("HttpClient")
            .HttpMethod(request.Method.Method)
            .HttpUrl(request.RequestUri.OriginalString)
            .HttpHost(request.RequestUri.Host)
            .HttpPath(request.RequestUri.PathAndQuery)
            .PeerAddress(request.RequestUri.OriginalString)
            .PeerHostName(request.RequestUri.Host)
            .PeerPort(request.RequestUri.Port);

            _tracer.Tracer.Inject(span.SpanContext, request.Headers, (c, k, v) => c.Add(k, v));
            span.Log(LogField.CreateNew().ClientSend());
            if (request.Method == HttpMethod.Post)
            {
                span.Tags.Add("request", request.Content.ReadAsStringAsync().Result);
            }

            _tracer.Tracer.SetExitSpan(span);
        }
Exemplo n.º 5
0
        public ISpan OnBeginRequest(HttpContext httpContext)
        {
            var spanBuilder = new SpanBuilder($"server {httpContext.Request.Method} {httpContext.Request.Path}");

            if (_tracer.Tracer.TryExtract(out var spanContext, httpContext.Request.Headers, (c, k) => c[k].GetValue(),
                                          c => c.Select(x => new KeyValuePair <string, string>(x.Key, x.Value.GetValue())).GetEnumerator()))
            {
                spanBuilder.AsChildOf(spanContext);
            }
            var span = _tracer.Start(spanBuilder);

            httpContext.SetSpan(span);
            span.Log(LogField.CreateNew().ServerReceive());
            span.Log(LogField.CreateNew().Event("AspNetCore BeginRequest"));
            span.Tags
            .Server().Component("AspNetCore")
            .HttpMethod(httpContext.Request.Method)
            .HttpUrl($"{httpContext.Request.Scheme}://{httpContext.Request.Host.ToUriComponent()}{httpContext.Request.Path}{httpContext.Request.QueryString}")
            .HttpHost(httpContext.Request.Host.ToUriComponent())
            .HttpPath(httpContext.Request.Path)
            .HttpStatusCode(httpContext.Response.StatusCode)
            .PeerAddress(httpContext.Connection.RemoteIpAddress.ToString())
            .PeerPort(httpContext.Connection.RemotePort);
            _tracer.Tracer.SetCurrentSpan(span);
            return(span);
        }
        private static ISpanBuilder CreateChildSpanBuilder(IServiceTracer tracer, string operationName, DateTimeOffset?startTimestamp = null)
        {
            var spanBuilder = new SpanBuilder(operationName, startTimestamp);
            var spanContext = tracer.Tracer.GetCurrentSpan()?.SpanContext;

            if (spanContext != null)
            {
                spanBuilder.AsChildOf(spanContext);
            }

            return(spanBuilder);
        }
Exemplo n.º 7
0
        public ISpan OnBeginRequest(HttpContext httpContext)
        {
            var spanBuilder = new SpanBuilder($"server {httpContext.Request.Method} {httpContext.Request.Path}");

            if (_tracer.Tracer.TryExtract(out var spanContext, httpContext.Request.Headers, (c, k) => c[k],
                                          c => c.Select(x => new KeyValuePair <string, string>(x.Key, x.Value)).GetEnumerator()))
            {
                spanBuilder.AsChildOf(spanContext);
            }
            var span = _tracer.Start(spanBuilder);

            httpContext.SetSpan(span);
            span.Log(LogField.CreateNew().ServerReceive());
            span.Log(LogField.CreateNew().Event("Microsoft.AspNetCore.Hosting.BeginRequest"));
            _tracer.Tracer.SetCurrentSpan(span);
            return(span);
        }