@@ -240,6 +240,46 @@ def lambda_handler(evt, ctx):
240240 assert "environment" in second_invocation
241241
242242
243+ def test_log_metrics_precedence_metrics_tags_over_default_tags (capsys ):
244+ # GIVEN DatadogMetrics is initialized and we persist a set of default tags
245+ my_metrics = DatadogMetrics (flush_to_log = True )
246+ default_tags = {"environment" : "test" , "log_group" : "/lambda/test" }
247+
248+ # WHEN we use log_metrics with default_tags to serialize
249+ # and create metrics with a tag that has the same name as one of the default_tags
250+ @my_metrics .log_metrics (default_tags = default_tags )
251+ def lambda_handler (evt , ctx ):
252+ my_metrics .add_metric (name = "item_sold" , value = 1 , environment = "metric_precedence" )
253+
254+ lambda_handler ({}, {})
255+ output = json .loads (capsys .readouterr ().out .strip ())
256+
257+ # THEN tag defined in add_metric must have preference over default_tags
258+ assert "environment:metric_precedence" in output ["t" ]
259+ assert "environment:test" not in output ["t" ]
260+
261+
262+ def test_log_metrics_merge_metrics_tags_and_default_tags (capsys ):
263+ # GIVEN DatadogMetrics is initialized and we persist a set of default tags
264+ my_metrics = DatadogMetrics (flush_to_log = True )
265+ default_tags = {"environment" : "test" , "log_group" : "/lambda/test" }
266+
267+ # WHEN we use log_metrics with default_tags to serialize
268+ # and create metrics with a tag that has the same name as one of the default_tags
269+ @my_metrics .log_metrics (default_tags = default_tags )
270+ def lambda_handler (evt , ctx ):
271+ my_metrics .add_metric (name = "item_sold" , value = 1 , product = "powertools" )
272+
273+ lambda_handler ({}, {})
274+ output = json .loads (capsys .readouterr ().out .strip ())
275+
276+ # THEN there should be serialized default_tags and metric tags
277+ output ["e" ] = ""
278+ assert output == json .loads (
279+ '{"m":"item_sold","v":1,"e":"","t":["environment:test","log_group:/lambda/test", "product:powertools"]}' ,
280+ )
281+
282+
243283def test_clear_default_tags ():
244284 # GIVEN DatadogMetrics is initialized and we persist a set of default tags
245285 my_metrics = DatadogMetrics ()
0 commit comments