@@ -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