21
21
from aws_lambda_powertools .metrics .provider .cloudwatch_emf .constants import MAX_DIMENSIONS , MAX_METRICS
22
22
from aws_lambda_powertools .metrics .provider .cloudwatch_emf .metric_properties import MetricResolution , MetricUnit
23
23
from aws_lambda_powertools .shared import constants
24
- from aws_lambda_powertools .shared .functions import resolve_env_var_choice
24
+ from aws_lambda_powertools .shared .functions import resolve_env_var_choice , resolve_truthy_env_var_choice
25
25
from aws_lambda_powertools .warnings import PowertoolsUserWarning
26
26
27
27
if TYPE_CHECKING :
@@ -77,6 +77,8 @@ def __init__(
77
77
self .default_dimensions = default_dimensions or {}
78
78
self .namespace = resolve_env_var_choice (choice = namespace , env = os .getenv (constants .METRICS_NAMESPACE_ENV ))
79
79
self .service = resolve_env_var_choice (choice = service , env = os .getenv (constants .SERVICE_NAME_ENV ))
80
+ self .metrics_disabled = self .is_metrics_disabled ()
81
+
80
82
self .metadata_set = metadata_set if metadata_set is not None else {}
81
83
self .timestamp : int | None = None
82
84
@@ -86,6 +88,14 @@ def __init__(
86
88
87
89
self .dimension_set .update (** self .default_dimensions )
88
90
91
+ @staticmethod
92
+ def is_metrics_disabled () -> bool :
93
+ """Checks if metrics have been disabled via POWERTOOLS_METRICS_DISABLE"""
94
+ is_disabled = resolve_truthy_env_var_choice (env = os .getenv (constants .METRICS_DISABLED_ENV , "false" ))
95
+ if is_disabled :
96
+ logger .debug ("Metrics have been disabled via env var POWERTOOLS_METRICS_DISABLED" )
97
+ return is_disabled
98
+
89
99
def add_metric (
90
100
self ,
91
101
name : str ,
@@ -127,6 +137,8 @@ def add_metric(
127
137
MetricResolutionError
128
138
When metric resolution is not supported by CloudWatch
129
139
"""
140
+ if self .metrics_disabled :
141
+ return
130
142
if not isinstance (value , numbers .Number ):
131
143
raise MetricValueError (f"{ value } is not a valid number" )
132
144
@@ -268,6 +280,8 @@ def add_dimension(self, name: str, value: str) -> None:
268
280
value : str
269
281
Dimension value
270
282
"""
283
+ if self .metrics_disabled :
284
+ return
271
285
logger .debug (f"Adding dimension: { name } :{ value } " )
272
286
if len (self .dimension_set ) == MAX_DIMENSIONS :
273
287
raise SchemaValidationError (
@@ -316,6 +330,8 @@ def add_metadata(self, key: str, value: Any) -> None:
316
330
value : any
317
331
Metadata value
318
332
"""
333
+ if self .metrics_disabled :
334
+ return
319
335
logger .debug (f"Adding metadata: { key } :{ value } " )
320
336
321
337
# Cast key to str according to EMF spec
@@ -368,6 +384,8 @@ def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None:
368
384
raise_on_empty_metrics : bool, optional
369
385
raise exception if no metrics are emitted, by default False
370
386
"""
387
+ if self .metrics_disabled :
388
+ return
371
389
if not raise_on_empty_metrics and not self .metric_set :
372
390
warnings .warn (
373
391
"No application metrics to publish. The cold-start metric may be published if enabled. "
0 commit comments