@@ -164,7 +164,7 @@ def setUp(self):
164164 self .env_patch = patch .dict (
165165 "os.environ" ,
166166 {
167- "OTEL_PYTHON_FLASK_EXCLUDED_URLS" : "http://localhost/env_excluded_arg/123,env_excluded_noarg" ,
167+ "OTEL_PYTHON_FLASK_EXCLUDED_URLS" : "http://localhost/env_excluded_arg/123,env_excluded_noarg,env_excluded_arg/789 " ,
168168 OTEL_SEMCONV_STABILITY_OPT_IN : sem_conv_mode ,
169169 },
170170 )
@@ -523,8 +523,7 @@ def test_flask_metrics(self):
523523 attr ,
524524 _recommended_metrics_attrs_old [metric .name ],
525525 )
526- self .assertTrue (number_data_point_seen )
527- self .assertFalse (histogram_data_point_seen )
526+ self .assertTrue (number_data_point_seen and histogram_data_point_seen )
528527
529528 def test_flask_metrics_new_semconv (self ):
530529 start = default_timer ()
@@ -562,8 +561,7 @@ def test_flask_metrics_new_semconv(self):
562561 attr ,
563562 _recommended_metrics_attrs_new [metric .name ],
564563 )
565- self .assertTrue (number_data_point_seen )
566- self .assertFalse (histogram_data_point_seen )
564+ self .assertTrue (number_data_point_seen and histogram_data_point_seen )
567565
568566 def test_flask_metric_values (self ):
569567 start = default_timer ()
@@ -738,6 +736,79 @@ def test_metric_uninstrument(self):
738736 if isinstance (point , HistogramDataPoint ):
739737 self .assertEqual (point .count , 1 )
740738
739+ def test_flask_metrics_excluded_urls (self ):
740+ start = default_timer ()
741+ self .client .get ("/env_excluded_arg/123" )
742+ self .client .get ("/env_excluded_noarg" )
743+ self .client .get ("/hello/756" )
744+ duration = max (round ((default_timer () - start ) * 1000 ), 0 )
745+ metrics_list = self .memory_metrics_reader .get_metrics_data ()
746+ number_data_point_seen = False
747+ histogram_data_point_seen = False
748+ self .assertTrue (len (metrics_list .resource_metrics ) != 0 )
749+ for resource_metric in metrics_list .resource_metrics :
750+ self .assertTrue (len (resource_metric .scope_metrics ) != 0 )
751+ for scope_metric in resource_metric .scope_metrics :
752+ self .assertTrue (len (scope_metric .metrics ) != 0 )
753+ for metric in scope_metric .metrics :
754+ self .assertIn (metric .name , _expected_metric_names_old )
755+ data_points = list (metric .data .data_points )
756+ self .assertEqual (len (data_points ), 1 )
757+ for point in data_points :
758+ if isinstance (point , HistogramDataPoint ):
759+ self .assertEqual (point .count , 1 )
760+ self .assertAlmostEqual (
761+ duration , point .sum , delta = 10
762+ )
763+ histogram_data_point_seen = True
764+ if isinstance (point , NumberDataPoint ):
765+ number_data_point_seen = True
766+ for attr in point .attributes :
767+ self .assertIn (
768+ attr ,
769+ _recommended_metrics_attrs_old [metric .name ],
770+ )
771+ self .assertTrue (number_data_point_seen and histogram_data_point_seen )
772+
773+ def test_flask_metrics_new_semconv_excluded_urls (self ):
774+ start = default_timer ()
775+ self .client .get ("/env_excluded_arg/123" )
776+ self .client .get ("/env_excluded_noarg" )
777+ self .client .get ("/env_excluded_arg/789" )
778+ duration_s = max (default_timer () - start , 0 )
779+ metrics_list = self .memory_metrics_reader .get_metrics_data ()
780+ number_data_point_seen = False
781+ histogram_data_point_seen = False
782+ self .assertTrue (len (metrics_list .resource_metrics ) != 0 )
783+ for resource_metric in metrics_list .resource_metrics :
784+ self .assertTrue (len (resource_metric .scope_metrics ) != 0 )
785+ for scope_metric in resource_metric .scope_metrics :
786+ self .assertTrue (len (scope_metric .metrics ) != 0 )
787+ for metric in scope_metric .metrics :
788+ self .assertIn (metric .name , _expected_metric_names_new )
789+ data_points = list (metric .data .data_points )
790+ self .assertEqual (len (data_points ), 1 )
791+ for point in data_points :
792+ if isinstance (point , HistogramDataPoint ):
793+ self .assertEqual (point .count , 0 )
794+ self .assertAlmostEqual (
795+ duration_s , point .sum , places = 1
796+ )
797+ self .assertEqual (
798+ point .explicit_bounds ,
799+ HTTP_DURATION_HISTOGRAM_BUCKETS_NEW ,
800+ )
801+ histogram_data_point_seen = True
802+ if isinstance (point , NumberDataPoint ):
803+ number_data_point_seen = True
804+ for attr in point .attributes :
805+ self .assertIn (
806+ attr ,
807+ _recommended_metrics_attrs_new [metric .name ],
808+ )
809+ self .assertTrue (number_data_point_seen )
810+ self .assertFalse (histogram_data_point_seen )
811+
741812
742813class TestProgrammaticHooks (InstrumentationTest , WsgiTestBase ):
743814 def setUp (self ):
0 commit comments