55using System . Collections . Generic ;
66using System . Diagnostics ;
77using System . Globalization ;
8+ using System . Net ;
89using Xunit ;
910
1011using Azure . Monitor . OpenTelemetry . Exporter . Models ;
@@ -56,7 +57,7 @@ public void InitRoleInfo_Default()
5657 TelemetryPartA . InitRoleInfo ( resource ) ;
5758
5859 Assert . StartsWith ( "unknown_service" , TelemetryPartA . RoleName ) ;
59- Assert . Null ( TelemetryPartA . RoleInstance ) ;
60+ Assert . Equal ( Dns . GetHostName ( ) , TelemetryPartA . RoleInstance ) ;
6061 }
6162
6263 [ Fact ]
@@ -66,7 +67,7 @@ public void InitRoleInfo_ServiceName()
6667 TelemetryPartA . InitRoleInfo ( resource ) ;
6768
6869 Assert . Equal ( "my-service" , TelemetryPartA . RoleName ) ;
69- Assert . Null ( TelemetryPartA . RoleInstance ) ;
70+ Assert . Equal ( Dns . GetHostName ( ) , TelemetryPartA . RoleInstance ) ;
7071 }
7172
7273 [ Fact ]
@@ -86,7 +87,7 @@ public void InitRoleInfo_ServiceNamespace()
8687 TelemetryPartA . InitRoleInfo ( resource ) ;
8788
8889 Assert . StartsWith ( "my-namespace.unknown_service" , TelemetryPartA . RoleName ) ;
89- Assert . Null ( TelemetryPartA . RoleInstance ) ;
90+ Assert . Equal ( Dns . GetHostName ( ) , TelemetryPartA . RoleInstance ) ;
9091 }
9192
9293 [ Fact ]
@@ -128,7 +129,7 @@ public void GeneratePartAEnvelope_DefaultActivity_DefaultResource()
128129 Assert . Equal ( "RemoteDependency" , telemetryItem . Name ) ;
129130 Assert . Equal ( TelemetryPartA . FormatUtcTimestamp ( activity . StartTimeUtc ) , telemetryItem . Time ) ;
130131 Assert . StartsWith ( "unknown_service" , telemetryItem . Tags [ ContextTagKeys . AiCloudRole . ToString ( ) ] ) ;
131- Assert . Null ( telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
132+ Assert . Equal ( Dns . GetHostName ( ) , telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
132133 Assert . NotNull ( telemetryItem . Tags [ ContextTagKeys . AiOperationId . ToString ( ) ] ) ;
133134 Assert . NotNull ( telemetryItem . Tags [ ContextTagKeys . AiInternalSdkVersion . ToString ( ) ] ) ;
134135 Assert . Throws < KeyNotFoundException > ( ( ) => telemetryItem . Tags [ ContextTagKeys . AiOperationParentId . ToString ( ) ] ) ;
@@ -177,7 +178,7 @@ public void GeneratePartAEnvelope_Activity_WithParentSpanId()
177178 Assert . Equal ( "RemoteDependency" , telemetryItem . Name ) ;
178179 Assert . Equal ( TelemetryPartA . FormatUtcTimestamp ( activity . StartTimeUtc ) , telemetryItem . Time ) ;
179180 Assert . StartsWith ( "unknown_service" , telemetryItem . Tags [ ContextTagKeys . AiCloudRole . ToString ( ) ] ) ;
180- Assert . Null ( telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
181+ Assert . Equal ( Dns . GetHostName ( ) , telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
181182 Assert . NotNull ( telemetryItem . Tags [ ContextTagKeys . AiOperationId . ToString ( ) ] ) ;
182183 Assert . NotNull ( telemetryItem . Tags [ ContextTagKeys . AiInternalSdkVersion . ToString ( ) ] ) ;
183184 Assert . Equal ( activity . ParentSpanId . ToHexString ( ) , telemetryItem . Tags [ ContextTagKeys . AiOperationParentId . ToString ( ) ] ) ;
@@ -322,6 +323,42 @@ public void AiUserAgentIsNullByDefault()
322323 Assert . Null ( telemetryItem . Tags [ "ai.user.userAgent" ] ) ;
323324 }
324325
326+ [ Fact ]
327+ public void RoleInstanceIsSetToHostNameByDefault ( )
328+ {
329+ using ActivitySource activitySource = new ActivitySource ( ActivitySourceName ) ;
330+ using var activity = activitySource . StartActivity (
331+ ActivityName ,
332+ ActivityKind . Server ,
333+ null ,
334+ startTime : DateTime . UtcNow ) ;
335+ var resource = CreateTestResource ( ) ;
336+
337+ var monitorTags = AzureMonitorConverter . EnumerateActivityTags ( activity ) ;
338+
339+ var telemetryItem = TelemetryPartA . GetTelemetryItem ( activity , ref monitorTags , resource , null ) ;
340+
341+ Assert . Equal ( Dns . GetHostName ( ) , telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
342+ }
343+
344+ [ Fact ]
345+ public void RoleInstanceIsNotOverwrittenIfSetViaServiceInstanceId ( )
346+ {
347+ using ActivitySource activitySource = new ActivitySource ( ActivitySourceName ) ;
348+ using var activity = activitySource . StartActivity (
349+ ActivityName ,
350+ ActivityKind . Server ,
351+ null ,
352+ startTime : DateTime . UtcNow ) ;
353+ var resource = CreateTestResource ( null , null , "serviceinstance" ) ;
354+
355+ var monitorTags = AzureMonitorConverter . EnumerateActivityTags ( activity ) ;
356+
357+ var telemetryItem = TelemetryPartA . GetTelemetryItem ( activity , ref monitorTags , resource , null ) ;
358+
359+ Assert . Equal ( "serviceinstance" , telemetryItem . Tags [ ContextTagKeys . AiCloudRoleInstance . ToString ( ) ] ) ;
360+ }
361+
325362 /// <summary>
326363 /// If SERVICE.NAME is not defined, it will fall-back to "unknown_service".
327364 /// (https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value).
0 commit comments