Closed
Description
Expected Behaviour
When using Metrics.AddMetadata should not throw exception on the second Lambda invocation saying the An item with the same key has already been added
Current Behaviour
There are two issues when calling Metrics.AddMetadata
- If the same key is used on the Metrics.AddMetric and on the Metrics.AddMetadata - it will throw the
An item with the same key has already been added
exception - On the second Lambda invocation it will throw the
An item with the same key has already been added
exception
Code snippet
[Metrics(Namespace = "ns", Service = "svc")]
public async Task<string> Handle(string input)
{
// fails when key is same
// add Metrics and addMetadata
Metrics.AddMetric("MyMetric", 1);
Metrics.AddMetadata("MyMetric", "meta");
// fails on second call when key are different
Metrics.AddMetric("MyMetric", 1);
Metrics.AddMetadata("MyMetadata", "meta");
await Task.Delay(1);
return input.ToUpper(CultureInfo.InvariantCulture);
}
Possible Solution
No response
Steps to Reproduce
[Metrics(Namespace = "ns", Service = "svc")]
public async Task<string> Handle(string input)
{
// fails when key is same
// add Metrics and addMetadata
Metrics.AddMetric("MyMetric", 1);
Metrics.AddMetadata("MyMetric", "meta");
// fails on second call when key are different
Metrics.AddMetric("MyMetric", 1);
Metrics.AddMetadata("MyMetadata", "meta");
await Task.Delay(1);
return input.ToUpper(CultureInfo.InvariantCulture);
}
Powertools for AWS Lambda (.NET) version
latest
AWS Lambda function runtime
dotnet6
Debugging logs
System.ArgumentException
An item with the same key has already been added. Key: MyMetadata
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at AWS.Lambda.Powertools.Metrics.Metadata.AddMetadata(String key, Object value) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Metrics/Model/Metadata.cs:line 161
at AWS.Lambda.Powertools.Metrics.MetricsContext.AddMetadata(String key, Object value) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Metrics/Model/MetricsContext.cs:line 154
at AWS.Lambda.Powertools.Metrics.Metrics.AWS.Lambda.Powertools.Metrics.IMetrics.AddMetadata(String key, Object value) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs:line 174
at AWS.Lambda.Powertools.Metrics.Metrics.AddMetadata(String key, Object value) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Metrics/Metrics.cs:line 326
at AWS.Lambda.Powertools.Metrics.Tests.Handlers.FunctionHandler.Handle(String input) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/tests/AWS.Lambda.Powertools.Metrics.Tests/Handlers/FunctionHandler.cs:line 33
at AWS.Lambda.Powertools.Common.MethodAspectAttribute.WrapAsync[T](Func`2 target, Object[] args, AspectEventArgs eventArgs) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Common/Aspects/MethodAspectAttribute.cs:line 90
at AWS.Lambda.Powertools.Metrics.MetricsAspectHandler.OnException(AspectEventArgs eventArgs, Exception exception) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Metrics/Internal/MetricsAspectHandler.cs:line 133
at AWS.Lambda.Powertools.Common.MethodAspectAttribute.WrapAsync[T](Func`2 target, Object[] args, AspectEventArgs eventArgs) in /Users/henrigra/work/aws-lambda-powertools-dotnet/libraries/src/AWS.Lambda.Powertools.Common/Aspects/MethodAspectAttribute.cs:line 96