Skip to content

feat(metrics): support to bring your own metrics provider #2194

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

Merged
merged 54 commits into from
Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b9f8cea
Use a different Metric class for different provider
roger-zhangg May 30, 2023
06c9c8e
fix static checking error
roger-zhangg May 30, 2023
10514f7
fix static checking error
roger-zhangg May 30, 2023
c9b018f
optimize docstring
roger-zhangg Jun 1, 2023
de7eb16
Merge branch 'awslabs:develop' into metrics
roger-zhangg Jun 5, 2023
efab535
Merge remote-tracking branch 'upstream/develop' into metrics
roger-zhangg Jun 6, 2023
5fd493a
Merge branch 'develop' into develop
roger-zhangg Jun 6, 2023
8dde509
Merge remote-tracking branch 'upstream/develop' into metrics
roger-zhangg Jun 12, 2023
58bc274
add alias CloudWatchEMF to original Metrics class
roger-zhangg Jun 12, 2023
4de8842
add alias CloudWatchEMF to original Metrics class
roger-zhangg Jun 12, 2023
ea4ec06
Merge remote-tracking branch 'origin/develop' into develop
roger-zhangg Jun 12, 2023
dafed9e
Merge branch 'develop' into develop
leandrodamascena Jun 13, 2023
fedb3a0
Move Metrics to Provider
roger-zhangg Jun 13, 2023
3bab2ae
Merge remote-tracking branch 'origin/develop' into develop
roger-zhangg Jun 13, 2023
169f02c
add sample document
roger-zhangg Jun 15, 2023
7bfd874
reformat code block
roger-zhangg Jun 15, 2023
f26e26d
add OTel provider draft for poc
roger-zhangg Jun 20, 2023
e015351
Merge branch 'develop' into develop
leandrodamascena Jun 27, 2023
5659cdd
rebasing from upstream
leandrodamascena Jun 27, 2023
1dab8d1
rebasing from upstream
leandrodamascena Jun 27, 2023
c203c3d
add test to metrics providers
roger-zhangg Jun 28, 2023
3045abc
merging from develop
leandrodamascena Jul 11, 2023
9cde8e3
docstring + code coverage
leandrodamascena Jul 11, 2023
5bdb2c2
python annotations + imports
leandrodamascena Jul 11, 2023
ab36099
changing the name to AmazonCloudWatchEMF
leandrodamascena Jul 12, 2023
4ee1b9e
Merge branch 'develop' into develop
leandrodamascena Jul 12, 2023
28531ac
Merge branch 'develop' into develop
leandrodamascena Jul 13, 2023
c223e65
Merge branch 'develop' into develop
leandrodamascena Jul 13, 2023
3673c4b
fix docstring
roger-zhangg Jul 13, 2023
93ba2bc
Merge remote-tracking branch 'origin/develop' into develop
roger-zhangg Jul 13, 2023
5c49b1e
add tests for datadog provider
roger-zhangg Jul 13, 2023
1540be7
add tests for datadog provider
roger-zhangg Jul 13, 2023
1f949aa
Merge branch 'develop' into develop
leandrodamascena Jul 19, 2023
190b112
Merge branch 'develop' into develop
leandrodamascena Jul 21, 2023
01972e5
migrate from ABC to protocol, support convert kwargs to tags, add test
roger-zhangg Jul 24, 2023
c31d41f
migrate from ABC to protocol, support convert kwargs to tags, add test
roger-zhangg Jul 24, 2023
3bebcad
migrate from ABC to protocol, support convert kwargs to tags, add test
roger-zhangg Jul 24, 2023
e7c1443
remove parent class, fix example
roger-zhangg Jul 25, 2023
7556782
Merge branch 'develop' into develop
leandrodamascena Jul 25, 2023
a904764
base: fix small problems
leandrodamascena Jul 27, 2023
58a25fb
refactoring: removing Datadog provider
leandrodamascena Jul 27, 2023
00e719d
Merge branch 'develop' into develop
leandrodamascena Jul 27, 2023
bdaa736
refactoring: importing from typing_extensions
leandrodamascena Jul 27, 2023
7ac42be
refactoring EMF provider
leandrodamascena Jul 27, 2023
294bd85
refactoring cloudwatchemf provider and cleaning code
leandrodamascena Jul 28, 2023
077d7e7
fix mypy error
leandrodamascena Jul 28, 2023
ae67adb
Merge remote-tracking branch 'upstream/develop' into roger-zhangg/dev…
leandrodamascena Jul 28, 2023
42517ed
fix mypy error
leandrodamascena Jul 28, 2023
28982a3
fix metric tests
leandrodamascena Jul 28, 2023
f798ab8
Merge branch 'develop' into develop
leandrodamascena Jul 28, 2023
7fe0641
Merge branch 'develop' into develop
leandrodamascena Jul 28, 2023
4592939
removing documentation
Aug 1, 2023
e8cfc81
fix documentation
Aug 1, 2023
92eda07
adding test
Aug 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
changing the name to AmazonCloudWatchEMF
  • Loading branch information
leandrodamascena committed Jul 12, 2023
commit ab360998b51ffcaefb3bbaa348d1dcfcf1f51fe2
10 changes: 8 additions & 2 deletions aws_lambda_powertools/metrics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@
SchemaValidationError,
)
from aws_lambda_powertools.metrics.metric import single_metric
from aws_lambda_powertools.metrics.provider.cloudwatch_emf import CloudWatchEMF, EphemeralMetrics, Metrics
from aws_lambda_powertools.metrics.provider.amazon_cloudwatch_emf import (
AmazonCloudWatchEMF,
EphemeralAmazonCloudWatchEMF,
EphemeralMetrics,
Metrics,
)

__all__ = [
"Metrics",
Expand All @@ -20,5 +25,6 @@
"MetricResolutionError",
"SchemaValidationError",
"MetricValueError",
"CloudWatchEMF",
"AmazonCloudWatchEMF",
"EphemeralAmazonCloudWatchEMF",
]
9 changes: 7 additions & 2 deletions aws_lambda_powertools/metrics/metrics.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# NOTE: keeps for compatibility
from aws_lambda_powertools.metrics.provider.cloudwatch_emf import CloudWatchEMF, EphemeralMetrics, Metrics
from aws_lambda_powertools.metrics.provider.amazon_cloudwatch_emf import (
AmazonCloudWatchEMF,
EphemeralAmazonCloudWatchEMF,
EphemeralMetrics,
Metrics,
)

__all__ = ["Metrics", "EphemeralMetrics", "CloudWatchEMF"]
__all__ = ["Metrics", "EphemeralMetrics", "AmazonCloudWatchEMF", "EphemeralAmazonCloudWatchEMF"]
9 changes: 6 additions & 3 deletions aws_lambda_powertools/metrics/provider/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from aws_lambda_powertools.metrics.provider.base import MetricsBase, MetricsProviderBase
from aws_lambda_powertools.metrics.provider.cloudwatch_emf import (
CloudWatchEMF,
from aws_lambda_powertools.metrics.provider.amazon_cloudwatch_emf import (
AmazonCloudWatchEMF,
EphemeralAmazonCloudWatchEMF,
EphemeralMetrics,
Metrics,
)
from aws_lambda_powertools.metrics.provider.base import MetricsBase, MetricsProviderBase
from aws_lambda_powertools.metrics.provider.datadog_provider_draft import (
DataDogMetrics,
DataDogProvider,
Expand All @@ -19,6 +20,8 @@
"DataDogMetrics",
"DataDogProvider",
"Metrics",
"AmazonCloudWatchEMF",
"EphemeralAmazonCloudWatchEMF",
"EphemeralMetrics",
"CloudWatchEMF",
"OTLPProvider",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def clear_metrics(self) -> None:


# add alias for original EMF format to make the provider more explicit
CloudWatchEMF = Metrics
AmazonCloudWatchEMF = Metrics


class EphemeralMetrics(MetricManager):
Expand All @@ -134,5 +134,49 @@ class EphemeralMetrics(MetricManager):
- Create the same metrics with different dimensions more than once
"""

_dimensions: Dict[str, str] = {}
_default_dimensions: Dict[str, Any] = {}

def __init__(self, service: str | None = None, namespace: str | None = None):
self.default_dimensions = self._default_dimensions
self.dimension_set = self._dimensions

self.dimension_set.update(**self._default_dimensions)
super().__init__(namespace=namespace, service=service)

def set_default_dimensions(self, **dimensions) -> None:
"""Persist dimensions across Lambda invocations

Parameters
----------
dimensions : Dict[str, Any], optional
metric dimensions as key=value

Example
-------
**Sets some default dimensions that will always be present across metrics and invocations**

from aws_lambda_powertools import Metrics

metrics = Metrics(namespace="ServerlessAirline", service="payment")
metrics.set_default_dimensions(environment="demo", another="one")

@metrics.log_metrics()
def lambda_handler():
return True
"""
for name, value in dimensions.items():
self.add_dimension(name, value)

self.default_dimensions.update(**dimensions)

def clear_default_dimensions(self) -> None:
self.default_dimensions.clear()

def clear_metrics(self) -> None:
super().clear_metrics()
# re-add default dimensions
self.set_default_dimensions(**self.default_dimensions)


EphemeralAmazonCloudWatchEMF = EphemeralMetrics
4 changes: 2 additions & 2 deletions tests/functional/test_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
MetricManager,
reset_cold_start_flag,
)
from aws_lambda_powertools.metrics.provider import CloudWatchEMF, MetricsBase, MetricsProviderBase
from aws_lambda_powertools.metrics.provider import AmazonCloudWatchEMF, MetricsBase, MetricsProviderBase


@pytest.fixture(scope="function", autouse=True)
Expand Down Expand Up @@ -1260,7 +1260,7 @@ def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None:


def test_cloudwatch_emf(namespace):
assert CloudWatchEMF == Metrics
assert AmazonCloudWatchEMF == Metrics


def test_metrics_provider_basic(capsys, metrics_provider, metric):
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.