Skip to content

Commit 21c1bfc

Browse files
Merge pull request #807 from hjgraca/fix/metrics-namespace-service-not-present
chore: Metrics v2 always set namespace and service
2 parents 1e95a20 + 4fbada5 commit 21c1bfc

File tree

7 files changed

+39
-12
lines changed

7 files changed

+39
-12
lines changed

libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,9 @@ internal Metrics(IPowertoolsConfigurations powertoolsConfigurations, string name
180180
Instance = this;
181181
_powertoolsConfigurations.SetExecutionEnvironment(this);
182182

183-
if (!string.IsNullOrEmpty(nameSpace)) SetNamespace(nameSpace);
184-
if (!string.IsNullOrEmpty(service)) SetService(service);
183+
// set namespace and service always
184+
SetNamespace(nameSpace);
185+
SetService(service);
185186
}
186187

187188
/// <inheritdoc />
@@ -364,7 +365,18 @@ void IMetrics.PushSingleMetric(string name, double value, MetricUnit unit, strin
364365

365366
var context = new MetricsContext();
366367
context.SetNamespace(nameSpace ?? GetNamespace());
367-
context.SetService(service ?? _context.GetService());
368+
369+
var parsedService = !string.IsNullOrWhiteSpace(service)
370+
? service
371+
: _powertoolsConfigurations.Service == "service_undefined"
372+
? null
373+
: _powertoolsConfigurations.Service;
374+
375+
if (!string.IsNullOrWhiteSpace(parsedService))
376+
{
377+
context.SetService(parsedService);
378+
context.AddDimension("Service", parsedService);
379+
}
368380

369381
if (dimensions != null)
370382
{

libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsEndpointExtensionsTests.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ public async Task When_WithMetrics_Should_Add_ColdStart()
2020
var options = new MetricsOptions
2121
{
2222
CaptureColdStart = true,
23-
Namespace = "TestNamespace",
24-
Service = "TestService"
23+
Namespace = "TestNamespace"
2524
};
2625

2726
var conf = Substitute.For<IPowertoolsConfigurations>();
@@ -61,7 +60,6 @@ public async Task When_WithMetrics_Should_Add_ColdStart_Dimensions()
6160
{
6261
CaptureColdStart = true,
6362
Namespace = "TestNamespace",
64-
Service = "TestService"
6563
};
6664

6765
var conf = Substitute.For<IPowertoolsConfigurations>();
@@ -111,7 +109,6 @@ public async Task When_WithMetrics_Should_Add_ColdStart_Default_Dimensions()
111109
{
112110
CaptureColdStart = true,
113111
Namespace = "TestNamespace",
114-
Service = "TestService",
115112
DefaultDimensions = new Dictionary<string, string>
116113
{
117114
{ "Environment", "Prod" }

libraries/tests/AWS.Lambda.Powertools.Metrics.AspNetCore.Tests/MetricsMiddlewareExtensionsTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public async Task When_UseMetrics_Should_Add_ColdStart()
2121
{
2222
CaptureColdStart = true,
2323
Namespace = "TestNamespace",
24-
Service = "TestService"
2524
};
2625

2726
var conf = Substitute.For<IPowertoolsConfigurations>();
@@ -59,7 +58,6 @@ public async Task When_UseMetrics_Should_Add_ColdStart_With_LambdaContext()
5958
{
6059
CaptureColdStart = true,
6160
Namespace = "TestNamespace",
62-
Service = "TestService"
6361
};
6462

6563
var conf = Substitute.For<IPowertoolsConfigurations>();

libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,12 @@ public void When_PushSingleMetric_With_Env_Namespace()
216216

217217
// Assert
218218
Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Default\"]]}]},\"Default\":\"SingleMetric\",\"SingleMetric\":1}", metricsOutput);
219+
220+
// assert with different service name
221+
Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric2\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Service\",\"Default\"]]}]},\"Service\":\"service1\",\"Default\":\"SingleMetric\",\"SingleMetric2\":1}", metricsOutput);
222+
223+
// assert with different service name
224+
Assert.Contains("\"CloudWatchMetrics\":[{\"Namespace\":\"EnvNamespace\",\"Metrics\":[{\"Name\":\"SingleMetric3\",\"Unit\":\"Count\",\"StorageResolution\":1}],\"Dimensions\":[[\"Service\",\"Default\"]]}]},\"Service\":\"service2\",\"Default\":\"SingleMetric\",\"SingleMetric3\":1}", metricsOutput);
219225
}
220226

221227
[Trait("Category", "MetricsImplementation")]

libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,18 @@ public void PushSingleMetricWithEnvNamespace()
8686
dimensions: new Dictionary<string, string> {
8787
{ "Default", "SingleMetric" }
8888
});
89+
90+
Metrics.PushSingleMetric("SingleMetric2", 1, MetricUnit.Count, resolution: MetricResolution.High,
91+
service: "service1",
92+
dimensions: new Dictionary<string, string> {
93+
{ "Default", "SingleMetric" }
94+
});
95+
96+
Metrics.PushSingleMetric("SingleMetric3", 1, MetricUnit.Count, resolution: MetricResolution.High,
97+
service: "service2",
98+
dimensions: new Dictionary<string, string> {
99+
{ "Default", "SingleMetric" }
100+
});
89101
}
90102

91103
[Metrics(Namespace = "dotnet-powertools-test", Service = "testService")]

libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/MetricsTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ public void When_ColdStart_Should_Use_DefaultDimensions_From_Options()
234234
{
235235
CaptureColdStart = true,
236236
Namespace = "dotnet-powertools-test",
237-
Service = "testService",
238237
DefaultDimensions = new Dictionary<string, string>
239238
{
240239
{ "Environment", "Test" },
@@ -268,7 +267,6 @@ public void When_ColdStart_And_DefaultDimensions_Is_Null_Should_Only_Add_Service
268267
{
269268
CaptureColdStart = true,
270269
Namespace = "dotnet-powertools-test",
271-
Service = "testService",
272270
DefaultDimensions = null
273271
};
274272

libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,15 @@ private void AssertSingleMetric(string output)
270270
Assert.Equal("Count", unitElement.GetString());
271271

272272
Assert.True(cloudWatchMetricsElement[0].TryGetProperty("Dimensions", out JsonElement dimensionsElement));
273-
Assert.Equal("FunctionName", dimensionsElement[0][0].GetString());
273+
Assert.Equal("Service", dimensionsElement[0][0].GetString());
274+
Assert.Equal("FunctionName", dimensionsElement[0][1].GetString());
274275

275276
Assert.True(root.TryGetProperty("FunctionName", out JsonElement functionNameElement));
276277
Assert.Equal(_functionName, functionNameElement.GetString());
277278

279+
Assert.True(root.TryGetProperty("Service", out JsonElement serviceElement));
280+
Assert.Equal("Test", serviceElement.GetString());
281+
278282
Assert.True(root.TryGetProperty("SingleMetric", out JsonElement singleMetricElement));
279283
Assert.Equal(1, singleMetricElement.GetInt32());
280284
}

0 commit comments

Comments
 (0)