Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Added support for Attributes using Source Generators #25

Merged
merged 9 commits into from
Sep 22, 2021
Merged

feat: Added support for Attributes using Source Generators #25

merged 9 commits into from
Sep 22, 2021

Conversation

t1agob
Copy link
Contributor

@t1agob t1agob commented Sep 16, 2021

Description of changes:

As discussed previously I have implemented the use of method Attributes on the function handler and used Source Generators to create code that introduces a Metrics object in the class context. With this implementation there is no need to create and destroy objects to flush EMF data.

Example

[Metrics]  --> BY ADDING THIS ATTRIBUTE YOU GET THE METRICS OBJECT BELOW 
public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest apigProxyEvent, ILambdaContext context)
{
    Metrics.AddDimension("Metric Type", "Aggregate");
    Metrics.AddDimension("Method Execution Metrics", "getCallingIP");
    Metrics.AddMetric("ElapsedExecutionTime", 1234, MetricUnit.MILLISECONDS);

    ...
}

Once the Metrics attribute is added to the code a partial function under the same namespace and class name are automatically generated in the background by using source generators. The fact that all of this is done during development and compilation time there is no performance impact, in fact it is as optimized as possible as only the code that is used gets added to the package.

Example

// This code was auto-generated
using AWS.Lambda.PowerTools.Metrics;                                                   
                                                                                       
namespace HelloWorld                                                                   
{                                                                                     
    public partial class Function                                                    
    {                  
        private static readonly Metrics Metrics = new Metrics();                                
    }                                                                                 
}   

Behavior changes

  • Developers need to update their main Lambda class into partial class
  • Developers need to update the .csproj file and mark the dependency on AWS.Lamda.PowerTools.Metrics of 'Analyzer' type

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@sliedig sliedig merged commit 408bc45 into aws-powertools:develop Sep 22, 2021
@t1agob t1agob changed the title Metrics: Added support for Attributes using Source Generators feat: Added support for Attributes using Source Generators Jan 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants