Skip to content

Commit 80d4c76

Browse files
authored
fix: Add Azure Function app name prefix to faas.name attribute in Azure Function transactions. (#2973)
1 parent 8812fe1 commit 80d4c76

File tree

8 files changed

+13
-13
lines changed

8 files changed

+13
-13
lines changed

src/Agent/NewRelic/Agent/Core/Configuration/DefaultConfiguration.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,11 @@ private IEnumerable<string> GetApplicationNames()
271271
return appName.Split(StringSeparators.Comma);
272272
}
273273

274-
if (AzureFunctionModeDetected && AzureFunctionModeEnabled && !string.IsNullOrEmpty(AzureFunctionServiceName))
274+
if (AzureFunctionModeDetected && AzureFunctionModeEnabled && !string.IsNullOrEmpty(AzureFunctionAppName))
275275
{
276276
Log.Info("Application name from Azure Function site name.");
277277
_applicationNamesSource = "Azure Function";
278-
return new List<string> { AzureFunctionServiceName };
278+
return new List<string> { AzureFunctionAppName };
279279
}
280280

281281
appName = _environment.GetEnvironmentVariable("RoleName");
@@ -2185,7 +2185,7 @@ public string AzureFunctionResourceId
21852185
return string.Empty;
21862186
}
21872187

2188-
return $"/subscriptions/{subscriptionId}/resourceGroups/{websiteResourceGroup}/providers/Microsoft.Web/sites/{(string.IsNullOrEmpty(AzureFunctionServiceName) ? "unknown" : AzureFunctionServiceName)}";
2188+
return $"/subscriptions/{subscriptionId}/resourceGroups/{websiteResourceGroup}/providers/Microsoft.Web/sites/{(string.IsNullOrEmpty(AzureFunctionAppName) ? "unknown" : AzureFunctionAppName)}";
21892189
}
21902190
}
21912191

@@ -2245,7 +2245,7 @@ public string AzureFunctionSubscriptionId
22452245
}
22462246
}
22472247

2248-
public string AzureFunctionServiceName => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");
2248+
public string AzureFunctionAppName => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");
22492249
#endregion
22502250

22512251
#endregion

src/Agent/NewRelic/Agent/Core/Configuration/ReportedConfiguration.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ public ReportedConfiguration(IConfiguration configuration)
713713
public string AzureFunctionSubscriptionId => _configuration.AzureFunctionSubscriptionId;
714714

715715
[JsonIgnore]
716-
public string AzureFunctionServiceName => _configuration.AzureFunctionServiceName;
716+
public string AzureFunctionAppName => _configuration.AzureFunctionAppName;
717717

718718
public string AzureFunctionResourceIdWithFunctionName(string functionName) => _configuration.AzureFunctionResourceIdWithFunctionName(functionName);
719719

src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Configuration/IConfiguration.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public interface IConfiguration
229229
string AzureFunctionResourceGroupName { get; }
230230
string AzureFunctionRegion { get; }
231231
string AzureFunctionSubscriptionId { get; }
232-
string AzureFunctionServiceName { get; }
232+
string AzureFunctionAppName { get; }
233233
string AzureFunctionResourceIdWithFunctionName(string functionName);
234234

235235
bool UtilizationDetectAzureFunction { get; }

src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/AzureFunction/InvokeFunctionAsyncWrapper.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public AfterWrappedMethodDelegate BeforeWrappedMethod(InstrumentedMethodCall ins
7676
}
7777

7878
transaction.AddFaasAttribute("cloud.resource_id", agent.Configuration.AzureFunctionResourceIdWithFunctionName(functionDetails.FunctionName));
79-
transaction.AddFaasAttribute("faas.name", functionDetails.FunctionName);
79+
transaction.AddFaasAttribute("faas.name", $"{agent.Configuration.AzureFunctionAppName}/{functionDetails.FunctionName}");
8080
transaction.AddFaasAttribute("faas.trigger", functionDetails.Trigger);
8181
transaction.AddFaasAttribute("faas.invocation_id", functionDetails.InvocationId);
8282

tests/Agent/IntegrationTests/IntegrationTests/AzureFunction/AzureFunctionHttpTriggerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void Test_SimpleInvocationMode()
149149
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
150150
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/HttpTriggerFunctionUsingSimpleInvocation", cloudResourceIdValue);
151151
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
152-
Assert.Equal("HttpTriggerFunctionUsingSimpleInvocation", faasNameValue);
152+
Assert.Equal("IntegrationTestAppName/HttpTriggerFunctionUsingSimpleInvocation", faasNameValue);
153153
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
154154
Assert.Equal("http", faasTriggerValue);
155155

@@ -284,7 +284,7 @@ public void Test_PipelineMode()
284284
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
285285
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/HttpTriggerFunctionUsingAspNetCorePipeline", cloudResourceIdValue);
286286
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
287-
Assert.Equal("HttpTriggerFunctionUsingAspNetCorePipeline", faasNameValue);
287+
Assert.Equal("IntegrationTestAppName/HttpTriggerFunctionUsingAspNetCorePipeline", faasNameValue);
288288
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
289289
Assert.Equal("http", faasTriggerValue);
290290

tests/Agent/IntegrationTests/IntegrationTests/AzureFunction/AzureFunctionQueueTriggerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void Test()
5858
{
5959
{ "faas.coldStart", true},
6060
//new("faas.invocation_id", "test_invocation_id"), This one is a random guid, not something we can specifically look for
61-
{ "faas.name", "QueueTriggerFunction" },
61+
{ "faas.name", "IntegrationTestAppName/QueueTriggerFunction" },
6262
{ "faas.trigger", "datasource" },
6363
{ "cloud.resource_id", "/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/QueueTriggerFunction" }
6464
};
@@ -92,7 +92,7 @@ public void Test()
9292
Assert.True(transaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
9393
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/QueueTriggerFunction", cloudResourceIdValue);
9494
Assert.True(transaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
95-
Assert.Equal("QueueTriggerFunction", faasNameValue);
95+
Assert.Equal("IntegrationTestAppName/QueueTriggerFunction", faasNameValue);
9696
Assert.True(transaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
9797
Assert.Equal("datasource", faasTriggerValue);
9898
}

tests/Agent/UnitTests/Core.UnitTest/Configuration/DefaultConfigurationTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4436,7 +4436,7 @@ public void AzureFunctionServiceName_ShouldReturnServiceName_WhenEnvironmentVari
44364436
Mock.Arrange(() => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME")).Returns("some-service-name");
44374437

44384438
// Act
4439-
var result = _defaultConfig.AzureFunctionServiceName;
4439+
var result = _defaultConfig.AzureFunctionAppName;
44404440

44414441
// Assert
44424442
Assert.That(result, Is.EqualTo("some-service-name"));

tests/Agent/UnitTests/Core.UnitTest/DataTransport/ExhaustiveTestConfiguration.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ public IReadOnlyDictionary<string, string> GetAppSettings()
492492
public string AzureFunctionResourceGroupName => "AzureFunctionResourceGroupName";
493493
public string AzureFunctionRegion => "AzureFunctionRegion";
494494
public string AzureFunctionSubscriptionId => "AzureFunctionSubscriptionId";
495-
public string AzureFunctionServiceName => "AzureFunctionServiceName";
495+
public string AzureFunctionAppName => "AzureFunctionServiceName";
496496
public string AzureFunctionResourceIdWithFunctionName(string functionName) => $"AzureFunctionResourceId/{functionName}";
497497

498498
public string LoggingLevel => "info";

0 commit comments

Comments
 (0)