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); }
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); }
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); }
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); }