Skip to content

Commit adcac33

Browse files
committed
Added the ClearAllDimensions and a test to check it
1 parent 10d2244 commit adcac33

File tree

6 files changed

+103
-4
lines changed

6 files changed

+103
-4
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,9 @@ void PushSingleMetric(string metricName, double value, MetricUnit unit, string n
9696
/// </summary>
9797
/// <param name="metricsOverflow">if set to <c>true</c> [metrics overflow].</param>
9898
void Flush(bool metricsOverflow = false);
99+
100+
/// <summary>
101+
/// Clears both default dimensions and dimensions lists
102+
/// </summary>
103+
void ClearAllDimensions();
99104
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@ void IMetrics.Flush(bool metricsOverflow)
212212
"##WARNING## Metrics and Metadata have not been specified. No data will be sent to Cloudwatch Metrics.");
213213
}
214214
}
215+
216+
/// <summary>
217+
/// Clears all Dimensions in both DefaultDimensions and Dimensions
218+
/// </summary>
219+
void IMetrics.ClearAllDimensions()
220+
{
221+
_context.ClearAllDimensions();
222+
}
215223

216224
/// <summary>
217225
/// Serialize global context object
@@ -317,6 +325,14 @@ public static void SetDefaultDimensions(Dictionary<string, string> defaultDimens
317325
{
318326
_instance.SetDefaultDimensions(defaultDimensions);
319327
}
328+
329+
/// <summary>
330+
/// Clears both default dimensions and dimensions lists
331+
/// </summary>
332+
public static void ClearAllDimensions()
333+
{
334+
_instance.ClearAllDimensions();
335+
}
320336

321337
/// <summary>
322338
/// Flushes metrics in Embedded Metric Format (EMF) to Standard Output. In Lambda, this output is collected

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,12 @@ internal Dictionary<string, string> ExpandAllDimensionSets()
175175

176176
return dimensionSets;
177177
}
178+
179+
/// <summary>
180+
/// Clears both default dimensions and dimensions lists
181+
/// </summary>
182+
internal void ClearAllDimensions()
183+
{
184+
_metricDirective.ClearAllDimensions();
185+
}
178186
}

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,12 @@ internal void AddDimension(DimensionSet dimension)
199199
/// <param name="defaultDimensions">Default dimensions list</param>
200200
internal void SetDefaultDimensions(List<DimensionSet> defaultDimensions)
201201
{
202-
if (!defaultDimensions.Any())
203-
return;
204-
205-
DefaultDimensions = defaultDimensions;
202+
if (!DefaultDimensions.Any())
203+
DefaultDimensions = defaultDimensions;
204+
else
205+
foreach (var item in defaultDimensions)
206+
if (!DefaultDimensions.Any(d => d.DimensionKeys.Contains(item.DimensionKeys[0])))
207+
DefaultDimensions.Add(item);
206208
}
207209

208210
/// <summary>
@@ -223,4 +225,13 @@ internal Dictionary<string, string> ExpandAllDimensionSets()
223225

224226
return dimensions;
225227
}
228+
229+
/// <summary>
230+
/// Clears both default dimensions and dimensions lists
231+
/// </summary>
232+
internal void ClearAllDimensions()
233+
{
234+
Dimensions.Clear();
235+
DefaultDimensions.Clear();
236+
}
226237
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,12 @@ public string Serialize()
162162
{
163163
return _rootNode.Serialize();
164164
}
165+
166+
/// <summary>
167+
/// Clears both default dimensions and dimensions lists
168+
/// </summary>
169+
public void ClearAllDimensions()
170+
{
171+
_rootNode.AWS.ClearAllDimensions();
172+
}
165173
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.IO;
3+
using AWS.Lambda.Powertools.Common;
4+
using Moq;
5+
using Xunit;
6+
7+
namespace AWS.Lambda.Powertools.Metrics.Tests;
8+
9+
[Collection("Sequential")]
10+
public class ClearDimensionsTests
11+
{
12+
[Fact]
13+
public void WhenClearAllDimensions_NoDimensionsInOutput()
14+
{
15+
// Arrange
16+
var methodName = Guid.NewGuid().ToString();
17+
var consoleOut = new StringWriter();
18+
Console.SetOut(consoleOut);
19+
20+
var configurations = new Mock<IPowertoolsConfigurations>();
21+
22+
var logger = new Metrics(
23+
configurations.Object,
24+
nameSpace: "dotnet-powertools-test",
25+
service: "testService"
26+
);
27+
28+
var handler = new MetricsAspectHandler(
29+
logger,
30+
false
31+
);
32+
33+
var eventArgs = new AspectEventArgs { Name = methodName };
34+
35+
// Act
36+
handler.OnEntry(eventArgs);
37+
38+
Metrics.ClearAllDimensions();
39+
Metrics.AddMetric($"Metric Name", 1, MetricUnit.Count);
40+
41+
handler.OnExit(eventArgs);
42+
43+
var metricsOutput = consoleOut.ToString();
44+
45+
// Assert
46+
Assert.Contains("{\"Namespace\":\"dotnet-powertools-test\",\"Metrics\":[{\"Name\":\"Metric Name\",\"Unit\":\"Count\"}],\"Dimensions\":[[]]", metricsOutput);
47+
48+
// Reset
49+
handler.ResetForTest();
50+
}
51+
}

0 commit comments

Comments
 (0)