/// <summary> /// Helper method that populates span properties from host and port /// to https://github.com/census-instrumentation/opencensus-specs/blob/4954074adf815f437534457331178194f6847ff9/trace/HTTP.md. /// </summary> /// <param name="span">Span to fill out.</param> /// <param name="hostName">Hostr name.</param> /// <param name="port">Port number.</param> /// <returns>Span with populated host properties.</returns> public static ISpan PutHttpHostAttribute(this ISpan span, string hostName, int port) { if (port == 80 || port == 443) { span.PutAttribute(SpanAttributeConstants.HttpHostKey, AttributeValue.StringAttributeValue(hostName)); } else { span.PutAttribute(SpanAttributeConstants.HttpHostKey, AttributeValue.StringAttributeValue(hostName + ":" + port)); } return(span); }
private static void PutHeadersAttribute(ISpan span, string key, List <KeyValuePair <string, IEnumerable <string> > > headers) { foreach (var header in headers) { span.PutAttribute(key + header.Key, ToCommaDelimitedStringAttribute(header.Value)); } }
private static void PutHeadersAttribute(ISpan span, string key, NameValueCollection headers) { foreach (var header in headers.AllKeys) { IAttributeValue values = ToCommaDelimitedStringAttribute(headers.GetValues(header)); span.PutAttribute(key + header, values); } }
/// <summary> /// Helper method that populates span properties from http user agent according /// to https://github.com/census-instrumentation/opencensus-specs/blob/4954074adf815f437534457331178194f6847ff9/trace/HTTP.md. /// </summary> /// <param name="span">Span to fill out.</param> /// <param name="userAgent">Http status code.</param> /// <returns>Span with populated user agent code properties.</returns> public static ISpan PutHttpUserAgentAttribute(this ISpan span, string userAgent) { if (!string.IsNullOrWhiteSpace(userAgent)) { span.PutAttribute(SpanAttributeConstants.HttpUserAgentKey, AttributeValue.StringAttributeValue(userAgent)); } return(span); }
/// <summary> /// Helper method that populates span properties from host and port /// to https://github.com/census-instrumentation/opencensus-specs/blob/4954074adf815f437534457331178194f6847ff9/trace/HTTP.md. /// </summary> /// <param name="span">Span to fill out.</param> /// <param name="rawUrl">Raw url.</param> /// <returns>Span with populated url properties.</returns> public static ISpan PutHttpRawUrlAttribute(this ISpan span, string rawUrl) { if (!string.IsNullOrEmpty(rawUrl)) { span.PutAttribute(SpanAttributeConstants.HttpUrlKey, AttributeValue.StringAttributeValue(rawUrl)); } return(span); }
public void NoEventsRecordedAfterEnd() { ISpan span = Span.StartSpan( spanContext, recordSpanOptions, SPAN_NAME, parentSpanId, false, TraceParams.DEFAULT, startEndHandler, timestampConverter, testClock); span.End(); // Check that adding trace events after Span#End() does not throw any exception and are not // recorded. span.PutAttributes(attributes); span.PutAttribute( "MySingleStringAttributeKey", AttributeValue.StringAttributeValue("MySingleStringAttributeValue")); span.AddAnnotation(Annotation.FromDescription(ANNOTATION_DESCRIPTION)); span.AddAnnotation(ANNOTATION_DESCRIPTION, attributes); span.AddMessageEvent( MessageEvent.Builder(MessageEventType.RECEIVED, 1).SetUncompressedMessageSize(3).Build()); span.AddLink(Link.FromSpanContext(spanContext, LinkType.CHILD_LINKED_SPAN)); ISpanData spanData = ((Span)span).ToSpanData(); Assert.Equal(timestamp, spanData.StartTimestamp); Assert.Empty(spanData.Attributes.AttributeMap); Assert.Empty(spanData.Annotations.Events); Assert.Empty(spanData.MessageEvents.Events); Assert.Empty(spanData.Links.Links); Assert.Equal(Status.OK, spanData.Status); Assert.Equal(timestamp, spanData.EndTimestamp); }
public static ISpan PutErrorAttribute(this ISpan span, string errorMessage) { span.PutAttribute(SpanAttributeConstants.ErrorKey, AttributeValue.StringAttributeValue(errorMessage)); return(span); }
public static ISpan PutHttpRequestSizeAttribute(this ISpan span, long size) { span.PutAttribute(SpanAttributeConstants.HttpRequestSizeKey, AttributeValue.LongAttributeValue(size)); return(span); }
public static ISpan PutHttpPathAttribute(this ISpan span, string path) { span.PutAttribute(SpanAttributeConstants.HttpPathKey, AttributeValue.StringAttributeValue(path)); return(span); }
public static ISpan PutHttpHostAttribute(this ISpan span, string hostName) { span.PutAttribute(SpanAttributeConstants.HttpHostKey, AttributeValue.StringAttributeValue(hostName)); return(span); }
public static ISpan PutHttpStatusCodeAttribute(this ISpan span, int statusCode) { span.PutAttribute(SpanAttributeConstants.HttpStatusCodeKey, AttributeValue.LongAttributeValue(statusCode)); return(span); }
public static ISpan PutMvcControllerAction(this ISpan span, string actionName) { span.PutAttribute(SpanAttributeConstants.MvcControllerMethod, AttributeValue.StringAttributeValue(actionName)); return(span); }
public static ISpan PutServerSpanKindAttribute(this ISpan span) { span.PutAttribute(SpanAttributeConstants.SpanKindKey, AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind)); return(span); }
public void GoSpanData_EndedSpan() { ISpan span = Span.StartSpan( spanContext, recordSpanOptions, SPAN_NAME, parentSpanId, false, TraceParams.DEFAULT, startEndHandler, timestampConverter, testClock); span.PutAttribute( "MySingleStringAttributeKey", AttributeValue.StringAttributeValue("MySingleStringAttributeValue")); span.PutAttributes(attributes); testClock.AdvanceTime(Duration.Create(0, 100)); span.AddAnnotation(Annotation.FromDescription(ANNOTATION_DESCRIPTION)); testClock.AdvanceTime(Duration.Create(0, 100)); span.AddAnnotation(ANNOTATION_DESCRIPTION, attributes); testClock.AdvanceTime(Duration.Create(0, 100)); IMessageEvent networkEvent = MessageEvent.Builder(MessageEventType.RECEIVED, 1).SetUncompressedMessageSize(3).Build(); span.AddMessageEvent(networkEvent); ILink link = Link.FromSpanContext(spanContext, LinkType.CHILD_LINKED_SPAN); span.AddLink(link); testClock.AdvanceTime(Duration.Create(0, 100)); span.End(EndSpanOptions.Builder().SetStatus(Status.CANCELLED).Build()); ISpanData spanData = ((Span)span).ToSpanData(); Assert.Equal(spanContext, spanData.Context); Assert.Equal(SPAN_NAME, spanData.Name); Assert.Equal(parentSpanId, spanData.ParentSpanId); Assert.False(spanData.HasRemoteParent); Assert.Equal(0, spanData.Attributes.DroppedAttributesCount); Assert.Equal(expectedAttributes, spanData.Attributes.AttributeMap); Assert.Equal(0, spanData.Annotations.DroppedEventsCount); Assert.Equal(2, spanData.Annotations.Events.Count); Assert.Equal(timestamp.AddNanos(100), spanData.Annotations.Events[0].Timestamp); Assert.Equal(Annotation.FromDescription(ANNOTATION_DESCRIPTION), spanData.Annotations.Events[0].Event); Assert.Equal(timestamp.AddNanos(200), spanData.Annotations.Events[1].Timestamp); Assert.Equal(Annotation.FromDescriptionAndAttributes(ANNOTATION_DESCRIPTION, attributes), spanData.Annotations.Events[1].Event); Assert.Equal(0, spanData.MessageEvents.DroppedEventsCount); Assert.Equal(1, spanData.MessageEvents.Events.Count); Assert.Equal(timestamp.AddNanos(300), spanData.MessageEvents.Events[0].Timestamp); Assert.Equal(networkEvent, spanData.MessageEvents.Events[0].Event); Assert.Equal(0, spanData.Links.DroppedLinksCount); Assert.Equal(1, spanData.Links.Links.Count); Assert.Equal(link, spanData.Links.Links[0]); Assert.Equal(timestamp, spanData.StartTimestamp); Assert.Equal(Status.CANCELLED, spanData.Status); Assert.Equal(timestamp.AddNanos(400), spanData.EndTimestamp); var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler); var spanBase = span as SpanBase; startEndMock.Verify(s => s.OnStart(spanBase), Times.Once); startEndMock.Verify(s => s.OnEnd(spanBase), Times.Once); }
public static ISpan PutErrorStackTraceAttribute(this ISpan span, string errorStackTrace) { span.PutAttribute(SpanAttributeConstants.ErrorStackTrace, AttributeValue.StringAttributeValue(errorStackTrace)); return(span); }
public static ISpan PutHttpUrlAttribute(this ISpan span, string url) { span.PutAttribute(SpanAttributeConstants.HttpUrlKey, AttributeValue.StringAttributeValue(url)); return(span); }
public static ISpan PutMvcControllerClass(this ISpan span, string className) { span.PutAttribute(SpanAttributeConstants.MvcControllerClass, AttributeValue.StringAttributeValue(className)); return(span); }
public static ISpan PutHttpMethodAttribute(this ISpan span, string method) { span.PutAttribute(SpanAttributeConstants.HttpMethodKey, AttributeValue.StringAttributeValue(method)); return(span); }
public static ISpan PutMvcViewExecutingFilePath(this ISpan span, string actionName) { span.PutAttribute(SpanAttributeConstants.MvcViewFilePath, AttributeValue.StringAttributeValue(actionName)); return(span); }
public void ToSpanData_ActiveSpan() { ISpan span = Span.StartSpan( spanContext, recordSpanOptions, SPAN_NAME, parentSpanId, true, TraceParams.Default, startEndHandler, timestampConverter, testClock); span.PutAttribute( "MySingleStringAttributeKey", AttributeValue.StringAttributeValue("MySingleStringAttributeValue")); span.PutAttributes(attributes); testClock.AdvanceTime(Duration.Create(0, 100)); span.AddAnnotation(Annotation.FromDescription(ANNOTATION_DESCRIPTION)); testClock.AdvanceTime(Duration.Create(0, 100)); span.AddAnnotation(ANNOTATION_DESCRIPTION, attributes); testClock.AdvanceTime(Duration.Create(0, 100)); IMessageEvent networkEvent = MessageEvent.Builder(MessageEventType.Received, 1).SetUncompressedMessageSize(3).Build(); span.AddMessageEvent(networkEvent); testClock.AdvanceTime(Duration.Create(0, 100)); ILink link = Link.FromSpanContext(spanContext, LinkType.ChildLinkedSpan); span.AddLink(link); ISpanData spanData = ((Span)span).ToSpanData(); Assert.Equal(spanContext, spanData.Context); Assert.Equal(SPAN_NAME, spanData.Name); Assert.Equal(parentSpanId, spanData.ParentSpanId); Assert.True(spanData.HasRemoteParent); Assert.Equal(0, spanData.Attributes.DroppedAttributesCount); Assert.Equal(expectedAttributes, spanData.Attributes.AttributeMap); Assert.Equal(0, spanData.Annotations.DroppedEventsCount); Assert.Equal(2, spanData.Annotations.Events.Count()); Assert.Equal(timestamp.AddNanos(100), spanData.Annotations.Events.ToList()[0].Timestamp); Assert.Equal(Annotation.FromDescription(ANNOTATION_DESCRIPTION), spanData.Annotations.Events.ToList()[0].Event); Assert.Equal(timestamp.AddNanos(200), spanData.Annotations.Events.ToList()[1].Timestamp); Assert.Equal(Annotation.FromDescriptionAndAttributes(ANNOTATION_DESCRIPTION, attributes), spanData.Annotations.Events.ToList()[1].Event); Assert.Equal(0, spanData.MessageEvents.DroppedEventsCount); Assert.Single(spanData.MessageEvents.Events); Assert.Equal(timestamp.AddNanos(300), spanData.MessageEvents.Events.First().Timestamp); Assert.Equal(networkEvent, spanData.MessageEvents.Events.First().Event); Assert.Equal(0, spanData.Links.DroppedLinksCount); Assert.Single(spanData.Links.Links); Assert.Equal(link, spanData.Links.Links.First()); Assert.Equal(timestamp, spanData.StartTimestamp); Assert.Null(spanData.Status); Assert.Null(spanData.EndTimestamp); var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler); var spanBase = span as SpanBase; startEndMock.Verify(s => s.OnStart(spanBase), Times.Once); }