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/* diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5a12869..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: @@ -43,10 +43,10 @@ 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 name: codecov-lambda-powertools-dotnet verbose: true - directory: ./libraries/codecov \ No newline at end of file + directory: ./libraries/codecov 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/**" 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: 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` 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; } /// 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..31e980ba 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_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() { 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",