@@ -61,12 +61,19 @@ def service() -> str:
61
61
return "test_service"
62
62
63
63
64
+ @pytest .fixture
65
+ def metadata () -> Dict [str , str ]:
66
+ return {"key" : "username" , "value" : "test" }
67
+
68
+
64
69
@pytest .fixture
65
70
def a_hundred_metrics (namespace = namespace ) -> List [Dict [str , str ]]:
66
71
return [{"name" : f"metric_{ i } " , "unit" : "Count" , "value" : 1 } for i in range (100 )]
67
72
68
73
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 :
70
77
""" Helper function to build EMF object from a list of metrics, dimensions """
71
78
my_metrics = MetricManager (namespace = namespace )
72
79
for dimension in dimensions :
@@ -75,15 +82,23 @@ def serialize_metrics(metrics: List[Dict], dimensions: List[Dict], namespace: st
75
82
for metric in metrics :
76
83
my_metrics .add_metric (** metric )
77
84
85
+ if metadatas is not None :
86
+ for metadata in metadatas :
87
+ my_metrics .add_metadata (** metadata )
88
+
78
89
if len (metrics ) != 100 :
79
90
return my_metrics .serialize_metric_set ()
80
91
81
92
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 :
83
94
""" Helper function to build EMF object from a given metric, dimension and namespace """
84
95
my_metrics = MetricManager (namespace = namespace )
85
96
my_metrics .add_metric (** metric )
86
97
my_metrics .add_dimension (** dimension )
98
+
99
+ if metadata is not None :
100
+ my_metrics .add_metadata (** metadata )
101
+
87
102
return my_metrics .serialize_metric_set ()
88
103
89
104
@@ -549,14 +564,37 @@ def test_add_metadata_non_string_dimension_keys(service, metric, namespace):
549
564
assert my_metrics .metadata_set == expected_metadata
550
565
551
566
552
- def test_add_metadata (service , metric , namespace ):
567
+ def test_add_metadata (service , metric , namespace , metadata ):
553
568
# GIVEN Metrics is initialized
554
569
my_metrics = Metrics (service = service , namespace = namespace )
555
570
my_metrics .add_metric (** metric )
556
571
557
572
# WHEN we utilize add_metadata with non-string keys
558
- my_metrics .add_metadata (key = "username" , value = "test" )
573
+ my_metrics .add_metadata (** metadata )
559
574
560
575
# THEN we should have no exceptions
561
576
# 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