Beispiel #1
0
        public void InitRoleInfo_NullResource()
        {
            TelemetryPartA.InitRoleInfo(null);

            Assert.Null(TelemetryPartA.RoleName);
            Assert.Null(TelemetryPartA.RoleInstance);
        }
Beispiel #2
0
        public void HttpMethodAndHttpRouteIsUsedForHttpRequestOperationName(string route)
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            activity.DisplayName = "/getaction";

            activity.SetTag(SemanticConventions.AttributeHttpMethod, "GET");
            activity.SetTag(SemanticConventions.AttributeHttpRoute, route);
            activity.SetTag(SemanticConventions.AttributeHttpUrl, "https://www.foo.bar/search");

            string expectedOperationName;

            if (route == "{controller}/{action}/{id}" || route == null)
            {
                expectedOperationName = "GET /search";
            }
            else
            {
                expectedOperationName = $"GET {route}";
            }

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal(expectedOperationName, telemetryItem.Tags[ContextTagKeys.AiOperationName.ToString()]);
        }
 public void InitRoleInfo_ServiceNamespace()
 {
     using var activity = new Activity("InitRoleInfo_ServiceNamespace");
     activity.SetCustomProperty(ResourcePropertyName, Resources.CreateServiceResource(null, null, "my-namespace"));
     TelemetryPartA.InitRoleInfo(activity);
     Assert.Null(TelemetryPartA.RoleName);
     Assert.Null(TelemetryPartA.RoleInstance);
 }
 public void InitRoleInfo_ServiceName()
 {
     using var activity = new Activity("InitRoleInfo_ServiceName");
     activity.SetCustomProperty(ResourcePropertyName, Resources.CreateServiceResource("my-service"));
     TelemetryPartA.InitRoleInfo(activity);
     Assert.Equal("my-service", TelemetryPartA.RoleName);
     Assert.True(Guid.TryParse(TelemetryPartA.RoleInstance, out var guid));
 }
 public void InitRoleInfo_ServiceNameAndInstance()
 {
     using var activity = new Activity("InitRoleInfo_ServiceNameAndInstance");
     activity.SetCustomProperty(ResourcePropertyName, Resources.CreateServiceResource("my-service", "roleInstance_1"));
     TelemetryPartA.InitRoleInfo(activity);
     Assert.Equal("my-service", TelemetryPartA.RoleName);
     Assert.Equal("roleInstance_1", TelemetryPartA.RoleInstance);
 }
Beispiel #6
0
        public void InitRoleInfo_ServiceNameAndInstance()
        {
            var resource = CreateTestResource(serviceName: "my-service", serviceInstance: "my-instance");

            TelemetryPartA.InitRoleInfo(resource);

            Assert.Equal("my-service", TelemetryPartA.RoleName);
            Assert.Equal("my-instance", TelemetryPartA.RoleInstance);
        }
Beispiel #7
0
        public void InitRoleInfo_Default()
        {
            var resource = CreateTestResource();

            TelemetryPartA.InitRoleInfo(resource);

            Assert.StartsWith("unknown_service", TelemetryPartA.RoleName);
            Assert.Null(TelemetryPartA.RoleInstance);
        }
Beispiel #8
0
        public void InitRoleInfo_ServiceNamespace()
        {
            var resource = CreateTestResource(serviceNamespace: "my-namespace");

            TelemetryPartA.InitRoleInfo(resource);

            Assert.StartsWith("my-namespace.unknown_service", TelemetryPartA.RoleName);
            Assert.Null(TelemetryPartA.RoleInstance);
        }
        public void GeneratePartAEnvelope_DefaultActivity()
        {
            var activity      = CreateTestActivity();
            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(activity.StartTimeUtc.ToString(CultureInfo.InvariantCulture), telemetryItem.Time);
            Assert.Null(telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Null(telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }
        public void GeneratePartAEnvelope_ActivityWithRoleInformation()
        {
            var activity = CreateTestActivity(
                resource: Resources.CreateServiceResource("BusyWorker", "TEST3650724"));

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(activity.StartTimeUtc.ToString(CultureInfo.InvariantCulture), telemetryItem.Time);
            Assert.Equal("BusyWorker", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Equal("TEST3650724", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.Equal(activity.TraceId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.Equal(SdkVersionUtils.SdkVersion, telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }
Beispiel #11
0
        public void GeneratePartAEnvelope_Activity_WithResource()
        {
            var activity = CreateTestActivity();
            var resource = CreateTestResource(serviceName: "my-service", serviceInstance: "my-instance");

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, resource, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(activity.StartTimeUtc.ToString(CultureInfo.InvariantCulture), telemetryItem.Time);
            Assert.Equal("my-service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Equal("my-instance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.Equal(activity.TraceId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.Equal(SdkVersionUtils.SdkVersion, telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }
        public void RoleInstanceIsNotOverwrittenIfSetViaServiceInstanceId()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource(null, null, "serviceinstance");

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal("serviceinstance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
        }
        public void RoleInstanceIsSetToHostNameByDefault()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
        }
        public void AiUserAgentIsNullByDefault()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Null(telemetryItem.Tags["ai.user.userAgent"]);
        }
        public void AiLocationIpisSetAsNetPeerIpForServerSpans()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            activity.SetTag(SemanticConventions.AttributeNetPeerIp, "127.0.0.1");

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal("127.0.0.1", telemetryItem.Tags[ContextTagKeys.AiLocationIp.ToString()]);
        }
        public void ActivityNameIsUsedByDefaultForRequestOperationName()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            activity.DisplayName = "displayname";

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal("displayname", telemetryItem.Tags[ContextTagKeys.AiOperationName.ToString()]);
        }
        public void AiUserAgentisSetAsHttpUserAgent()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            var userAgent = "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 91.0.4472.101 Safari / 537.36";

            activity.SetTag(SemanticConventions.AttributeHttpUserAgent, userAgent);

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal(userAgent, telemetryItem.Tags["ai.user.userAgent"]);
        }
        public void HttpMethodAndActivityNameIsUsedForHttpRequestOperationName()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            activity.DisplayName = "/getaction";

            activity.SetTag(SemanticConventions.AttributeHttpMethod, "GET");

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal("GET /getaction", telemetryItem.Tags[ContextTagKeys.AiOperationName.ToString()]);
        }
Beispiel #19
0
        public void GeneratePartAEnvelope_Activity_WithParentSpanId()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Client,
                      parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded),
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, resource, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(TelemetryPartA.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time);
            Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Null(telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Equal(activity.ParentSpanId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }
Beispiel #20
0
        public void GeneratePartAEnvelope_Activity_WithResource()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Client,
                      parentContext: default,
                      startTime: DateTime.UtcNow);

            var resource = CreateTestResource(serviceName: "my-service", serviceInstance: "my-instance");

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, resource, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(TelemetryPartA.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time);
            Assert.Equal("my-service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Equal("my-instance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.Equal(activity.TraceId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.Equal(SdkVersionUtils.SdkVersion, telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }
        public void RequestNameMatchesOperationName(string httpMethod)
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Server,
                      null,
                      startTime: DateTime.UtcNow);
            var resource = CreateTestResource();

            activity.DisplayName = "displayname";
            if (httpMethod != null)
            {
                activity.SetTag(SemanticConventions.AttributeHttpMethod, httpMethod);
            }
            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);
            var requestData   = TelemetryPartB.GetRequestData(activity, ref monitorTags);

            Assert.Equal(requestData.Name, telemetryItem.Tags[ContextTagKeys.AiOperationName.ToString()]);
        }
        public void GeneratePartAEnvelope_DefaultActivity_DefaultResource()
        {
            using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
            using var activity = activitySource.StartActivity(
                      ActivityName,
                      ActivityKind.Client,
                      parentContext: default,
                      startTime: DateTime.UtcNow);

            var resource = CreateTestResource();

            var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);

            var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);

            Assert.Equal("RemoteDependency", telemetryItem.Name);
            Assert.Equal(TelemetryPartA.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time);
            Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
            Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
            Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
            Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
        }