Skip to content

Commit 907821d

Browse files
leandrodamascenaCavalcante Damascena
and
Cavalcante Damascena
authored
fix(metrics): proxy service and namespace attrs to provider (#2910)
Co-authored-by: Cavalcante Damascena <[email protected]>
1 parent 88ece04 commit 907821d

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

aws_lambda_powertools/metrics/metrics.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,26 @@ def clear_default_dimensions(self) -> None:
181181
def clear_metrics(self) -> None:
182182
self.provider.clear_metrics()
183183

184+
# We now allow customers to bring their own instance
185+
# of the AmazonCloudWatchEMFProvider provider
186+
# So we need to define getter/setter for namespace and service properties
187+
# To access these attributes on the provider instance.
188+
@property
189+
def namespace(self):
190+
return self.provider.namespace
191+
192+
@namespace.setter
193+
def namespace(self, namespace):
194+
self.provider.namespace = namespace
195+
196+
@property
197+
def service(self):
198+
return self.provider.service
199+
200+
@service.setter
201+
def service(self, service):
202+
self.provider.service = service
203+
184204

185205
# Maintenance: until v3, we can't afford to break customers.
186206
# AmazonCloudWatchEMFProvider has the exact same functionality (non-singleton)

tests/functional/test_metrics.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,25 @@ def test_clear_default_dimensions(namespace):
10771077
assert not my_metrics.default_dimensions
10781078

10791079

1080+
def test_get_and_set_namespace_and_service_properties(namespace, service, metrics, capsys):
1081+
# GIVEN Metrics instance is initialized without namespace and service
1082+
my_metrics = Metrics()
1083+
1084+
# WHEN we set service and namespace before flushing the metric
1085+
@my_metrics.log_metrics
1086+
def lambda_handler(evt, ctx):
1087+
my_metrics.namespace = namespace
1088+
my_metrics.service = service
1089+
for metric in metrics:
1090+
my_metrics.add_metric(**metric)
1091+
1092+
lambda_handler({}, {})
1093+
invocation = capture_metrics_output(capsys)
1094+
1095+
assert service in json.dumps(invocation)
1096+
assert namespace in json.dumps(invocation)
1097+
1098+
10801099
def test_clear_default_dimensions_with_provider(namespace):
10811100
# GIVEN Metrics is initialized with provider and we persist a set of default dimensions
10821101
my_provider = AmazonCloudWatchEMFProvider(namespace=namespace)

0 commit comments

Comments
 (0)