@@ -1329,3 +1329,86 @@ def lambda_handler(evt, ctx):
1329
1329
"This metric doesn't meet the requirements and will be skipped by Amazon CloudWatch. "
1330
1330
"Ensure the timestamp is within 14 days past or 2 hours future."
1331
1331
)
1332
+
1333
+
1334
+ def test_metrics_disabled_with_env_var (monkeypatch ):
1335
+ # GIVEN environment variable is set to disable metrics
1336
+ monkeypatch .setenv ("POWERTOOLS_METRICS_DISABLED" , "true" )
1337
+
1338
+ # WHEN metrics is initialized and adding metrics
1339
+ metrics = Metrics ()
1340
+ metrics .add_metric (name = "test_metric" , unit = "Count" , value = 1 )
1341
+
1342
+ # WHEN flushing metrics
1343
+ metrics_output = metrics .flush_metrics ()
1344
+
1345
+ # THEN metrics output should be empty
1346
+ assert metrics_output is None
1347
+
1348
+
1349
+ def test_metrics_disabled_persists_after_flush (monkeypatch ):
1350
+ # GIVEN environment variable is set to disable metrics
1351
+ monkeypatch .setenv ("POWERTOOLS_METRICS_DISABLED" , "true" )
1352
+ metrics = Metrics ()
1353
+
1354
+ # WHEN multiple operations are performed with flush in between
1355
+ metrics .add_metric (name = "metric1" , unit = "Count" , value = 1 )
1356
+ first_flush = metrics .flush_metrics ()
1357
+
1358
+ metrics .add_metric (name = "metric2" , unit = "Count" , value = 2 )
1359
+ second_flush = metrics .flush_metrics ()
1360
+
1361
+ # THEN all flush operations should return None
1362
+ assert first_flush is None
1363
+ assert second_flush is None
1364
+
1365
+
1366
+ def test_metrics_disabled_with_namespace_and_service (monkeypatch ):
1367
+ # GIVEN environment variable is set to disable metrics
1368
+ monkeypatch .setenv ("POWERTOOLS_METRICS_DISABLED" , "true" )
1369
+
1370
+ # WHEN metrics is initialized with namespace and service
1371
+ metrics = Metrics (namespace = "test_namespace" , service = "test_service" )
1372
+ metrics .add_metric (name = "test_metric" , unit = "Count" , value = 1 )
1373
+ metrics_output = metrics .flush_metrics ()
1374
+
1375
+ # THEN metrics should still be disabled
1376
+ assert metrics_output is None
1377
+
1378
+
1379
+ def test_metrics_enabled_with_env_var_false (monkeypatch , capsys ):
1380
+ # GIVEN environment variable is set to enable metrics
1381
+ monkeypatch .setenv ("POWERTOOLS_METRICS_DISABLED" , "false" )
1382
+
1383
+ # WHEN metrics is initialized with namespace and metrics added
1384
+ metrics = Metrics (namespace = "test" )
1385
+ metrics .add_metric (name = "test_metric" , unit = "Count" , value = 1 )
1386
+ metrics .flush_metrics ()
1387
+
1388
+ # THEN metrics should be written to stdout
1389
+ output = capsys .readouterr ().out
1390
+ metrics_output = json .loads (output )
1391
+
1392
+ assert "test_metric" in metrics_output
1393
+ assert metrics_output ["test_metric" ] == [1.0 ]
1394
+ assert metrics_output ["_aws" ]["CloudWatchMetrics" ][0 ]["Namespace" ] == "test"
1395
+ assert metrics_output ["_aws" ]["CloudWatchMetrics" ][0 ]["Metrics" ][0 ]["Name" ] == "test_metric"
1396
+
1397
+
1398
+ def test_metrics_enabled_with_env_var_not_set (monkeypatch , capsys ):
1399
+ # GIVEN environment variable is not set
1400
+ monkeypatch .delenv ("POWERTOOLS_METRICS_DISABLED" , raising = False )
1401
+
1402
+ # WHEN metrics is initialized with namespace and metrics added
1403
+ metrics = Metrics (namespace = "test" )
1404
+ metrics .add_metric (name = "test_metric" , unit = "Count" , value = 1 )
1405
+ metrics .flush_metrics ()
1406
+
1407
+ # THEN metrics should be written to stdout
1408
+ output = capsys .readouterr ().out
1409
+ metrics_output = json .loads (output )
1410
+
1411
+ assert "test_metric" in metrics_output
1412
+ assert metrics_output ["test_metric" ] == [1.0 ]
1413
+ assert metrics_output ["_aws" ]["CloudWatchMetrics" ][0 ]["Namespace" ] == "test"
1414
+ assert metrics_output ["_aws" ]["CloudWatchMetrics" ][0 ]["Metrics" ][0 ]["Name" ] == "test_metric"
0 commit comments