@@ -25,13 +25,13 @@ namespace AWS.Lambda.Powertools.Metrics;
2525/// Implements the <see cref="IMetrics" />
2626/// </summary>
2727/// <seealso cref="IMetrics" />
28- public class Metrics : IMetrics
28+ public class Metrics : IMetrics , IDisposable
2929{
3030 /// <summary>
3131 /// The instance
3232 /// </summary>
3333 private static IMetrics _instance ;
34-
34+
3535 /// <summary>
3636 /// The context
3737 /// </summary>
@@ -65,15 +65,15 @@ public class Metrics : IMetrics
6565 internal Metrics ( IPowertoolsConfigurations powertoolsConfigurations , string nameSpace = null , string service = null ,
6666 bool raiseOnEmptyMetrics = false , bool captureColdStartEnabled = false )
6767 {
68- if ( _instance != null ) return ;
68+ _instance ??= this ;
6969
70- _instance = this ;
7170 _powertoolsConfigurations = powertoolsConfigurations ;
7271 _raiseOnEmptyMetrics = raiseOnEmptyMetrics ;
7372 _captureColdStartEnabled = captureColdStartEnabled ;
7473 _context = InitializeContext ( nameSpace , service , null ) ;
7574
7675 _powertoolsConfigurations . SetExecutionEnvironment ( this ) ;
76+
7777 }
7878
7979 /// <summary>
@@ -91,11 +91,11 @@ void IMetrics.AddMetric(string key, double value, MetricUnit unit, MetricResolut
9191 {
9292 if ( string . IsNullOrWhiteSpace ( key ) )
9393 throw new ArgumentNullException (
94- $ "'AddMetric' method requires a valid metrics key. 'Null' or empty values are not allowed.") ;
94+ nameof ( key ) , "'AddMetric' method requires a valid metrics key. 'Null' or empty values are not allowed." ) ;
9595
9696 if ( value < 0 ) {
9797 throw new ArgumentException (
98- "'AddMetric' method requires a valid metrics value. Value must be >= 0." ) ;
98+ "'AddMetric' method requires a valid metrics value. Value must be >= 0." , nameof ( value ) ) ;
9999 }
100100
101101 var metrics = _context . GetMetrics ( ) ;
@@ -150,8 +150,8 @@ string IMetrics.GetService()
150150 void IMetrics . AddDimension ( string key , string value )
151151 {
152152 if ( string . IsNullOrWhiteSpace ( key ) )
153- throw new ArgumentNullException (
154- $ "'AddDimension' method requires a valid dimension key. 'Null' or empty values are not allowed.") ;
153+ throw new ArgumentNullException ( nameof ( key ) ,
154+ "'AddDimension' method requires a valid dimension key. 'Null' or empty values are not allowed." ) ;
155155
156156 _context . AddDimension ( key , value ) ;
157157 }
@@ -168,28 +168,28 @@ void IMetrics.AddDimension(string key, string value)
168168 void IMetrics . AddMetadata ( string key , object value )
169169 {
170170 if ( string . IsNullOrWhiteSpace ( key ) )
171- throw new ArgumentNullException (
172- $ "'AddMetadata' method requires a valid metadata key. 'Null' or empty values are not allowed.") ;
171+ throw new ArgumentNullException ( nameof ( key ) ,
172+ "'AddMetadata' method requires a valid metadata key. 'Null' or empty values are not allowed." ) ;
173173
174174 _context . AddMetadata ( key , value ) ;
175175 }
176176
177177 /// <summary>
178178 /// Implements interface that sets default dimension list
179179 /// </summary>
180- /// <param name="defaultDimensions ">Default Dimension List</param>
180+ /// <param name="defaultDimension ">Default Dimension List</param>
181181 /// <exception cref="System.ArgumentNullException">
182182 /// 'SetDefaultDimensions' method requires a valid key pair. 'Null' or empty
183183 /// values are not allowed.
184184 /// </exception>
185- void IMetrics . SetDefaultDimensions ( Dictionary < string , string > defaultDimensions )
185+ void IMetrics . SetDefaultDimensions ( Dictionary < string , string > defaultDimension )
186186 {
187- foreach ( var item in defaultDimensions )
187+ foreach ( var item in defaultDimension )
188188 if ( string . IsNullOrWhiteSpace ( item . Key ) || string . IsNullOrWhiteSpace ( item . Value ) )
189- throw new ArgumentNullException (
190- $ "'SetDefaultDimensions' method requires a valid key pair. 'Null' or empty values are not allowed.") ;
189+ throw new ArgumentNullException ( nameof ( item . Key ) ,
190+ "'SetDefaultDimensions' method requires a valid key pair. 'Null' or empty values are not allowed." ) ;
191191
192- _context . SetDefaultDimensions ( DictionaryToList ( defaultDimensions ) ) ;
192+ _context . SetDefaultDimensions ( DictionaryToList ( defaultDimension ) ) ;
193193 }
194194
195195 /// <summary>
@@ -258,8 +258,8 @@ void IMetrics.PushSingleMetric(string metricName, double value, MetricUnit unit,
258258 Dictionary < string , string > defaultDimensions , MetricResolution metricResolution )
259259 {
260260 if ( string . IsNullOrWhiteSpace ( metricName ) )
261- throw new ArgumentNullException (
262- $ "'PushSingleMetric' method requires a valid metrics key. 'Null' or empty values are not allowed.") ;
261+ throw new ArgumentNullException ( nameof ( metricName ) ,
262+ "'PushSingleMetric' method requires a valid metrics key. 'Null' or empty values are not allowed." ) ;
263263
264264 using var context = InitializeContext ( nameSpace , service , defaultDimensions ) ;
265265 context . AddMetric ( metricName , value , unit , metricResolution ) ;
@@ -272,7 +272,21 @@ void IMetrics.PushSingleMetric(string metricName, double value, MetricUnit unit,
272272 /// </summary>
273273 public void Dispose ( )
274274 {
275- _instance . Flush ( ) ;
275+ Dispose ( true ) ;
276+ GC . SuppressFinalize ( this ) ;
277+ }
278+
279+ /// <summary>
280+ ///
281+ /// </summary>
282+ /// <param name="disposing"></param>
283+ protected virtual void Dispose ( bool disposing )
284+ {
285+ // Cleanup
286+ if ( disposing )
287+ {
288+ _instance . Flush ( ) ;
289+ }
276290 }
277291
278292 /// <summary>
0 commit comments