private static SpanObject MapToSpan(SpanRequest request) { var spanObject = new SpanObject { SpanId = request.SpanId, ParentSpanId = request.ParentSpanId, StartTime = request.StartTime, EndTime = request.EndTime, SpanType = (SpanType)request.SpanType, SpanLayer = (SpanLayer)request.SpanLayer, IsError = request.IsError }; ReadStringOrIntValue(spanObject, request.Component, ComponentReader, ComponentIdReader); ReadStringOrIntValue(spanObject, request.OperationName, OperationNameReader, OperationNameIdReader); ReadStringOrIntValue(spanObject, request.Peer, PeerReader, PeerIdReader); spanObject.Tags.Add(request.Tags.Select(x => new KeyWithStringValue { Key = x.Key, Value = x.Value })); spanObject.Refs.AddRange(request.References.Select(MapToSegmentReference).ToArray()); spanObject.Logs.AddRange(request.Logs.Select(MapToLogMessage).ToArray()); return(spanObject); }
public SegmentRequest Map(SegmentContext segmentContext) { var segmentRequest = new SegmentRequest { UniqueIds = new[] { MapUniqueId(segmentContext.TraceId) } }; var segmentObjectRequest = new SegmentObjectRequest { SegmentId = MapUniqueId(segmentContext.SegmentId), ServiceId = segmentContext.ServiceId, ServiceInstanceId = segmentContext.ServiceInstanceId }; segmentRequest.Segment = segmentObjectRequest; var span = new SpanRequest { SpanId = segmentContext.Span.SpanId, ParentSpanId = segmentContext.Span.ParentSpanId, OperationName = segmentContext.Span.OperationName, StartTime = segmentContext.Span.StartTime, EndTime = segmentContext.Span.EndTime, SpanType = (int)segmentContext.Span.SpanType, SpanLayer = (int)segmentContext.Span.SpanLayer, IsError = segmentContext.Span.IsError, Peer = segmentContext.Span.Peer, Component = segmentContext.Span.Component }; foreach (var reference in segmentContext.References) { span.References.Add(new SegmentReferenceRequest { ParentSegmentId = MapUniqueId(reference.ParentSegmentId), ParentServiceInstanceId = reference.ParentServiceInstanceId, ParentSpanId = reference.ParentSpanId, ParentEndpointName = reference.ParentEndpoint, EntryServiceInstanceId = reference.EntryServiceInstanceId, EntryEndpointName = reference.EntryEndpoint, NetworkAddress = reference.NetworkAddress, RefType = (int)reference.Reference }); } foreach (var tag in segmentContext.Span.Tags) { span.Tags.Add(new KeyValuePair <string, string>(tag.Key, tag.Value)); } foreach (var log in segmentContext.Span.Logs) { var logData = new LogDataRequest { Timestamp = log.Timestamp }; foreach (var data in log.Data) { logData.Data.Add(new KeyValuePair <string, string>(data.Key, data.Value)); } span.Logs.Add(logData); } segmentObjectRequest.Spans.Add(span); return(segmentRequest); }
public virtual SpanRequest Transform() { var spanRequest = new SpanRequest { SpanId = _spanId, ParentSpanId = _parnetSpanId, StartTime = _startTime, EndTime = _endTime, OperationName = _operationName, Duration = (_endTime - _startTime).TotalMilliseconds }; if (IsEntry) { spanRequest.SpanType = 0; } else if (IsExit) { spanRequest.SpanType = 1; } else { spanRequest.SpanType = 2; } if (_layer.HasValue) { spanRequest.SpanLayer = (int)_layer.Value; } if (_spanComponent.HasValue) { spanRequest.Component = _spanComponent.ToString(); } foreach (var tag in Tags) { spanRequest.Tags.Add(new KeyValuePair <string, string>(tag.Key, tag.Value)); } if (Logs != null) { foreach (var logDataEntity in Logs) { var logMessage = new LogDataRequest { Timestamp = logDataEntity.Timestamp }; foreach (var log in logDataEntity.Fields) { logMessage.Data.Add(new KeyValuePair <string, string>(log.Key, log.Value)); } spanRequest.Logs.Add(logMessage); } } if (_refs == null) { return(spanRequest); } foreach (var traceSegmentRef in _refs) { spanRequest.References.Add(traceSegmentRef.Transform()); } return(spanRequest); }