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