internal static List <TelemetryItem> Convert(Batch <Activity> batchActivity, Resource resource, string instrumentationKey)
        {
            List <TelemetryItem> telemetryItems = new List <TelemetryItem>();
            TelemetryItem        telemetryItem;

            foreach (var activity in batchActivity)
            {
                MonitorBase telemetryData = new MonitorBase();
                var         monitorTags   = EnumerateActivityTags(activity);
                telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, instrumentationKey);

                switch (activity.GetTelemetryType())
                {
                case TelemetryType.Request:
                    telemetryData.BaseType = Telemetry_Base_Type_Mapping[TelemetryType.Request];
                    telemetryData.BaseData = TelemetryPartB.GetRequestData(activity, ref monitorTags);
                    break;

                case TelemetryType.Dependency:
                    telemetryData.BaseType = Telemetry_Base_Type_Mapping[TelemetryType.Dependency];
                    telemetryData.BaseData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags);
                    break;
                }

                telemetryItem.Data = telemetryData;
                telemetryItems.Add(telemetryItem);
            }

            return(telemetryItems);
        }
Ejemplo n.º 2
0
        internal static List <TelemetryItem> OtelToAzureMonitorTrace(Batch <Activity> batchActivity, string roleName, string roleInstance, string instrumentationKey)
        {
            List <TelemetryItem> telemetryItems = new List <TelemetryItem>();
            TelemetryItem        telemetryItem;

            foreach (var activity in batchActivity)
            {
                MonitorBase telemetryData = new MonitorBase();
                var         monitorTags   = TraceHelper.EnumerateActivityTags(activity);
                telemetryItem = new TelemetryItem(activity, ref monitorTags);
                telemetryItem.InstrumentationKey = instrumentationKey;
                telemetryItem.SetResource(roleName, roleInstance);

                switch (activity.GetTelemetryType())
                {
                case TelemetryType.Request:
                    telemetryData.BaseType = "RequestData";
                    telemetryData.BaseData = new RequestData(Version, activity, ref monitorTags);
                    break;

                case TelemetryType.Dependency:
                    telemetryData.BaseType = "RemoteDependencyData";
                    telemetryData.BaseData = new RemoteDependencyData(Version, activity, ref monitorTags);
                    break;
                }

                telemetryItem.Data = telemetryData;
                telemetryItems.Add(telemetryItem);
            }

            return(telemetryItems);
        }
        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);
        }
        private MonitorBase GenerateTelemetryData(Activity activity)
        {
            MonitorBase telemetry = new MonitorBase();

            var telemetryType = activity.GetTelemetryType();

            telemetry.BaseType = Telemetry_Base_Type_Mapping[telemetryType];
            string url = GetHttpUrl(activity.Tags);

            if (telemetryType == TelemetryType.Request)
            {
                var request = new RequestData(2, activity.Context.SpanId.ToHexString(), activity.Duration.ToString("c", CultureInfo.InvariantCulture), activity.GetStatus().IsOk, activity.GetStatusCode())
                {
                    Name = activity.DisplayName,
                    Url  = url,
                    // TODO: Handle request.source.
                };

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

                telemetry.BaseData = request;
            }
            else if (telemetryType == TelemetryType.Dependency)
            {
                var dependency = new RemoteDependencyData(2, activity.DisplayName, activity.Duration)
                {
                    Id      = activity.Context.SpanId.ToHexString(),
                    Success = activity.GetStatus().IsOk
                };

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

                if (url != null)
                {
                    dependency.Data       = url;
                    dependency.Type       = "HTTP"; // TODO: Parse for storage / SB.
                    dependency.ResultCode = activity.GetStatusCode();
                }

                // TODO: Handle dependency.target.
                telemetry.BaseData = dependency;
            }

            return(telemetry);
        }
Ejemplo n.º 5
0
        private static MonitorBase GenerateTelemetryData(Activity activity)
        {
            var telemetryType = activity.GetTelemetryType();
            var monitorTags   = new TagEnumerationState
            {
                PartBTags = AzMonList.Initialize(),
                PartCTags = AzMonList.Initialize()
            };

            activity.EnumerateTags(ref monitorTags);

            MonitorBase telemetry = new MonitorBase
            {
                BaseType = Telemetry_Base_Type_Mapping[telemetryType]
            };

            if (telemetryType == TelemetryType.Request)
            {
                monitorTags.PartBTags.GenerateUrlAndAuthority(out var url, out var urlAuthority);
                var statusCode = AzMonList.GetTagValue(ref monitorTags.PartBTags, SemanticConventions.AttributeHttpStatusCode)?.ToString() ?? "0";
                var success    = activity.GetStatus() != Status.Error;
                var request    = new RequestData(2, activity.Context.SpanId.ToHexString(), activity.Duration.ToString("c", CultureInfo.InvariantCulture), success, statusCode)
                {
                    Name   = activity.DisplayName,
                    Url    = url,
                    Source = urlAuthority
                };

                // TODO: Handle activity.TagObjects, extract well-known tags
                AddPropertiesToTelemetry(request.Properties, monitorTags.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(),
                    Success = activity.GetStatus() != Status.Error
                };

                switch (monitorTags.activityType)
                {
                case PartBType.Http:
                    monitorTags.PartBTags.GenerateUrlAndAuthority(out var url, out var urlAuthority);
                    dependency.Data       = url;
                    dependency.Target     = urlAuthority;
                    dependency.Type       = "Http";
                    dependency.ResultCode = AzMonList.GetTagValue(ref monitorTags.PartBTags, SemanticConventions.AttributeHttpStatusCode)?.ToString() ?? "0";
                    break;

                case PartBType.Db:
                    var depDataAndType = AzMonList.GetTagValues(ref monitorTags.PartBTags, SemanticConventions.AttributeDbStatement, SemanticConventions.AttributeDbSystem);
                    dependency.Data = depDataAndType[0]?.ToString();
                    dependency.Type = depDataAndType[1]?.ToString();
                    break;

                case PartBType.Rpc:
                    var depInfo = AzMonList.GetTagValues(ref monitorTags.PartBTags, SemanticConventions.AttributeRpcService, SemanticConventions.AttributeRpcSystem, SemanticConventions.AttributeRpcStatus);
                    dependency.Data       = depInfo[0]?.ToString();
                    dependency.Type       = depInfo[1]?.ToString();
                    dependency.ResultCode = depInfo[2]?.ToString();
                    break;

                case PartBType.Messaging:
                    depDataAndType  = AzMonList.GetTagValues(ref monitorTags.PartBTags, SemanticConventions.AttributeMessagingUrl, SemanticConventions.AttributeMessagingSystem);
                    dependency.Data = depDataAndType[0]?.ToString();
                    dependency.Type = depDataAndType[1]?.ToString();
                    break;
                }

                AddPropertiesToTelemetry(dependency.Properties, monitorTags.PartCTags);
                telemetry.BaseData = dependency;
            }

            return(telemetry);
        }