Skip to content

Commit 7229bc4

Browse files
committed
disable when powertools dev
1 parent fd6c803 commit 7229bc4

File tree

5 files changed

+173
-11
lines changed

5 files changed

+173
-11
lines changed

Diff for: aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py

+17-9
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,23 @@ def __init__(
9090

9191
@staticmethod
9292
def is_metrics_disabled() -> bool:
93-
"""Checks if metrics have been disabled via POWERTOOLS_METRICS_DISABLED"""
94-
if constants.METRICS_DISABLED_ENV not in os.environ:
95-
return False
96-
97-
env_value = os.getenv(constants.METRICS_DISABLED_ENV)
98-
is_disabled = resolve_truthy_env_var_choice(env=env_value or "false")
99-
if is_disabled:
100-
logger.debug("Metrics have been disabled via env var POWERTOOLS_METRICS_DISABLED")
101-
return bool(is_disabled)
93+
"""Checks if metrics have been disabled via POWERTOOLS_METRICS_DISABLED or POWERTOOLS_DEV"""
94+
# First check POWERTOOLS_METRICS_DISABLED
95+
if constants.METRICS_DISABLED_ENV in os.environ:
96+
env_value = os.getenv(constants.METRICS_DISABLED_ENV)
97+
is_disabled = resolve_truthy_env_var_choice(env=env_value or "false")
98+
if is_disabled:
99+
logger.debug("Metrics have been disabled via env var POWERTOOLS_METRICS_DISABLED")
100+
return bool(is_disabled)
101+
102+
# Then check if POWERTOOLS_DEV is enabled
103+
dev_mode_value = os.getenv(constants.POWERTOOLS_DEV_ENV)
104+
dev_mode = resolve_truthy_env_var_choice(env=dev_mode_value or "false")
105+
if dev_mode:
106+
logger.debug("Metrics have been disabled via env var POWERTOOLS_DEV")
107+
return True
108+
109+
return False
102110

103111
def add_metric(
104112
self,

Diff for: aws_lambda_powertools/metrics/provider/datadog/datadog.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,15 @@ def __init__(
6969

7070
@staticmethod
7171
def is_metrics_disabled() -> bool:
72-
"""Checks if metrics have been disabled via POWERTOOLS_METRICS_DISABLED"""
72+
"""Checks if metrics have been disabled via POWERTOOLS_METRICS_DISABLED or POWERTOOLS_DEV"""
73+
# First check if POWERTOOLS_DEV is enabled
74+
dev_mode_value = os.getenv(constants.POWERTOOLS_DEV_ENV)
75+
dev_mode = resolve_truthy_env_var_choice(env=dev_mode_value or "false")
76+
if dev_mode:
77+
logger.debug("Metrics have been disabled via env var POWERTOOLS_DEV")
78+
return True
79+
80+
# Then check POWERTOOLS_METRICS_DISABLED
7381
if constants.METRICS_DISABLED_ENV not in os.environ:
7482
return False
7583

Diff for: docs/index.md

+1
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ When `POWERTOOLS_DEV` is set to a truthy value (`1`, `true`), it'll have the fol
432432
| __Logger__ | Increase JSON indentation to 4. This will ease local debugging when running functions locally under emulators or direct calls while not affecting unit tests. <br><br> However, Amazon CloudWatch Logs view will degrade as each new line is treated as a new message. |
433433
| __Event Handler__ | Enable full traceback errors in the response, indent request/responses, and CORS in dev mode (`*`). |
434434
| __Tracer__ | Future-proof safety to disables tracing operations in non-Lambda environments. This already happens automatically in the Tracer utility. |
435+
| __Metrics__ | Disables Powertools metrics emission by default. <br><br> However, this can be overridden by explicitly setting POWERTOOLS_METRICS_DISABLED=false, which takes precedence over the dev mode setting. |
435436

436437
## Debug mode
437438

Diff for: tests/functional/metrics/datadog/test_metrics_datadog.py

+79-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,6 @@ def test_namespace_env_var(monkeypatch):
336336
assert output[0]["m"] == f"{env_namespace}.item_sold"
337337

338338

339-
####################
340339
def test_metrics_disabled_with_env_var(monkeypatch):
341340
# GIVEN environment variable is set to disable metrics
342341
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "true")
@@ -412,3 +411,82 @@ def test_metrics_enabled_with_env_var_not_set(monkeypatch, capsys):
412411
metrics_output = json.loads(output)
413412

414413
assert "test.test_metric" in metrics_output["m"]
414+
415+
416+
def test_metrics_disabled_with_dev_mode_true(monkeypatch, capsys):
417+
# GIVEN dev mode is enabled
418+
monkeypatch.setenv("POWERTOOLS_DEV", "true")
419+
420+
# WHEN metrics is initialized
421+
metrics = DatadogMetrics(namespace="test")
422+
metrics.add_metric(name="test_metric", value=1)
423+
424+
# AND flushing metrics
425+
metrics_output = metrics.flush_metrics()
426+
427+
# THEN metrics output should be empty
428+
assert metrics_output is None
429+
430+
431+
def test_metrics_enabled_with_dev_mode_false(monkeypatch, capsys):
432+
# GIVEN dev mode is disabled
433+
monkeypatch.setenv("POWERTOOLS_DEV", "false")
434+
435+
# WHEN metrics is initialized
436+
metrics = DatadogMetrics(namespace="test")
437+
metrics.add_metric(name="test_metric", value=1)
438+
metrics.flush_metrics()
439+
440+
# THEN metrics should be written to stdout
441+
output = capsys.readouterr().out
442+
metrics_output = json.loads(output)
443+
assert metrics_output
444+
445+
446+
def test_metrics_disabled_dev_mode_overrides_metrics_disabled(monkeypatch, capsys):
447+
# GIVEN dev mode is enabled but metrics disabled is false
448+
monkeypatch.setenv("POWERTOOLS_DEV", "true")
449+
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "false")
450+
451+
# WHEN metrics is initialized
452+
metrics = DatadogMetrics(namespace="test")
453+
metrics.add_metric(name="test_metric", value=1)
454+
metrics.flush_metrics()
455+
456+
# THEN metrics should be written to stdout (POWERTOOLS_METRICS_DISABLED takes precedence)
457+
output = capsys.readouterr().out
458+
metrics_output = json.loads(output)
459+
assert metrics_output
460+
461+
462+
def test_metrics_enabled_with_both_false(monkeypatch, capsys):
463+
# GIVEN both dev mode and metrics disabled are false
464+
monkeypatch.setenv("POWERTOOLS_DEV", "false")
465+
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "false")
466+
467+
# WHEN metrics is initialized
468+
metrics = DatadogMetrics(namespace="test")
469+
metrics.add_metric(name="test_metric", value=1)
470+
metrics.flush_metrics()
471+
472+
# THEN metrics should be written to stdout
473+
output = capsys.readouterr().out
474+
metrics_output = json.loads(output)
475+
assert metrics_output
476+
477+
478+
def test_metrics_disabled_with_dev_mode_false_and_metrics_disabled_true(monkeypatch):
479+
# GIVEN dev mode is false but metrics disabled is true
480+
monkeypatch.setenv("POWERTOOLS_DEV", "false")
481+
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "true")
482+
483+
# WHEN metrics is initialized
484+
metrics = DatadogMetrics(namespace="test")
485+
486+
metrics.add_metric(name="test_metric", value=1)
487+
488+
# WHEN flushing metrics
489+
metrics_output = metrics.flush_metrics()
490+
491+
# THEN metrics output should be empty
492+
assert metrics_output is None

Diff for: tests/functional/metrics/required_dependencies/test_metrics_cloudwatch_emf.py

+67
Original file line numberDiff line numberDiff line change
@@ -1412,3 +1412,70 @@ def test_metrics_enabled_with_env_var_not_set(monkeypatch, capsys):
14121412
assert metrics_output["test_metric"] == [1.0]
14131413
assert metrics_output["_aws"]["CloudWatchMetrics"][0]["Namespace"] == "test"
14141414
assert metrics_output["_aws"]["CloudWatchMetrics"][0]["Metrics"][0]["Name"] == "test_metric"
1415+
1416+
1417+
def test_metrics_disabled_with_dev_mode(monkeypatch, namespace):
1418+
# GIVEN environment variable is set to disable metrics
1419+
monkeypatch.setenv("POWERTOOLS_DEV", "true")
1420+
1421+
# WHEN metrics is initialized and adding metrics
1422+
metrics = Metrics(namespace=namespace)
1423+
metrics.add_metric(name="test_metric", unit="Count", value=1)
1424+
1425+
# AND flushing metrics
1426+
metrics_output = metrics.flush_metrics()
1427+
1428+
# THEN metrics output should be empty
1429+
assert metrics_output is None
1430+
1431+
1432+
def test_metrics_enabled_with_dev_mode_false(monkeypatch, capsys):
1433+
# GIVEN environment variable is set to enable metrics
1434+
monkeypatch.setenv("POWERTOOLS_DEV", "false")
1435+
1436+
# WHEN metrics is initialized with namespace and metrics added
1437+
metrics = Metrics(namespace="test")
1438+
metrics.add_metric(name="test_metric", unit="Count", value=1)
1439+
metrics.flush_metrics()
1440+
1441+
# THEN metrics should be written to stdout
1442+
output = capsys.readouterr().out
1443+
metrics_output = json.loads(output)
1444+
1445+
assert "test_metric" in metrics_output
1446+
assert metrics_output["test_metric"] == [1.0]
1447+
assert metrics_output["_aws"]["CloudWatchMetrics"][0]["Namespace"] == "test"
1448+
assert metrics_output["_aws"]["CloudWatchMetrics"][0]["Metrics"][0]["Name"] == "test_metric"
1449+
1450+
1451+
def test_metrics_dev_mode_does_not_override_metrics_disabled(monkeypatch, capsys):
1452+
# GIVEN dev mode is enabled but metrics disabled is explicitly false
1453+
monkeypatch.setenv("POWERTOOLS_DEV", "true")
1454+
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "false")
1455+
1456+
# WHEN metrics is initialized
1457+
metrics = Metrics(namespace="test")
1458+
metrics.add_metric(name="test_metric", value=1, unit="Count")
1459+
metrics.flush_metrics()
1460+
1461+
# THEN metrics should be written to stdout (POWERTOOLS_METRICS_DISABLED takes precedence)
1462+
output = capsys.readouterr().out
1463+
metrics_output = json.loads(output)
1464+
assert metrics_output
1465+
1466+
1467+
def test_metrics_disabled_with_dev_mode_false_and_metrics_disabled_true(monkeypatch):
1468+
# GIVEN dev mode is false but metrics disabled is true
1469+
monkeypatch.setenv("POWERTOOLS_DEV", "false")
1470+
monkeypatch.setenv("POWERTOOLS_METRICS_DISABLED", "true")
1471+
1472+
# WHEN metrics is initialized
1473+
metrics = Metrics(namespace="test")
1474+
1475+
metrics.add_metric(name="test_metric", value=1, unit="Count")
1476+
1477+
# WHEN flushing metrics
1478+
metrics_output = metrics.flush_metrics()
1479+
1480+
# THEN metrics output should be empty
1481+
assert metrics_output is None

0 commit comments

Comments
 (0)