diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/IMetrics.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/IMetrics.cs
index 8af956b0..5d33f484 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/IMetrics.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/IMetrics.cs
@@ -96,4 +96,9 @@ void PushSingleMetric(string metricName, double value, MetricUnit unit, string n
///
/// if set to true [metrics overflow].
void Flush(bool metricsOverflow = false);
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ void ClearDefaultDimensions();
}
diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
index 6e1878cc..e5f72186 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs
@@ -212,6 +212,14 @@ void IMetrics.Flush(bool metricsOverflow)
"##WARNING## Metrics and Metadata have not been specified. No data will be sent to Cloudwatch Metrics.");
}
}
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ void IMetrics.ClearDefaultDimensions()
+ {
+ _context.ClearDefaultDimensions();
+ }
///
/// Serialize global context object
@@ -317,6 +325,14 @@ public static void SetDefaultDimensions(Dictionary defaultDimens
{
_instance.SetDefaultDimensions(defaultDimensions);
}
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ public static void ClearDefaultDimensions()
+ {
+ _instance.ClearDefaultDimensions();
+ }
///
/// Flushes metrics in Embedded Metric Format (EMF) to Standard Output. In Lambda, this output is collected
diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/Metadata.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/Metadata.cs
index f417e66e..0b656ae2 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/Metadata.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/Metadata.cs
@@ -175,4 +175,12 @@ internal Dictionary ExpandAllDimensionSets()
return dimensionSets;
}
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ internal void ClearDefaultDimensions()
+ {
+ _metricDirective.ClearDefaultDimensions();
+ }
}
\ No newline at end of file
diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricDirective.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricDirective.cs
index 363636a0..06c0e8ac 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricDirective.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricDirective.cs
@@ -225,4 +225,12 @@ internal Dictionary ExpandAllDimensionSets()
return dimensions;
}
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ internal void ClearDefaultDimensions()
+ {
+ DefaultDimensions.Clear();
+ }
}
\ No newline at end of file
diff --git a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricsContext.cs b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricsContext.cs
index c2a83a42..ba77d0ed 100644
--- a/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricsContext.cs
+++ b/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricsContext.cs
@@ -162,4 +162,12 @@ public string Serialize()
{
return _rootNode.Serialize();
}
+
+ ///
+ /// Clears both default dimensions and dimensions lists
+ ///
+ public void ClearDefaultDimensions()
+ {
+ _rootNode.AWS.ClearDefaultDimensions();
+ }
}
\ No newline at end of file
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/ClearDimensionsTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/ClearDimensionsTests.cs
new file mode 100644
index 00000000..8e28bcbe
--- /dev/null
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/ClearDimensionsTests.cs
@@ -0,0 +1,51 @@
+using System;
+using System.IO;
+using AWS.Lambda.Powertools.Common;
+using Moq;
+using Xunit;
+
+namespace AWS.Lambda.Powertools.Metrics.Tests;
+
+[Collection("Sequential")]
+public class ClearDimensionsTests
+{
+ [Fact]
+ public void WhenClearAllDimensions_NoDimensionsInOutput()
+ {
+ // Arrange
+ var methodName = Guid.NewGuid().ToString();
+ var consoleOut = new StringWriter();
+ Console.SetOut(consoleOut);
+
+ var configurations = new Mock();
+
+ var metrics = new Metrics(
+ configurations.Object,
+ nameSpace: "dotnet-powertools-test",
+ service: "testService"
+ );
+
+ var handler = new MetricsAspectHandler(
+ metrics,
+ false
+ );
+
+ var eventArgs = new AspectEventArgs { Name = methodName };
+
+ // Act
+ handler.OnEntry(eventArgs);
+
+ Metrics.ClearDefaultDimensions();
+ Metrics.AddMetric($"Metric Name", 1, MetricUnit.Count);
+
+ handler.OnExit(eventArgs);
+
+ var metricsOutput = consoleOut.ToString();
+
+ // Assert
+ Assert.Contains("{\"Namespace\":\"dotnet-powertools-test\",\"Metrics\":[{\"Name\":\"Metric Name\",\"Unit\":\"Count\"}],\"Dimensions\":[[]]", metricsOutput);
+
+ // Reset
+ handler.ResetForTest();
+ }
+}
\ No newline at end of file
diff --git a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
index 52b88fe5..79752e4b 100644
--- a/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
+++ b/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/EMFValidationTests.cs
@@ -39,7 +39,7 @@ public void WhenCaptureColdStart_CreateSeparateBlob()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService",
@@ -47,7 +47,7 @@ public void WhenCaptureColdStart_CreateSeparateBlob()
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
captureColdStartEnabled
);
@@ -120,14 +120,14 @@ public void When100MetricsAreAdded_FlushAutomatically()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -162,14 +162,14 @@ public void WhenMoreThan9DimensionsAdded_ThrowArgumentOutOfRangeException()
var methodName = Guid.NewGuid().ToString();
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -203,12 +203,12 @@ public void WhenNamespaceNotDefined_ThrowSchemaValidationException()
var methodName = Guid.NewGuid().ToString();
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -241,14 +241,14 @@ public void WhenDimensionsAreAdded_MustExistAsMembers()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -279,10 +279,10 @@ public void WhenNamespaceIsDefined_AbleToRetrieveNamespace()
// Arrange
var methodName = Guid.NewGuid().ToString();
var configurations = new Mock();
- var logger = new Metrics(configurations.Object);
+ var metrics = new Metrics(configurations.Object);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -311,14 +311,14 @@ public void WhenMetricsDefined_AbleToAddMetadata()
Console.SetOut(consoleOut);
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -350,14 +350,14 @@ public void WhenDefaultDimensionsSet_ValidInitialization()
var defaultDimensions = new Dictionary { { "CustomDefaultDimension", "CustomDefaultDimensionValue" } };
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -387,14 +387,14 @@ public void WhenMetricIsNegativeValue_ThrowException()
var methodName = Guid.NewGuid().ToString();
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -428,14 +428,14 @@ public void WhenDefaultDimensionSet_IgnoreDuplicates()
var configurations = new Mock();
var defaultDimensions = new Dictionary { { "CustomDefaultDimension", "CustomDefaultDimensionValue" } };
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -467,14 +467,14 @@ public void WhenMetricsAndMetadataAdded_ValidateOutput()
Console.SetOut(consoleOut);
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -508,14 +508,14 @@ public void WhenMetricsWithSameNameAdded_ValidateMetricArray()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -551,14 +551,14 @@ public void WhenMetricsWithStandardResolutionAdded_ValidateMetricArray()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);
@@ -593,14 +593,14 @@ public void WhenMetricsWithHighResolutionAdded_ValidateMetricArray()
var configurations = new Mock();
- var logger = new Metrics(
+ var metrics = new Metrics(
configurations.Object,
nameSpace: "dotnet-powertools-test",
service: "testService"
);
var handler = new MetricsAspectHandler(
- logger,
+ metrics,
false
);