datadog 2.34.0 → 2.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +75 -6
  3. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +2 -15
  4. data/ext/datadog_profiling_native_extension/stack_recorder.c +6 -11
  5. data/lib/datadog/ai_guard/configuration.rb +1 -0
  6. data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +53 -39
  7. data/lib/datadog/ai_guard/evaluation.rb +6 -1
  8. data/lib/datadog/ai_guard/ext.rb +12 -1
  9. data/lib/datadog/appsec/api_security/route_extractor.rb +3 -0
  10. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +9 -40
  11. data/lib/datadog/appsec/default_header_tags.rb +48 -0
  12. data/lib/datadog/core/configuration/settings.rb +10 -6
  13. data/lib/datadog/core/environment/process.rb +4 -2
  14. data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
  15. data/lib/datadog/profiling/collectors/thread_context.rb +0 -4
  16. data/lib/datadog/profiling/component.rb +3 -11
  17. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +3 -2
  18. data/lib/datadog/profiling/stack_recorder.rb +0 -4
  19. data/lib/datadog/symbol_database/extractor.rb +3 -3
  20. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -1
  21. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -1
  22. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -1
  23. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -1
  24. data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -1
  25. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +1 -0
  26. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +4 -1
  27. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +4 -1
  28. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -1
  29. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -1
  30. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -1
  31. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -1
  32. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -1
  33. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -1
  34. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -0
  35. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -0
  36. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -0
  37. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -0
  38. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -0
  39. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
  40. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
  41. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -0
  42. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +2 -2
  43. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +1 -0
  44. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -0
  45. data/lib/datadog/tracing/contrib/excon/middleware.rb +1 -0
  46. data/lib/datadog/tracing/contrib/ext.rb +3 -0
  47. data/lib/datadog/tracing/contrib/faraday/middleware.rb +1 -0
  48. data/lib/datadog/tracing/contrib/grape/endpoint.rb +3 -0
  49. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +1 -0
  50. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -0
  51. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -0
  52. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -0
  53. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -0
  54. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -0
  55. data/lib/datadog/tracing/contrib/http/instrumentation.rb +1 -0
  56. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +1 -0
  57. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +1 -0
  58. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -0
  59. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
  60. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +2 -0
  61. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +1 -0
  62. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -0
  63. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +2 -2
  64. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +1 -0
  65. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -0
  66. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +3 -0
  67. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +2 -2
  68. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -0
  69. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -0
  70. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +23 -0
  71. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -0
  72. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +2 -0
  73. data/lib/datadog/tracing/contrib/rails/runner.rb +2 -0
  74. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -2
  75. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +2 -0
  76. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -0
  77. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +1 -0
  78. data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
  79. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -1
  80. data/lib/datadog/tracing/contrib/sequel/database.rb +1 -0
  81. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -0
  82. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -0
  83. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +1 -0
  84. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
  85. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
  86. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
  87. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
  88. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
  89. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +3 -2
  90. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +1 -0
  91. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -0
  92. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -0
  93. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -0
  94. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +1 -0
  95. data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +1 -1
  96. data/lib/datadog/tracing/metadata/ext.rb +7 -0
  97. data/lib/datadog/tracing/tracer.rb +3 -0
  98. data/lib/datadog/tracing/transport/traces.rb +2 -2
  99. data/lib/datadog/version.rb +1 -1
  100. metadata +8 -9
@@ -34,8 +34,10 @@ module Datadog
34
34
 
35
35
  tags << "#{Environment::Ext::TAG_ENTRYPOINT_TYPE}:#{TagNormalizer.normalize(entrypoint_type, remove_digit_start_char: false)}"
36
36
 
37
- rails_name = TagNormalizer.normalize_process_value(@rails_application_name.to_s)
38
- tags << "#{Environment::Ext::TAG_RAILS_APPLICATION}:#{rails_name}" unless rails_name.empty?
37
+ if defined?(@rails_application_name)
38
+ rails_name = TagNormalizer.normalize_process_value(@rails_application_name.to_s)
39
+ tags << "#{Environment::Ext::TAG_RAILS_APPLICATION}:#{rails_name}" unless rails_name.empty?
40
+ end
39
41
 
40
42
  if defined?(@service_user_configured)
41
43
  if @service_user_configured
@@ -3,8 +3,8 @@
3
3
  module Datadog
4
4
  module Core
5
5
  module Utils
6
- # Common array-related utility functions.
7
- module Array
6
+ # Bring newer Enumerable methods to older Ruby versions.
7
+ module EnumerableCompat
8
8
  def self.filter_map(array, &block)
9
9
  if array.respond_to?(:filter_map)
10
10
  # DEV Supported since Ruby 2.7, saves an intermediate object creation
@@ -19,7 +19,6 @@ module Datadog
19
19
  max_frames:,
20
20
  tracer:,
21
21
  endpoint_collection_enabled:,
22
- timeline_enabled:,
23
22
  waiting_for_gvl_threshold_ns:,
24
23
  otel_context_enabled:,
25
24
  native_filenames_enabled:
@@ -31,7 +30,6 @@ module Datadog
31
30
  max_frames: max_frames,
32
31
  tracer_context_key: tracer_context_key,
33
32
  endpoint_collection_enabled: endpoint_collection_enabled,
34
- timeline_enabled: timeline_enabled,
35
33
  waiting_for_gvl_threshold_ns: waiting_for_gvl_threshold_ns,
36
34
  otel_context_enabled: otel_context_enabled,
37
35
  native_filenames_enabled: validate_native_filenames(native_filenames_enabled),
@@ -43,7 +41,6 @@ module Datadog
43
41
  max_frames: 400,
44
42
  tracer: nil,
45
43
  endpoint_collection_enabled: false,
46
- timeline_enabled: false,
47
44
  waiting_for_gvl_threshold_ns: 10_000_000,
48
45
  otel_context_enabled: false,
49
46
  native_filenames_enabled: true,
@@ -54,7 +51,6 @@ module Datadog
54
51
  max_frames: max_frames,
55
52
  tracer: tracer,
56
53
  endpoint_collection_enabled: endpoint_collection_enabled,
57
- timeline_enabled: timeline_enabled,
58
54
  waiting_for_gvl_threshold_ns: waiting_for_gvl_threshold_ns,
59
55
  otel_context_enabled: otel_context_enabled,
60
56
  native_filenames_enabled: native_filenames_enabled,
@@ -37,7 +37,6 @@ module Datadog
37
37
  # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
38
38
 
39
39
  no_signals_workaround_enabled = no_signals_workaround_enabled?(settings, logger)
40
- timeline_enabled = settings.profiling.advanced.timeline_enabled
41
40
  allocation_profiling_enabled = enable_allocation_profiling?(settings, logger)
42
41
  heap_sample_every = get_heap_sample_every(settings)
43
42
  heap_profiling_enabled = enable_heap_profiling?(settings, allocation_profiling_enabled, heap_sample_every, logger)
@@ -53,10 +52,9 @@ module Datadog
53
52
  heap_samples_enabled: heap_profiling_enabled,
54
53
  heap_size_enabled: heap_size_profiling_enabled,
55
54
  heap_sample_every: heap_sample_every,
56
- timeline_enabled: timeline_enabled,
57
55
  heap_clean_after_gc_enabled: settings.profiling.advanced.heap_clean_after_gc_enabled,
58
56
  )
59
- thread_context_collector = build_thread_context_collector(settings, recorder, optional_tracer, timeline_enabled)
57
+ thread_context_collector = build_thread_context_collector(settings, recorder, optional_tracer)
60
58
  worker = Datadog::Profiling::Collectors::CpuAndWallTimeWorker.new(
61
59
  gc_profiling_enabled: enable_gc_profiling?(settings, logger),
62
60
  no_signals_workaround_enabled: no_signals_workaround_enabled,
@@ -71,7 +69,6 @@ module Datadog
71
69
 
72
70
  internal_metadata = {
73
71
  no_signals_workaround_enabled: no_signals_workaround_enabled,
74
- timeline_enabled: timeline_enabled,
75
72
  heap_sample_every: heap_sample_every,
76
73
  }.freeze
77
74
 
@@ -99,13 +96,12 @@ module Datadog
99
96
  [nil, {profiling_enabled: false}]
100
97
  end
101
98
 
102
- private_class_method def self.build_thread_context_collector(settings, recorder, optional_tracer, timeline_enabled)
99
+ private_class_method def self.build_thread_context_collector(settings, recorder, optional_tracer)
103
100
  Datadog::Profiling::Collectors::ThreadContext.new(
104
101
  recorder: recorder,
105
102
  max_frames: settings.profiling.advanced.max_frames,
106
103
  tracer: optional_tracer,
107
104
  endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled,
108
- timeline_enabled: timeline_enabled,
109
105
  waiting_for_gvl_threshold_ns: settings.profiling.advanced.waiting_for_gvl_threshold_ns,
110
106
  otel_context_enabled: settings.profiling.advanced.preview_otel_context_enabled,
111
107
  native_filenames_enabled: settings.profiling.advanced.native_filenames_enabled,
@@ -469,11 +465,7 @@ module Datadog
469
465
  end
470
466
 
471
467
  private_class_method def self.enable_gvl_profiling?(settings, logger)
472
- return false if RUBY_VERSION < "3.2"
473
-
474
- # GVL profiling only makes sense in the context of timeline. We could emit a warning here, but not sure how
475
- # useful it is -- if a customer disables timeline, there's nowhere to look for GVL profiling anyway!
476
- settings.profiling.advanced.timeline_enabled && settings.profiling.advanced.gvl_enabled
468
+ RUBY_VERSION >= "3.2" && settings.profiling.advanced.gvl_enabled
477
469
  end
478
470
  end
479
471
  end
@@ -4,9 +4,10 @@ module Datadog
4
4
  module Profiling
5
5
  # Monkey patches needed for profiler features and compatibility
6
6
  module Ext
7
- # All Ruby versions as of this writing have bugs in the dir class implementation, causing issues such as
7
+ # Ruby versions before 3.4 have bugs in the `Dir` class implementation, causing issues such as
8
8
  # https://github.com/DataDog/dd-trace-rb/issues/3450 .
9
- # See also https://bugs.ruby-lang.org/issues/20586 for more details.
9
+ # This was fixed upstream in https://bugs.ruby-lang.org/issues/20586 but we use this monkey patch to work around
10
+ # the issue on legacy versions (it gets applied by `Datadog::Profiling::Component`).
10
11
  #
11
12
  # This monkey patch for the Ruby `Dir` class works around these bugs for affected Ruby versions by temporarily
12
13
  # blocking the profiler from interrupting system calls.
@@ -13,7 +13,6 @@ module Datadog
13
13
  heap_samples_enabled:,
14
14
  heap_size_enabled:,
15
15
  heap_sample_every:,
16
- timeline_enabled:,
17
16
  heap_clean_after_gc_enabled:
18
17
  )
19
18
  # This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
@@ -30,7 +29,6 @@ module Datadog
30
29
  heap_samples_enabled: heap_samples_enabled,
31
30
  heap_size_enabled: heap_size_enabled,
32
31
  heap_sample_every: heap_sample_every,
33
- timeline_enabled: timeline_enabled,
34
32
  heap_clean_after_gc_enabled: heap_clean_after_gc_enabled,
35
33
  )
36
34
  end
@@ -40,7 +38,6 @@ module Datadog
40
38
  heap_samples_enabled: false,
41
39
  heap_size_enabled: false,
42
40
  heap_sample_every: 1,
43
- timeline_enabled: false,
44
41
  heap_clean_after_gc_enabled: true,
45
42
  **options
46
43
  )
@@ -49,7 +46,6 @@ module Datadog
49
46
  heap_samples_enabled: heap_samples_enabled,
50
47
  heap_size_enabled: heap_size_enabled,
51
48
  heap_sample_every: heap_sample_every,
52
- timeline_enabled: timeline_enabled,
53
49
  heap_clean_after_gc_enabled: heap_clean_after_gc_enabled,
54
50
  **options,
55
51
  )
@@ -3,7 +3,7 @@
3
3
  require_relative 'scope'
4
4
  require_relative 'symbol'
5
5
  require_relative 'file_hash'
6
- require_relative '../core/utils/array'
6
+ require_relative '../core/utils/enumerable_compat'
7
7
 
8
8
  module Datadog
9
9
  module SymbolDatabase
@@ -593,7 +593,7 @@ module Datadog
593
593
 
594
594
  return [] if params.nil? || params.empty?
595
595
 
596
- Core::Utils::Array.filter_map(params) do |param_type, param_name|
596
+ Core::Utils::EnumerableCompat.filter_map(params) do |param_type, param_name|
597
597
  # Skip block parameters for MVP
598
598
  next if param_type == :block
599
599
 
@@ -810,7 +810,7 @@ module Datadog
810
810
  # @return [Scope] Scope object
811
811
  def convert_node_to_scope(node)
812
812
  # Build method scopes from collected method entries
813
- method_scopes = Core::Utils::Array.filter_map(node[:methods]) do |method_info|
813
+ method_scopes = Core::Utils::EnumerableCompat.filter_map(node[:methods]) do |method_info|
814
814
  build_instance_method_scope(node[:mod], method_info[:name], method_info[:method])
815
815
  end
816
816
 
@@ -36,7 +36,10 @@ module Datadog
36
36
 
37
37
  def on_start(span, _event, _id, payload)
38
38
  channel = payload[:broadcasting] # Channel has high cardinality
39
- span.service = configuration[:service_name] if configuration[:service_name]
39
+ if configuration[:service_name]
40
+ span.service = configuration[:service_name]
41
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
42
+ end
40
43
  span.type = span_type
41
44
 
42
45
  # Set analytics sample rate
@@ -37,7 +37,10 @@ module Datadog
37
37
  channel_class = payload[:channel_class]
38
38
  action = payload[:action]
39
39
 
40
- span.service = configuration[:service_name] if configuration[:service_name]
40
+ if configuration[:service_name]
41
+ span.service = configuration[:service_name]
42
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
43
+ end
41
44
  span.resource = "#{channel_class}##{action}"
42
45
  span.type = span_type
43
46
 
@@ -36,7 +36,10 @@ module Datadog
36
36
  def on_start(span, _event, _id, payload)
37
37
  channel_class = payload[:channel_class]
38
38
 
39
- span.service = configuration[:service_name] if configuration[:service_name]
39
+ if configuration[:service_name]
40
+ span.service = configuration[:service_name]
41
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
42
+ end
40
43
  span.resource = channel_class
41
44
  span.type = span_type
42
45
 
@@ -57,7 +57,10 @@ module Datadog
57
57
  configuration = Datadog.configuration.tracing[:action_cable]
58
58
 
59
59
  Tracing.trace("action_cable.#{hook}") do |span|
60
- span.service = configuration[:service_name] if configuration[:service_name]
60
+ if configuration[:service_name]
61
+ span.service = configuration[:service_name]
62
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
63
+ end
61
64
  span.resource = "#{channel.class}##{hook}"
62
65
  span.type = Tracing::Metadata::Ext::AppTypes::TYPE_WEB
63
66
 
@@ -31,7 +31,10 @@ module Datadog
31
31
  super
32
32
 
33
33
  span.type = span_type
34
- span.service = configuration[:service_name] if configuration[:service_name]
34
+ if configuration[:service_name]
35
+ span.service = configuration[:service_name]
36
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
37
+ end
35
38
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
36
39
 
37
40
  # Set analytics sample rate
@@ -42,6 +42,7 @@ module Datadog
42
42
 
43
43
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
44
44
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CONTROLLER)
45
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
45
46
  rescue => e
46
47
  Datadog.logger.error("#{e.class}: #{e.message}")
47
48
  Datadog::Core::Telemetry::Logger.report(e)
@@ -28,7 +28,10 @@ module Datadog
28
28
  end
29
29
 
30
30
  def on_start(span, _event, _id, payload)
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_TEMPLATE
33
36
 
34
37
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -28,7 +28,10 @@ module Datadog
28
28
  end
29
29
 
30
30
  def on_start(span, _event, _id, payload)
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_TEMPLATE
33
36
 
34
37
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_DISCARD)
34
37
 
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENQUEUE)
34
37
 
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENQUEUE_AT)
34
37
 
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENQUEUE_RETRY)
34
37
 
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_PERFORM)
34
37
 
@@ -28,7 +28,10 @@ module Datadog
28
28
 
29
29
  def on_start(span, event, _id, payload)
30
30
  span.name = span_name
31
- span.service = configuration[:service_name] if configuration[:service_name]
31
+ if configuration[:service_name]
32
+ span.service = configuration[:service_name]
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
34
+ end
32
35
  span.resource = payload[:job].class.name
33
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_RETRY_STOPPED)
34
37
 
@@ -42,6 +42,7 @@ module Datadog
42
42
 
43
43
  span.name = "#{adapter_name}.query"
44
44
  span.service = service_name
45
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
45
46
  span.resource = payload.fetch(:sql)
46
47
  span.type = Tracing::Metadata::Ext::SQL::TYPE
47
48
 
@@ -77,6 +77,7 @@ module Datadog
77
77
  mapping = MAPPING.fetch(event)
78
78
 
79
79
  span.service = configuration[:cache_service]
80
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
80
81
  span.resource = mapping[:resource]
81
82
 
82
83
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -51,6 +51,7 @@ module Datadog
51
51
  service: Datadog.configuration.tracing[:active_support][:cache_service],
52
52
  resource: action
53
53
  ) do |span|
54
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
54
55
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
55
56
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CACHE)
56
57
 
@@ -32,6 +32,7 @@ module Datadog
32
32
  # rubocop:disable Metrics/MethodLength
33
33
  def annotate!(span, context)
34
34
  span.service = configuration[:service_name]
35
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
35
36
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
36
37
  span.name = Ext::SPAN_COMMAND
37
38
  span.resource = context.safely(:resource)
@@ -22,6 +22,7 @@ module Datadog
22
22
  Tracing.trace(Ext::SPAN_COMMAND) do |span|
23
23
  span.resource = op.to_s.upcase
24
24
  span.service = datadog_configuration[:service_name]
25
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
25
26
  span.type = Ext::SPAN_TYPE_COMMAND
26
27
 
27
28
  if datadog_configuration[:peer_service]
@@ -21,6 +21,7 @@ module Datadog
21
21
  resource: job_name(job),
22
22
  on_error: configuration[:on_error]
23
23
  ) do |span|
24
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
24
25
  set_sample_rate(span)
25
26
 
26
27
  # Measure service stats
@@ -51,6 +52,7 @@ module Datadog
51
52
  service: configuration[:client_service_name],
52
53
  resource: job_name(job)
53
54
  ) do |span|
55
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
54
56
  set_sample_rate(span)
55
57
 
56
58
  # Measure service stats
@@ -11,6 +11,7 @@ module Datadog
11
11
  configuration = Datadog.configuration.tracing[:delayed_job]
12
12
 
13
13
  Datadog::Tracing.trace(Ext::SPAN_RESERVE_JOB, service: configuration[:service_name]) do |span|
14
+ span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
14
15
  span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
15
16
 
16
17
  span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
@@ -55,6 +55,7 @@ module Datadog
55
55
  service: service,
56
56
  on_error: on_error
57
57
  ) do |span|
58
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
58
59
  connection = transport.connections.first
59
60
  host = connection.host[:host] if connection
60
61
  port = connection.host[:port] if connection
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../utils/quantization/hash'
3
+ require_relative '../utils/quantization/hash_formatter'
4
4
 
5
5
  module Datadog
6
6
  module Tracing
@@ -40,7 +40,7 @@ module Datadog
40
40
  # Parse each statement and quantize them.
41
41
  statements.collect do |string|
42
42
  reserialize_json(string, options[:placeholder]) do |obj|
43
- Contrib::Utils::Quantization::Hash.format(obj, options)
43
+ Contrib::Utils::Quantization::HashFormatter.format(obj, options)
44
44
  end
45
45
  end.join("\n")
46
46
  end
@@ -133,6 +133,7 @@ module Datadog
133
133
 
134
134
  def datadog_tag_request
135
135
  span = @datadog_span
136
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
136
137
  method = Ext::NOT_APPLICABLE_METHOD
137
138
  method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
138
139
  span.resource = method
@@ -64,6 +64,7 @@ module Datadog
64
64
  )
65
65
  @datadog_multi_trace_digest = Tracing.active_trace.to_digest
66
66
 
67
+ @datadog_multi_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
67
68
  @datadog_multi_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
68
69
  @datadog_multi_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_MULTI_REQUEST)
69
70
 
@@ -119,6 +119,7 @@ module Datadog
119
119
  def annotate!(span, datum)
120
120
  span.resource = datum[:method].to_s.upcase
121
121
  span.service = service_name(datum[:host], @options)
122
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
122
123
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
123
124
 
124
125
  if @options[:peer_service]
@@ -62,6 +62,9 @@ module Datadog
62
62
 
63
63
  # Value of tag from which peer.service value was remapped from
64
64
  TAG_PEER_SERVICE_REMAP = '_dd.peer.service.remapped_from'
65
+
66
+ # Set equal to the global service when contrib span.service is overriden
67
+ TAG_BASE_SERVICE = Tracing::Metadata::Ext::TAG_BASE_SERVICE
65
68
  end
66
69
  end
67
70
  end
@@ -47,6 +47,7 @@ module Datadog
47
47
  def annotate!(span, env, options)
48
48
  span.resource = resource_name(env)
49
49
  span.service = service_name(env[:url].host, options)
50
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
50
51
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
51
52
 
52
53
  if options[:peer_service]
@@ -62,6 +62,7 @@ module Datadog
62
62
 
63
63
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
64
64
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RUN)
65
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
65
66
 
66
67
  if (grape_route = env['grape.routing_args']) && grape_route[:route_info]
67
68
  trace.set_tag(
@@ -162,6 +163,7 @@ module Datadog
162
163
 
163
164
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
164
165
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RENDER)
166
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
165
167
 
166
168
  Thread.current[KEY_RENDER] = true
167
169
  rescue => e
@@ -213,6 +215,7 @@ module Datadog
213
215
  begin
214
216
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
215
217
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RUN_FILTERS)
218
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
216
219
 
217
220
  # Set analytics sample rate
218
221
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
@@ -214,6 +214,7 @@ module Datadog
214
214
  resource: resource,
215
215
  service: @service_name
216
216
  ) do |span|
217
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
217
218
  if Contrib::Analytics.enabled?(@analytics_enabled)
218
219
  Contrib::Analytics.set_sample_rate(span, @analytics_sample_rate)
219
220
  end
@@ -29,6 +29,7 @@ module Datadog
29
29
  }
30
30
 
31
31
  Tracing.trace(Ext::SPAN_CLIENT, **options) do |span, trace|
32
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
32
33
  annotate!(trace, span, keywords, formatter)
33
34
 
34
35
  begin
@@ -33,6 +33,7 @@ module Datadog
33
33
  set_distributed_context!(metadata)
34
34
 
35
35
  Tracing.trace(Ext::SPAN_SERVICE, **options) do |span|
36
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
36
37
  annotate!(span, metadata, formatter)
37
38
 
38
39
  begin
@@ -22,6 +22,7 @@ module Datadog
22
22
  service: configuration[:service_name],
23
23
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
24
24
  ) do |span_op, trace_op|
25
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
25
26
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
26
27
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ACTION)
27
28
 
@@ -24,6 +24,7 @@ module Datadog
24
24
  resource: action_klass.to_s,
25
25
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
26
26
  ) do |span_op, _trace_op|
27
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
27
28
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
28
29
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_RENDER)
29
30
 
@@ -17,6 +17,7 @@ module Datadog
17
17
  service: configuration[:service_name],
18
18
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
19
19
  ) do |span_op, trace_op|
20
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
20
21
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
21
22
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ROUTING)
22
23
 
@@ -32,6 +32,7 @@ module Datadog
32
32
 
33
33
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
34
34
  span.service = service_name(host, request_options, client_config)
35
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
35
36
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
36
37
  span.resource = req.method
37
38
 
@@ -28,6 +28,7 @@ module Datadog
28
28
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
29
29
  begin
30
30
  span.service = service_name(host, request_options, client_config)
31
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
31
32
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
32
33
 
33
34
  if Tracing::Distributed::PropagationPolicy.enabled?(
@@ -28,6 +28,7 @@ module Datadog
28
28
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
29
29
  begin
30
30
  span.service = service_name(host, request_options, client_config)
31
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
31
32
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
32
33
 
33
34
  if Tracing::Distributed::PropagationPolicy.enabled?(
@@ -30,6 +30,7 @@ module Datadog
30
30
  end
31
31
 
32
32
  def on_start(span, _event, _id, payload)
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
33
34
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
34
35
  span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
35
36