From 9350316e6df901fd4cd57949854e61792f41f84f Mon Sep 17 00:00:00 2001 From: gregsinclair42 Date: Wed, 26 Feb 2025 13:07:39 -0700 Subject: [PATCH 01/11] Check for a valid ILambdaContext in the args before attempting to use it. Do this to avoid null reference exceptions. --- .../Internal/LoggingLambdaContext.cs | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/libraries/src/AWS.Lambda.Powertools.Logging/Internal/LoggingLambdaContext.cs b/libraries/src/AWS.Lambda.Powertools.Logging/Internal/LoggingLambdaContext.cs index a8846b15..17c5a3a8 100644 --- a/libraries/src/AWS.Lambda.Powertools.Logging/Internal/LoggingLambdaContext.cs +++ b/libraries/src/AWS.Lambda.Powertools.Logging/Internal/LoggingLambdaContext.cs @@ -74,24 +74,21 @@ public static bool Extract(AspectEventArgs args) return false; var index = Array.FindIndex(args.Method.GetParameters(), p => p.ParameterType == typeof(ILambdaContext)); - if (index >= 0) - { - var x = (ILambdaContext)args.Args[index]; - - Instance = new LoggingLambdaContext - { - AwsRequestId = x.AwsRequestId, - FunctionName = x.FunctionName, - FunctionVersion = x.FunctionVersion, - InvokedFunctionArn = x.InvokedFunctionArn, - LogGroupName = x.LogGroupName, - LogStreamName = x.LogStreamName, - MemoryLimitInMB = x.MemoryLimitInMB - }; - return true; - } + if (index < 0 || args.Args[index] == null || args.Args[index] is not ILambdaContext) return false; + + var x = (ILambdaContext)args.Args[index]; - return false; + Instance = new LoggingLambdaContext + { + AwsRequestId = x.AwsRequestId, + FunctionName = x.FunctionName, + FunctionVersion = x.FunctionVersion, + InvokedFunctionArn = x.InvokedFunctionArn, + LogGroupName = x.LogGroupName, + LogStreamName = x.LogStreamName, + MemoryLimitInMB = x.MemoryLimitInMB + }; + return true; } /// From 0e8d3484c64cee8c0af7f29c7b5ea469b711a1a2 Mon Sep 17 00:00:00 2001 From: gregsinclair42 Date: Wed, 26 Feb 2025 13:46:59 -0700 Subject: [PATCH 02/11] Add a unit test to prove the fix works --- .../Context/LambdaContextTest.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs index feb9283e..cbd3c661 100644 --- a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs +++ b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs @@ -56,6 +56,33 @@ public void Extract_WhenHasLambdaContextArgument_InitializesLambdaContextInfo() Assert.Null(LoggingLambdaContext.Instance); } + [Fact] + public void Extract_Extract_When_LambdaContext_Is_Null_But_Not_FIrst_Parameter_Returns_False() + { + // Arrange + ILambdaContext lambdaContext = null; + var args = Substitute.For(); + var method = Substitute.For(); + var parameter1 = Substitute.For(); + var parameter2 = Substitute.For(); + + // Setup parameters + parameter1.ParameterType.Returns(typeof(string)); + parameter2.ParameterType.Returns(typeof(ILambdaContext)); + + // Setup method + method.GetParameters().Returns(new[] { parameter1, parameter2 }); + + // Setup args + args.Method = method; + args.Args = new object[] { "requestContext", lambdaContext }; + + // Act && Assert + LoggingLambdaContext.Clear(); + Assert.Null(LoggingLambdaContext.Instance); + Assert.False(LoggingLambdaContext.Extract(args)); + } + [Fact] public void Extract_When_Args_Null_Returns_False() { From eed7b265d93c814262235d719257fe7d38da0754 Mon Sep 17 00:00:00 2001 From: gregsinclair42 Date: Wed, 26 Feb 2025 13:48:30 -0700 Subject: [PATCH 03/11] Fix typo --- .../Context/LambdaContextTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs index cbd3c661..fc8c62d9 100644 --- a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs +++ b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs @@ -57,7 +57,7 @@ public void Extract_WhenHasLambdaContextArgument_InitializesLambdaContextInfo() } [Fact] - public void Extract_Extract_When_LambdaContext_Is_Null_But_Not_FIrst_Parameter_Returns_False() + public void Extract_Extract_When_LambdaContext_Is_Null_But_Not_First_Parameter_Returns_False() { // Arrange ILambdaContext lambdaContext = null; From ae60b7b5d65bb482f8e9c51533491f270c87dee6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:01:29 +0000 Subject: [PATCH 04/11] chore(deps): bump codecov/codecov-action from 5.3.1 to 5.4.0 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.3.1 to 5.4.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3...0565863a31f2c772f9f0395002a31e3f06189574) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5a12869..bd738faa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: run: dotnet test ../examples/ --verbosity normal - name: Codecov - uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # 5.3.1 + uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # 5.4.0 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: false From 63ea4fec16d9795cce073877b28cd97ecda55d91 Mon Sep 17 00:00:00 2001 From: gregsinclair42 Date: Thu, 27 Feb 2025 09:00:45 -0700 Subject: [PATCH 05/11] Fix typo --- .../Context/LambdaContextTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs index fc8c62d9..31e980ba 100644 --- a/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs +++ b/libraries/tests/AWS.Lambda.Powertools.Logging.Tests/Context/LambdaContextTest.cs @@ -57,7 +57,7 @@ public void Extract_WhenHasLambdaContextArgument_InitializesLambdaContextInfo() } [Fact] - public void Extract_Extract_When_LambdaContext_Is_Null_But_Not_First_Parameter_Returns_False() + public void Extract_When_LambdaContext_Is_Null_But_Not_First_Parameter_Returns_False() { // Arrange ILambdaContext lambdaContext = null; From 5c4a021bce67713d0b735d76e54f651bac1c16a9 Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 19:16:41 +0000 Subject: [PATCH 06/11] remove trailing comma Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 8ddbf994..c5124a2f 100644 --- a/version.json +++ b/version.json @@ -3,7 +3,7 @@ "Logging": "1.6.4", "Metrics": "2.0.0", "Tracing": "1.6.1", - "Metrics.AspNetCore": "0.1.0", + "Metrics.AspNetCore": "0.1.0" }, "Utilities": { "Parameters": "1.3.0", From ddb7920fda5197b64d484d0e87fd048ba4097e7c Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:43:12 +0000 Subject: [PATCH 07/11] change to develop branch Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 86a2f2e8..aa80c843 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -3,7 +3,7 @@ name: Docs on: push: branches: - - main + - develop workflow_dispatch: {} permissions: From ada6d4dee206daa593922002918826d6310cd03d Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:46:16 +0000 Subject: [PATCH 08/11] Update build.yml Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bd738faa..ce0080e6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,11 +4,11 @@ on: push: paths: - "libraries/**" - branches: [develop, main] + branches: [develop] pull_request: paths: - "libraries/**" - branches: [develop, main] + branches: [develop] defaults: run: @@ -49,4 +49,4 @@ jobs: fail_ci_if_error: false name: codecov-lambda-powertools-dotnet verbose: true - directory: ./libraries/codecov \ No newline at end of file + directory: ./libraries/codecov From 94b662d343c92548984e91ba5e0949aa4e4ee917 Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:46:38 +0000 Subject: [PATCH 09/11] Update codeql-analysis.yml Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 62d35a40..d1d3e8c2 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -4,7 +4,7 @@ on: push: paths: - "libraries/**" - branches: [ "develop", main ] + branches: [ "develop" ] pull_request: paths: - "libraries/**" From 7309596a032bd2eab322d932e63a87c9b879beec Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:49:41 +0000 Subject: [PATCH 10/11] Update boring-cyborg.yml Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- .github/boring-cyborg.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml index e627b923..6a22b5bf 100644 --- a/.github/boring-cyborg.yml +++ b/.github/boring-cyborg.yml @@ -21,6 +21,9 @@ labelPRBasedOnFilePath: area/batch: - libraries/src/AWS.Lambda.Powertools.Batch/* - libraries/src/AWS.Lambda.Powertools.Batch/**/* + area/metrics-aspnetcore: + - libraries/src/AWS.Lambda.Powertools.Metrics.AspNetCore/* + - libraries/src/AWS.Lambda.Powertools.Metrics.AspNetCore/**/* documentation: - docs/* From ff2ea8570a0cb7d7ee70c6d1e9b5daaf39e17e35 Mon Sep 17 00:00:00 2001 From: Henrique Graca <999396+hjgraca@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:58:40 +0000 Subject: [PATCH 11/11] Update README.md Signed-off-by: Henrique Graca <999396+hjgraca@users.noreply.github.com> --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8695f325..d3ac8714 100644 --- a/README.md +++ b/README.md @@ -35,27 +35,31 @@ Powertools for AWS Lambda (.NET) provides three core utilities: The Powertools for AWS Lambda (.NET) utilities (.NET 6 and .NET 8) are available as NuGet packages. You can install the packages from [NuGet Gallery](https://www.nuget.org/packages?q=AWS+Lambda+Powertools*) or from Visual Studio editor by searching `AWS.Lambda.Powertools*` to see various utilities available. -* [AWS.Lambda.Powertools.Logging](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.Logging): +* [AWS.Lambda.Powertools.Logging](https://www.nuget.org/packages/AWS.Lambda.Powertools.Logging): `dotnet add package AWS.Lambda.Powertools.Logging` -* [AWS.Lambda.Powertools.Metrics](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.Metrics): +* [AWS.Lambda.Powertools.Metrics](https://www.nuget.org/packages/AWS.Lambda.Powertools.Metrics): `dotnet add package AWS.Lambda.Powertools.Metrics` -* [AWS.Lambda.Powertools.Tracing](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.Tracing): +* [AWS.Lambda.Powertools.Metrics.AspNetCore](https://www.nuget.org/packages/AWS.Lambda.Powertools.Metrics.AspNetCore): + + `dotnet add package AWS.Lambda.Powertools.Metrics.AspNetCore` + +* [AWS.Lambda.Powertools.Tracing](https://www.nuget.org/packages/AWS.Lambda.Powertools.Tracing): `dotnet add package AWS.Lambda.Powertools.Tracing` -* [AWS.Lambda.Powertools.Parameters](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.Parameters): +* [AWS.Lambda.Powertools.Parameters](https://www.nuget.org/packages/AWS.Lambda.Powertools.Parameters): `dotnet add package AWS.Lambda.Powertools.Parameters` -* [AWS.Lambda.Powertools.Idempotency](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.Idempotency): +* [AWS.Lambda.Powertools.Idempotency](https://www.nuget.org/packages/AWS.Lambda.Powertools.Idempotency): `dotnet add package AWS.Lambda.Powertools.Idempotency` -* [AWS.Lambda.Powertools.BatchProcessing](https://www.nuget.org/packages?q=AWS.Lambda.Powertools.BatchProcessing): +* [AWS.Lambda.Powertools.BatchProcessing](https://www.nuget.org/packages/AWS.Lambda.Powertools.BatchProcessing): `dotnet add package AWS.Lambda.Powertools.BatchProcessing`