@@ -337,6 +337,14 @@ class DistributedTracingSamplerSettings(Settings):
337337    pass 
338338
339339
340+ class  DistributedTracingSamplerFullGranularitySettings (Settings ):
341+     pass 
342+ 
343+ 
344+ class  DistributedTracingSamplerPartialGranularitySettings (Settings ):
345+     pass 
346+ 
347+ 
340348class  ServerlessModeSettings (Settings ):
341349    pass 
342350
@@ -507,6 +515,8 @@ class EventHarvestConfigHarvestLimitSettings(Settings):
507515_settings .debug  =  DebugSettings ()
508516_settings .distributed_tracing  =  DistributedTracingSettings ()
509517_settings .distributed_tracing .sampler  =  DistributedTracingSamplerSettings ()
518+ _settings .distributed_tracing .sampler .full_granularity  =  DistributedTracingSamplerFullGranularitySettings ()
519+ _settings .distributed_tracing .sampler .partial_granularity  =  DistributedTracingSamplerPartialGranularitySettings ()
510520_settings .error_collector  =  ErrorCollectorSettings ()
511521_settings .error_collector .attributes  =  ErrorCollectorAttributesSettings ()
512522_settings .event_harvest_config  =  EventHarvestConfigSettings ()
@@ -845,6 +855,27 @@ def default_otlp_host(host):
845855_settings .distributed_tracing .sampler .remote_parent_not_sampled  =  os .environ .get (
846856    "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_REMOTE_PARENT_NOT_SAMPLED" , "default" 
847857)
858+ _settings .distributed_tracing .sampler .full_granularity .enabled  =  _environ_as_bool (
859+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_ENABLED" , default = True 
860+ )
861+ _settings .distributed_tracing .sampler .full_granularity .remote_parent_sampled  =  os .environ .get (
862+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_REMOTE_PARENT_SAMPLED" , None 
863+ )
864+ _settings .distributed_tracing .sampler .full_granularity .remote_parent_not_sampled  =  os .environ .get (
865+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_REMOTE_PARENT_NOT_SAMPLED" , None 
866+ )
867+ _settings .distributed_tracing .sampler .partial_granularity .enabled  =  _environ_as_bool (
868+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_ENABLED" , default = False 
869+ )
870+ _settings .distributed_tracing .sampler .partial_granularity .type  =  os .environ .get (
871+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_TYPE" , "essential" 
872+ )
873+ _settings .distributed_tracing .sampler .partial_granularity .remote_parent_sampled  =  os .environ .get (
874+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_REMOTE_PARENT_SAMPLED" , "default" 
875+ )
876+ _settings .distributed_tracing .sampler .partial_granularity .remote_parent_not_sampled  =  os .environ .get (
877+     "NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_REMOTE_PARENT_NOT_SAMPLED" , "default" 
878+ )
848879_settings .distributed_tracing .exclude_newrelic_header  =  False 
849880_settings .span_events .enabled  =  _environ_as_bool ("NEW_RELIC_SPAN_EVENTS_ENABLED" , default = True )
850881_settings .event_harvest_config .harvest_limits .span_event_data  =  _environ_as_int (
@@ -1371,9 +1402,34 @@ def finalize_application_settings(server_side_config=None, settings=_settings):
13711402
13721403    application_settings .attribute_filter  =  AttributeFilter (flatten_settings (application_settings ))
13731404
1405+     simplify_distributed_tracing_sampler_granularity_settings (application_settings )
1406+ 
13741407    return  application_settings 
13751408
13761409
1410+ def  simplify_distributed_tracing_sampler_granularity_settings (settings ):
1411+     # Full granularity settings may appear under: 
1412+     # * `distributed_tracing.sampler` 
1413+     # * `distributed_tracing.sampler.full_granularity` 
1414+     # The `distributed_tracing.sampler.full_granularity` path takes precedence. 
1415+     # To simplify logic in the code that uses these settings, store the values that 
1416+     # should be used at the `distributed_tracing.sampler.full_granularity` path. 
1417+     if  not  settings .distributed_tracing .sampler .full_granularity .remote_parent_sampled :
1418+         settings .distributed_tracing .sampler .full_granularity .remote_parent_sampled  =  (
1419+             settings .distributed_tracing .sampler .remote_parent_sampled 
1420+         )
1421+     if  not  settings .distributed_tracing .sampler .full_granularity .remote_parent_not_sampled :
1422+         settings .distributed_tracing .sampler .full_granularity .remote_parent_not_sampled  =  (
1423+             settings .distributed_tracing .sampler .remote_parent_not_sampled 
1424+         )
1425+     # Partial granularity tracing is not available in infinite tracing mode. 
1426+     if  settings .infinite_tracing .enabled  and  settings .distributed_tracing .sampler .partial_granularity .enabled :
1427+         _logger .warning (
1428+             "Improper configuration. Infinite tracing cannot be enabled at the same time as partial granularity tracing. Setting distributed_tracing.sampler.partial_granularity.enabled=False." 
1429+         )
1430+         settings .distributed_tracing .sampler .partial_granularity .enabled  =  False 
1431+ 
1432+ 
13771433def  _remove_ignored_configs (server_settings ):
13781434    if  not  server_settings .get ("agent_config" ):
13791435        return  server_settings 
0 commit comments