Skip to content

Commit 91210e4

Browse files
committed
improv: test metadata with log_metrics
1 parent 06a7652 commit 91210e4

File tree

1 file changed

+43
-5
lines changed

1 file changed

+43
-5
lines changed

tests/functional/test_metrics.py

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,19 @@ def service() -> str:
6161
return "test_service"
6262

6363

64+
@pytest.fixture
65+
def metadata() -> Dict[str, str]:
66+
return {"key": "username", "value": "test"}
67+
68+
6469
@pytest.fixture
6570
def a_hundred_metrics(namespace=namespace) -> List[Dict[str, str]]:
6671
return [{"name": f"metric_{i}", "unit": "Count", "value": 1} for i in range(100)]
6772

6873

69-
def serialize_metrics(metrics: List[Dict], dimensions: List[Dict], namespace: str) -> Dict:
74+
def serialize_metrics(
75+
metrics: List[Dict], dimensions: List[Dict], namespace: str, metadatas: List[Dict] = None
76+
) -> Dict:
7077
""" Helper function to build EMF object from a list of metrics, dimensions """
7178
my_metrics = MetricManager(namespace=namespace)
7279
for dimension in dimensions:
@@ -75,15 +82,23 @@ def serialize_metrics(metrics: List[Dict], dimensions: List[Dict], namespace: st
7582
for metric in metrics:
7683
my_metrics.add_metric(**metric)
7784

85+
if metadatas is not None:
86+
for metadata in metadatas:
87+
my_metrics.add_metadata(**metadata)
88+
7889
if len(metrics) != 100:
7990
return my_metrics.serialize_metric_set()
8091

8192

82-
def serialize_single_metric(metric: Dict, dimension: Dict, namespace: str) -> Dict:
93+
def serialize_single_metric(metric: Dict, dimension: Dict, namespace: str, metadata: Dict = None) -> Dict:
8394
""" Helper function to build EMF object from a given metric, dimension and namespace """
8495
my_metrics = MetricManager(namespace=namespace)
8596
my_metrics.add_metric(**metric)
8697
my_metrics.add_dimension(**dimension)
98+
99+
if metadata is not None:
100+
my_metrics.add_metadata(**metadata)
101+
87102
return my_metrics.serialize_metric_set()
88103

89104

@@ -549,14 +564,37 @@ def test_add_metadata_non_string_dimension_keys(service, metric, namespace):
549564
assert my_metrics.metadata_set == expected_metadata
550565

551566

552-
def test_add_metadata(service, metric, namespace):
567+
def test_add_metadata(service, metric, namespace, metadata):
553568
# GIVEN Metrics is initialized
554569
my_metrics = Metrics(service=service, namespace=namespace)
555570
my_metrics.add_metric(**metric)
556571

557572
# WHEN we utilize add_metadata with non-string keys
558-
my_metrics.add_metadata(key="username", value="test")
573+
my_metrics.add_metadata(**metadata)
559574

560575
# THEN we should have no exceptions
561576
# and dimension values should be serialized as strings
562-
assert my_metrics.metadata_set == {"username": "test"}
577+
assert my_metrics.metadata_set == {metadata["key"]: metadata["value"]}
578+
579+
580+
def test_log_metrics_with_metadata(capsys, metric, dimension, namespace, service, metadata):
581+
# GIVEN Metrics is initialized
582+
my_metrics = Metrics(namespace=namespace)
583+
my_metrics.add_metric(**metric)
584+
my_metrics.add_dimension(**dimension)
585+
586+
# WHEN we utilize log_metrics to serialize
587+
# and add metadata
588+
@my_metrics.log_metrics
589+
def lambda_handler(evt, ctx):
590+
my_metrics.add_metadata(**metadata)
591+
pass
592+
593+
lambda_handler({}, {})
594+
595+
output = capture_metrics_output(capsys)
596+
expected = serialize_single_metric(metric=metric, dimension=dimension, namespace=namespace, metadata=metadata)
597+
598+
# THEN we should have no exceptions and metadata
599+
remove_timestamp(metrics=[output, expected])
600+
assert expected == output

0 commit comments

Comments
 (0)