Beispiel #1
0
        private static MonitorBase GenerateTelemetryData(Activity activity)
        {
            var         telemetryType = activity.GetTelemetryType();
            var         activityType  = activity.TagObjects.ToAzureMonitorTags(out var partBTags, out var PartCTags);
            MonitorBase telemetry     = new MonitorBase
            {
                BaseType = Telemetry_Base_Type_Mapping[telemetryType]
            };

            if (telemetryType == TelemetryType.Request)
            {
                var url        = activity.Kind == ActivityKind.Server ? HttpHelper.GetUrl(partBTags) : GetMessagingUrl(partBTags);
                var statusCode = HttpHelper.GetHttpStatusCode(partBTags);
                var success    = HttpHelper.GetSuccessFromHttpStatusCode(statusCode);
                var request    = new RequestData(2, activity.Context.SpanId.ToHexString(), activity.Duration.ToString("c", CultureInfo.InvariantCulture), success, statusCode)
                {
                    Name = activity.DisplayName,
                    Url  = url,
                    // TODO: Handle request.source.
                };

                // TODO: Handle activity.TagObjects, extract well-known tags
                AddPropertiesToTelemetry(request.Properties, PartCTags);
                telemetry.BaseData = request;
            }
            else if (telemetryType == TelemetryType.Dependency)
            {
                var dependency = new RemoteDependencyData(2, activity.DisplayName, activity.Duration.ToString("c", CultureInfo.InvariantCulture))
                {
                    Id = activity.Context.SpanId.ToHexString()
                };

                // TODO: Handle activity.TagObjects
                // ExtractPropertiesFromTags(dependency.Properties, activity.Tags);

                if (activityType == PartBType.Http)
                {
                    dependency.Data = HttpHelper.GetUrl(partBTags);
                    dependency.Type = "HTTP"; // TODO: Parse for storage / SB.
                    var statusCode = HttpHelper.GetHttpStatusCode(partBTags);
                    dependency.ResultCode = statusCode;
                    dependency.Success    = HttpHelper.GetSuccessFromHttpStatusCode(statusCode);
                }

                // TODO: Handle dependency.target.
                AddPropertiesToTelemetry(dependency.Properties, PartCTags);
                telemetry.BaseData = dependency;
            }

            return(telemetry);
        }
 public void GetHttpStatusCode_Success()
 {
     Assert.Equal("200", HttpHelper.GetHttpStatusCode(new Dictionary <string, string> {
         [SemanticConventions.AttributeHttpStatusCode] = "200"
     }));
     Assert.Equal("Ok", HttpHelper.GetHttpStatusCode(new Dictionary <string, string> {
         [SemanticConventions.AttributeHttpStatusCode] = "Ok"
     }));
     Assert.Equal("500", HttpHelper.GetHttpStatusCode(new Dictionary <string, string> {
         [SemanticConventions.AttributeHttpStatusCode] = "500"
     }));
     Assert.Null(HttpHelper.GetHttpStatusCode(new Dictionary <string, string> {
         [SemanticConventions.AttributeHttpStatusCode] = null
     }));
 }
 public void GetHttpStatusCode_Failure()
 {
     Assert.Equal("0", HttpHelper.GetHttpStatusCode(null));
     Assert.Equal("0", HttpHelper.GetHttpStatusCode(new Dictionary <string, string>()));
 }