diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
index e7f27561..d66f0fa0 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
@@ -180,8 +180,9 @@ internal Metrics(IPowertoolsConfigurations powertoolsConfigurations, string name
Instance = this;
_powertoolsConfigurations.SetExecutionEnvironment(this);
- if (!string.IsNullOrEmpty(nameSpace)) SetNamespace(nameSpace);
- if (!string.IsNullOrEmpty(service)) SetService(service);
+ // set namespace and service always
+ SetNamespace(nameSpace);
+ SetService(service);
}
///
@@ -364,7 +365,18 @@ void IMetrics.PushSingleMetric(string name, double value, MetricUnit unit, strin
var context = new MetricsContext();
context.SetNamespace(nameSpace ?? GetNamespace());
- context.SetService(service ?? _context.GetService());
+
+ var parsedService = !string.IsNullOrWhiteSpace(service)
+ ? service
+ : _powertoolsConfigurations.Service == "service_undefined"
+ ? null
+ : _powertoolsConfigurations.Service;
+
+ if (!string.IsNullOrWhiteSpace(parsedService))
+ {
+ context.SetService(parsedService);
+ context.AddDimension("Service", parsedService);
+ }
if (dimensions != null)
{
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsEndpointExtensionsTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsEndpointExtensionsTests.cs
index c5ee7c2c..18ef4c2c 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsEndpointExtensionsTests.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsEndpointExtensionsTests.cs
@@ -20,8 +20,7 @@ public async Task When_WithMetrics_Should_Add_ColdStart()
var options = new MetricsOptions
{
CaptureColdStart = true,
- Namespace = "TestNamespace",
- Service = "TestService"
+ Namespace = "TestNamespace"
};
var conf = Substitute.For();
@@ -61,7 +60,6 @@ public async Task When_WithMetrics_Should_Add_ColdStart_Dimensions()
{
CaptureColdStart = true,
Namespace = "TestNamespace",
- Service = "TestService"
};
var conf = Substitute.For();
@@ -111,7 +109,6 @@ public async Task When_WithMetrics_Should_Add_ColdStart_Default_Dimensions()
{
CaptureColdStart = true,
Namespace = "TestNamespace",
- Service = "TestService",
DefaultDimensions = new Dictionary
{
{ "Environment", "Prod" }
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsMiddlewareExtensionsTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsMiddlewareExtensionsTests.cs
index a9510eaa..128a5c42 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsMiddlewareExtensionsTests.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsMiddlewareExtensionsTests.cs
@@ -21,7 +21,6 @@ public async Task When_UseMetrics_Should_Add_ColdStart()
{
CaptureColdStart = true,
Namespace = "TestNamespace",
- Service = "TestService"
};
var conf = Substitute.For();
@@ -59,7 +58,6 @@ public async Task When_UseMetrics_Should_Add_ColdStart_With_LambdaContext()
{
CaptureColdStart = true,
Namespace = "TestNamespace",
- Service = "TestService"
};
var conf = Substitute.For();
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
index 687ba17e..0934b316 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
@@ -216,6 +216,12 @@ public void When_PushSingleMetric_With_Env_Namespace()
// Assert
Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Default\"]]}]},\"Default\":\"SingleMetric\",\"SingleMetric\":1}", metricsOutput);
+
+ // assert with different service name
+ Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric2\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Service\",\"Default\"]]}]},\"Service\":\"service1\",\"Default\":\"SingleMetric\",\"SingleMetric2\":1}", metricsOutput);
+
+ // assert with different service name
+ Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric3\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Service\",\"Default\"]]}]},\"Service\":\"service2\",\"Default\":\"SingleMetric\",\"SingleMetric3\":1}", metricsOutput);
}
[Trait("Category", "MetricsImplementation")]
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs
index acc66627..5743c09d 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs
@@ -86,6 +86,18 @@ public void PushSingleMetricWithEnvNamespace()
dimensions: new Dictionary {
{ "Default", "SingleMetric" }
});
+
+ Metrics.PushSingleMetric("SingleMetric2", 1, MetricUnit.Count, resolution: MetricResolution.High,
+ service: "service1",
+ dimensions: new Dictionary {
+ { "Default", "SingleMetric" }
+ });
+
+ Metrics.PushSingleMetric("SingleMetric3", 1, MetricUnit.Count, resolution: MetricResolution.High,
+ service: "service2",
+ dimensions: new Dictionary {
+ { "Default", "SingleMetric" }
+ });
}
[Metrics(Namespace = "dotnet-powertools-test", Service = "testService")]
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/MetricsTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/MetricsTests.cs
index 8db246a1..f9cbb9e5 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/MetricsTests.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/MetricsTests.cs
@@ -234,7 +234,6 @@ public void When_ColdStart_Should_Use_DefaultDimensions_From_Options()
{
CaptureColdStart = true,
Namespace = "dotnet-powertools-test",
- Service = "testService",
DefaultDimensions = new Dictionary
{
{ "Environment", "Test" },
@@ -268,7 +267,6 @@ public void When_ColdStart_And_DefaultDimensions_Is_Null_Should_Only_Add_Service
{
CaptureColdStart = true,
Namespace = "dotnet-powertools-test",
- Service = "testService",
DefaultDimensions = null
};
diff --git a/libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs b/libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs
index 0a3573b0..d156fba6 100644
--- a/libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs
+++ b/libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs
@@ -270,11 +270,15 @@ private void AssertSingleMetric(string output)
Assert.Equal("Count", unitElement.GetString());
Assert.True(cloudWatchMetricsElement[0].TryGetProperty("Dimensions", out JsonElement dimensionsElement));
- Assert.Equal("FunctionName", dimensionsElement[0][0].GetString());
+ Assert.Equal("Service", dimensionsElement[0][0].GetString());
+ Assert.Equal("FunctionName", dimensionsElement[0][1].GetString());
Assert.True(root.TryGetProperty("FunctionName", out JsonElement functionNameElement));
Assert.Equal(_functionName, functionNameElement.GetString());
+ Assert.True(root.TryGetProperty("Service", out JsonElement serviceElement));
+ Assert.Equal("Test", serviceElement.GetString());
+
Assert.True(root.TryGetProperty("SingleMetric", out JsonElement singleMetricElement));
Assert.Equal(1, singleMetricElement.GetInt32());
}