datadog 2.31.0 → 2.32.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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +17 -7
  3. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +11 -4
  4. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +6 -0
  5. data/ext/datadog_profiling_native_extension/extconf.rb +5 -4
  6. data/ext/datadog_profiling_native_extension/http_transport.c +10 -5
  7. data/ext/libdatadog_api/di.c +48 -0
  8. data/ext/libdatadog_api/extconf.rb +7 -4
  9. data/ext/libdatadog_extconf_helpers.rb +37 -0
  10. data/lib/datadog/ai_guard/configuration.rb +105 -2
  11. data/lib/datadog/ai_guard/evaluation.rb +1 -0
  12. data/lib/datadog/ai_guard/ext.rb +1 -0
  13. data/lib/datadog/appsec/autoload.rb +1 -1
  14. data/lib/datadog/appsec/component.rb +1 -1
  15. data/lib/datadog/appsec/configuration.rb +414 -1
  16. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
  17. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
  18. data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
  19. data/lib/datadog/appsec/metrics/telemetry.rb +13 -1
  20. data/lib/datadog/appsec/security_engine/runner.rb +1 -1
  21. data/lib/datadog/appsec/trace_keeper.rb +18 -6
  22. data/lib/datadog/appsec/utils/http/url_encoded.rb +2 -2
  23. data/lib/datadog/core/configuration/components.rb +1 -1
  24. data/lib/datadog/core/configuration/settings.rb +3 -0
  25. data/lib/datadog/core/configuration/supported_configurations.rb +2 -0
  26. data/lib/datadog/core/configuration.rb +1 -1
  27. data/lib/datadog/core/contrib/rails/utils.rb +1 -1
  28. data/lib/datadog/core/crashtracking/component.rb +3 -3
  29. data/lib/datadog/core/diagnostics/environment_logger.rb +3 -1
  30. data/lib/datadog/core/environment/container.rb +2 -2
  31. data/lib/datadog/core/feature_flags.rb +1 -1
  32. data/lib/datadog/core/metrics/client.rb +5 -5
  33. data/lib/datadog/core/remote/client.rb +1 -1
  34. data/lib/datadog/core/remote/component.rb +2 -2
  35. data/lib/datadog/core/runtime/metrics.rb +1 -1
  36. data/lib/datadog/core/telemetry/emitter.rb +1 -1
  37. data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
  38. data/lib/datadog/core/transport/http.rb +2 -0
  39. data/lib/datadog/core/utils.rb +1 -1
  40. data/lib/datadog/core/workers/async.rb +1 -1
  41. data/lib/datadog/core.rb +1 -1
  42. data/lib/datadog/data_streams/configuration.rb +40 -1
  43. data/lib/datadog/data_streams/pathway_context.rb +1 -1
  44. data/lib/datadog/data_streams/processor.rb +1 -1
  45. data/lib/datadog/data_streams.rb +1 -1
  46. data/lib/datadog/di/base.rb +8 -5
  47. data/lib/datadog/di/code_tracker.rb +179 -1
  48. data/lib/datadog/di/component.rb +1 -1
  49. data/lib/datadog/di/configuration.rb +235 -2
  50. data/lib/datadog/di/instrumenter.rb +46 -26
  51. data/lib/datadog/di/probe_builder.rb +1 -1
  52. data/lib/datadog/di/probe_file_loader.rb +2 -2
  53. data/lib/datadog/di/probe_manager.rb +6 -6
  54. data/lib/datadog/di/probe_notification_builder.rb +1 -1
  55. data/lib/datadog/di/probe_notifier_worker.rb +2 -2
  56. data/lib/datadog/di/remote.rb +6 -6
  57. data/lib/datadog/di/serializer.rb +1 -1
  58. data/lib/datadog/di/transport/input.rb +3 -3
  59. data/lib/datadog/error_tracking/configuration.rb +55 -2
  60. data/lib/datadog/kit/enable_core_dumps.rb +1 -1
  61. data/lib/datadog/open_feature/component.rb +18 -1
  62. data/lib/datadog/open_feature/evaluation_engine.rb +3 -3
  63. data/lib/datadog/open_feature/exposures/reporter.rb +1 -1
  64. data/lib/datadog/open_feature/exposures/worker.rb +1 -1
  65. data/lib/datadog/open_feature/hooks/flag_eval_hook.rb +49 -0
  66. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
  67. data/lib/datadog/open_feature/provider.rb +19 -1
  68. data/lib/datadog/open_feature/remote.rb +1 -1
  69. data/lib/datadog/open_feature/transport.rb +1 -1
  70. data/lib/datadog/opentelemetry/metrics.rb +3 -3
  71. data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
  72. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +1 -1
  73. data/lib/datadog/profiling/collectors/code_provenance.rb +35 -9
  74. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +31 -2
  75. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +8 -2
  76. data/lib/datadog/profiling/collectors/info.rb +16 -3
  77. data/lib/datadog/profiling/component.rb +3 -5
  78. data/lib/datadog/profiling/exporter.rb +37 -12
  79. data/lib/datadog/profiling/ext.rb +0 -2
  80. data/lib/datadog/profiling/flush.rb +21 -12
  81. data/lib/datadog/profiling/http_transport.rb +12 -1
  82. data/lib/datadog/profiling/load_native_extension.rb +1 -1
  83. data/lib/datadog/profiling/profiler.rb +13 -1
  84. data/lib/datadog/profiling/scheduler.rb +2 -2
  85. data/lib/datadog/profiling/tasks/exec.rb +8 -3
  86. data/lib/datadog/profiling/tasks/help.rb +1 -0
  87. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  88. data/lib/datadog/single_step_instrument.rb +1 -1
  89. data/lib/datadog/symbol_database/configuration.rb +65 -0
  90. data/lib/datadog/symbol_database/extractor.rb +915 -0
  91. data/lib/datadog/symbol_database/file_hash.rb +46 -0
  92. data/lib/datadog/symbol_database/logger.rb +43 -0
  93. data/lib/datadog/symbol_database/scope.rb +98 -0
  94. data/lib/datadog/symbol_database/service_version.rb +57 -0
  95. data/lib/datadog/symbol_database/symbol.rb +66 -0
  96. data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
  97. data/lib/datadog/symbol_database/transport/http.rb +45 -0
  98. data/lib/datadog/symbol_database/transport.rb +54 -0
  99. data/lib/datadog/symbol_database/uploader.rb +166 -0
  100. data/lib/datadog/symbol_database.rb +49 -0
  101. data/lib/datadog/tracing/buffer.rb +3 -3
  102. data/lib/datadog/tracing/configuration/settings.rb +1 -1
  103. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +5 -3
  104. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  105. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  106. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  107. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  108. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  109. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  110. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  111. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  112. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -1
  113. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
  114. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  115. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -1
  116. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  117. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -1
  118. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
  119. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
  120. data/lib/datadog/tracing/contrib/component.rb +1 -1
  121. data/lib/datadog/tracing/contrib/configuration/resolver.rb +7 -4
  122. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
  123. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -1
  124. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  125. data/lib/datadog/tracing/contrib/extensions.rb +9 -0
  126. data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -2
  127. data/lib/datadog/tracing/contrib/grape/endpoint.rb +5 -5
  128. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
  129. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +2 -2
  130. data/lib/datadog/tracing/contrib/http/instrumentation.rb +2 -2
  131. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -2
  132. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +2 -2
  133. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
  134. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
  135. data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
  136. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +3 -3
  137. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -1
  138. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  139. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  140. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  141. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  142. data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
  143. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +2 -2
  144. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  145. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  146. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  147. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  148. data/lib/datadog/tracing/contrib.rb +8 -0
  149. data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
  150. data/lib/datadog/tracing/distributed/baggage.rb +59 -5
  151. data/lib/datadog/tracing/distributed/datadog.rb +11 -11
  152. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +1 -1
  153. data/lib/datadog/tracing/distributed/propagation.rb +2 -2
  154. data/lib/datadog/tracing/distributed/trace_context.rb +74 -32
  155. data/lib/datadog/tracing/event.rb +1 -1
  156. data/lib/datadog/tracing/metadata/tagging.rb +2 -2
  157. data/lib/datadog/tracing/pipeline.rb +1 -1
  158. data/lib/datadog/tracing/remote.rb +1 -1
  159. data/lib/datadog/tracing/sampling/rule.rb +1 -1
  160. data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -2
  161. data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
  162. data/lib/datadog/tracing/span_operation.rb +3 -3
  163. data/lib/datadog/tracing/trace_operation.rb +4 -4
  164. data/lib/datadog/tracing/tracer.rb +5 -5
  165. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  166. data/lib/datadog/tracing/workers.rb +2 -1
  167. data/lib/datadog/version.rb +1 -1
  168. metadata +18 -9
  169. data/lib/datadog/ai_guard/configuration/settings.rb +0 -113
  170. data/lib/datadog/appsec/configuration/settings.rb +0 -423
  171. data/lib/datadog/data_streams/configuration/settings.rb +0 -49
  172. data/lib/datadog/di/configuration/settings.rb +0 -243
  173. data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
@@ -430,7 +430,7 @@ module Datadog
430
430
  rescue => e
431
431
  # `File#read` errors have clear and actionable messages, no need to add extra exception info.
432
432
  Datadog.logger.warn(
433
- "Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e}." \
433
+ "Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e.message}." \
434
434
  'No span sampling rules will be applied.'
435
435
  )
436
436
  nil
@@ -43,7 +43,7 @@ module Datadog
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
45
  rescue => e
46
- Datadog.logger.error("#{e.class}: #{e}")
46
+ Datadog.logger.error("#{e.class}: #{e.message}")
47
47
  Datadog::Core::Telemetry::Logger.report(e)
48
48
  end
49
49
 
@@ -88,7 +88,7 @@ module Datadog
88
88
  span.finish
89
89
  end
90
90
  rescue => e
91
- Datadog.logger.error("#{e.class}: #{e}")
91
+ Datadog.logger.error("#{e.class}: #{e.message}")
92
92
  Datadog::Core::Telemetry::Logger.report(e)
93
93
  end
94
94
 
@@ -121,7 +121,9 @@ module Datadog
121
121
  result
122
122
  # rubocop:disable Lint/RescueException
123
123
  rescue Exception => e
124
- payload[:exception] = [e.class.name, e.message]
124
+ # Rails ActiveSupport::Notifications convention — payload[:exception] is
125
+ # an array of [class_name_string, message_string] consumed by subscribers.
126
+ payload[:exception] = [e.class.name, e.message] # rubocop:disable CustomCops/ExceptionMessageCop
125
127
  payload[:exception_object] = e
126
128
  raise e
127
129
  ensure
@@ -47,7 +47,7 @@ module Datadog
47
47
 
48
48
  record_exception(span, payload)
49
49
  rescue => e
50
- Datadog.logger.debug { "#{e.class}: #{e}" }
50
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
51
51
  end
52
52
  end
53
53
  end
@@ -40,7 +40,7 @@ module Datadog
40
40
  set_common_tags(span, payload)
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
42
  rescue => e
43
- Datadog.logger.debug { "#{e.class}: #{e}" }
43
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
44
44
  end
45
45
  end
46
46
  end
@@ -39,7 +39,7 @@ module Datadog
39
39
 
40
40
  set_common_tags(span, payload)
41
41
  rescue => e
42
- Datadog.logger.debug { "#{e.class}: #{e}" }
42
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
43
43
  end
44
44
  end
45
45
  end
@@ -39,7 +39,7 @@ module Datadog
39
39
 
40
40
  set_common_tags(span, payload)
41
41
  rescue => e
42
- Datadog.logger.debug { "#{e.class}: #{e}" }
42
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
43
43
  end
44
44
  end
45
45
  end
@@ -41,7 +41,7 @@ module Datadog
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
42
  span.set_tag(Ext::TAG_JOB_RETRY_WAIT, payload[:wait])
43
43
  rescue => e
44
- Datadog.logger.debug { "#{e.class}: #{e}" }
44
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
45
45
  end
46
46
  end
47
47
  end
@@ -39,7 +39,7 @@ module Datadog
39
39
 
40
40
  set_common_tags(span, payload)
41
41
  rescue => e
42
- Datadog.logger.debug { "#{e.class}: #{e}" }
42
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
43
43
  end
44
44
  end
45
45
  end
@@ -40,7 +40,7 @@ module Datadog
40
40
  set_common_tags(span, payload)
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
42
  rescue => e
43
- Datadog.logger.debug { "#{e.class}: #{e}" }
43
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
44
44
  end
45
45
  end
46
46
  end
@@ -35,7 +35,7 @@ module Datadog
35
35
 
36
36
  set_common_tags(span, payload)
37
37
  rescue => e
38
- Datadog.logger.debug { "#{e.class}: #{e}" }
38
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
39
39
  end
40
40
  end
41
41
  end
@@ -37,7 +37,7 @@ module Datadog
37
37
 
38
38
  set_common_tags(span, payload)
39
39
  rescue => e
40
- Datadog.logger.debug { "#{e.class}: #{e}" }
40
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
41
41
  end
42
42
  end
43
43
  end
@@ -76,7 +76,7 @@ module Datadog
76
76
  #
77
77
  Datadog.logger.error(
78
78
  'Failed to resolve ActiveRecord database configuration. ' \
79
- "Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
79
+ "Cause: #{e.class} Source: #{Array(e.backtrace).first}"
80
80
  )
81
81
  Core::Telemetry::Logger.report(e, description: 'Failed to resolve ActiveRecord database configuration')
82
82
 
@@ -96,7 +96,7 @@ module Datadog
96
96
  rescue => e
97
97
  Datadog.logger.error(
98
98
  "Failed to resolve key #{matcher.inspect}. " \
99
- "Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
99
+ "Cause: #{e.class} Source: #{Array(e.backtrace).first}"
100
100
  )
101
101
  Core::Telemetry::Logger.report(e, description: 'Failed to resolve key')
102
102
 
@@ -49,7 +49,7 @@ module Datadog
49
49
  span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
50
50
  span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
51
51
  rescue => e
52
- Datadog.logger.error("#{e.class}: #{e}")
52
+ Datadog.logger.error("#{e.class}: #{e.message}")
53
53
  Datadog::Core::Telemetry::Logger.report(e)
54
54
  end
55
55
  end
@@ -69,7 +69,7 @@ module Datadog
69
69
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, config[:host]) if config[:host]
70
70
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, config[:port]) if config[:port]
71
71
  rescue => e
72
- Datadog.logger.error("#{e.class}: #{e}")
72
+ Datadog.logger.error("#{e.class}: #{e.message}")
73
73
  Datadog::Core::Telemetry::Logger.report(e)
74
74
  end
75
75
  end
@@ -77,7 +77,7 @@ module Datadog
77
77
  # in case.
78
78
  Datadog.logger.debug(
79
79
  "connection_id #{connection_id} does not represent a valid object. " \
80
- "Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
80
+ "Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
81
81
  )
82
82
  end
83
83
  else
@@ -94,7 +94,7 @@ module Datadog
94
94
  set_cache_key(span, key, mapping[:multi_key])
95
95
  end
96
96
  rescue => e
97
- Datadog.logger.error("#{e.class}: #{e}")
97
+ Datadog.logger.error("#{e.class}: #{e.message}")
98
98
  Datadog::Core::Telemetry::Logger.report(e)
99
99
  end
100
100
 
@@ -125,7 +125,7 @@ module Datadog
125
125
  @block&.call(span, name, id, payload)
126
126
  rescue => e
127
127
  Datadog.logger.debug(
128
- "ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e}"
128
+ "ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}"
129
129
  )
130
130
  end
131
131
  end
@@ -147,7 +147,7 @@ module Datadog
147
147
  callback.call(event, key, *args)
148
148
  rescue => e
149
149
  Datadog.logger.debug(
150
- "ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e}"
150
+ "ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}"
151
151
  )
152
152
  end
153
153
  end
@@ -90,7 +90,7 @@ module Datadog
90
90
 
91
91
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
92
92
  rescue => e
93
- Datadog.logger.error("#{e.class}: #{e}")
93
+ Datadog.logger.error("#{e.class}: #{e.message}")
94
94
  Datadog::Core::Telemetry::Logger.report(e)
95
95
  end
96
96
  # rubocop:enable Metrics/MethodLength
@@ -20,7 +20,7 @@ module Datadog
20
20
  @registry.each do |name, callback|
21
21
  callback.call(config)
22
22
  rescue => e
23
- Datadog.logger.warn("Error configuring integration #{name}: #{e}")
23
+ Datadog.logger.warn("Error configuring integration #{name}: #{e.class}: #{e.message}")
24
24
  end
25
25
  end
26
26
 
@@ -95,14 +95,17 @@ module Datadog
95
95
  super(*args)
96
96
 
97
97
  @cache_limit = cache_limit
98
- @cache = {}
98
+ # Workaround for Ruby VM < 3.2.8, < 3.3.8 and < 3.4.3 (see https://bugs.ruby-lang.org/issues/21170)
99
+ # We initialize the hash with 10 dummy entries + clear it to force Ruby to use an
100
+ # "st_table" representation for the Hash, not an "ar_table" (since Ruby will not
101
+ # shrink a Hash using an "st_table" back to an "ar_table")
102
+ @cache = Hash[*1..20]
103
+ @cache.clear
99
104
  end
100
105
 
101
106
  # (see Resolver#resolve)
102
107
  def resolve(value)
103
- if @cache.key?(value)
104
- @cache[value]
105
- else
108
+ @cache.fetch(value) do
106
109
  if @cache.size >= @cache_limit
107
110
  @cache.shift # Remove the oldest entry if cache is full
108
111
  end
@@ -16,7 +16,7 @@ module Datadog
16
16
  command = Core::Utils.utf8_encode(command, binary: true, placeholder: placeholder)
17
17
  Core::Utils.truncate(command, Ext::QUANTIZE_MAX_CMD_LENGTH)
18
18
  rescue => e
19
- Datadog.logger.debug("Error sanitizing Dalli operation: #{e}")
19
+ Datadog.logger.debug("Error sanitizing Dalli operation: #{e.class}: #{e.message}")
20
20
  placeholder
21
21
  end
22
22
  end
@@ -98,7 +98,7 @@ module Datadog
98
98
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
99
99
  rescue => e
100
100
  # TODO: Refactor the code to streamline the execution without ensure
101
- Datadog.logger.error("#{e.class}: #{e}")
101
+ Datadog.logger.error("#{e.class}: #{e.message}")
102
102
  Datadog::Core::Telemetry::Logger.report(e)
103
103
  ensure
104
104
  # the call is still executed
@@ -40,7 +40,7 @@ module Datadog
40
40
  span
41
41
  end
42
42
  rescue => e
43
- Datadog.logger.debug { "#{e.class}: #{e}" }
43
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
44
44
  end
45
45
 
46
46
  @stack.request_call(datum)
@@ -180,7 +180,7 @@ module Datadog
180
180
  end
181
181
  end
182
182
  rescue => e
183
- Datadog.logger.debug { "#{e.class}: #{e}" }
183
+ Datadog.logger.debug { "#{e.class}: #{e.message}" }
184
184
  end
185
185
 
186
186
  def propagate!(trace, span, datum)
@@ -227,6 +227,15 @@ module Datadog
227
227
  end
228
228
  end
229
229
 
230
+ # Returns the subset of built-in integrations that are instrumented,
231
+ # excluding custom integrations registered through the public contrib API.
232
+ # This method is only for telemetry reporting.
233
+ # @!visibility private
234
+ def instrumented_built_in_integrations
235
+ instrumented = Set.new(instrumented_integrations.each_value)
236
+ Contrib::BUILT_IN_INTEGRATIONS.select { |integration| instrumented.include?(integration) }.freeze
237
+ end
238
+
230
239
  # @!visibility private
231
240
  def reset!
232
241
  INSTRUMENTED_INTEGRATIONS_LOCK.synchronize do
@@ -83,7 +83,7 @@ module Datadog
83
83
 
84
84
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
85
85
  rescue => e
86
- Datadog.logger.error("#{e.class}: #{e}")
86
+ Datadog.logger.error("#{e.class}: #{e.message}")
87
87
  Datadog::Core::Telemetry::Logger.report(e)
88
88
  end
89
89
  # rubocop:enable Metrics/AbcSize
@@ -98,7 +98,7 @@ module Datadog
98
98
  Datadog.configuration.tracing.header_tags.response_tags(env[:response_headers])
99
99
  )
100
100
  rescue => e
101
- Datadog.logger.error("#{e.class}: #{e}")
101
+ Datadog.logger.error("#{e.class}: #{e.message}")
102
102
  Datadog::Core::Telemetry::Logger.report(e)
103
103
  end
104
104
  # rubocop:enable Metrics/AbcSize
@@ -77,7 +77,7 @@ module Datadog
77
77
 
78
78
  Thread.current[KEY_RUN] = true
79
79
  rescue => e
80
- Datadog.logger.error("#{e.class}: #{e}")
80
+ Datadog.logger.error("#{e.class}: #{e.message}")
81
81
  Datadog::Core::Telemetry::Logger.report(e)
82
82
  end
83
83
 
@@ -121,7 +121,7 @@ module Datadog
121
121
  span.finish(finish)
122
122
  end
123
123
  rescue => e
124
- Datadog.logger.error("#{e.class}: #{e}")
124
+ Datadog.logger.error("#{e.class}: #{e.message}")
125
125
  Datadog::Core::Telemetry::Logger.report(e)
126
126
  end
127
127
 
@@ -165,7 +165,7 @@ module Datadog
165
165
 
166
166
  Thread.current[KEY_RENDER] = true
167
167
  rescue => e
168
- Datadog.logger.error("#{e.class}: #{e}")
168
+ Datadog.logger.error("#{e.class}: #{e.message}")
169
169
  Datadog::Core::Telemetry::Logger.report(e)
170
170
  end
171
171
 
@@ -190,7 +190,7 @@ module Datadog
190
190
  span.finish(finish)
191
191
  end
192
192
  rescue => e
193
- Datadog.logger.error("#{e.class}: #{e}")
193
+ Datadog.logger.error("#{e.class}: #{e.message}")
194
194
  Datadog::Core::Telemetry::Logger.report(e)
195
195
  end
196
196
 
@@ -229,7 +229,7 @@ module Datadog
229
229
  span.finish(finish)
230
230
  end
231
231
  rescue => e
232
- Datadog.logger.error("#{e.class}: #{e}")
232
+ Datadog.logger.error("#{e.class}: #{e.message}")
233
233
  Datadog::Core::Telemetry::Logger.report(e)
234
234
  end
235
235
 
@@ -90,7 +90,7 @@ module Datadog
90
90
  end
91
91
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
92
92
  rescue => e
93
- Datadog.logger.debug("GRPC client trace failed: #{e}")
93
+ Datadog.logger.debug("GRPC client trace failed: #{e.class}: #{e.message}")
94
94
  end
95
95
 
96
96
  def find_deadline(call)
@@ -112,7 +112,7 @@ module Datadog
112
112
 
113
113
  Core::Utils.extract_host_port(peer_address)
114
114
  rescue => e
115
- Datadog.logger.debug { "Could not parse host:port from #{call}: #{e}" }
115
+ Datadog.logger.debug { "Could not parse host:port from #{call}: #{e.class}: #{e.message}" }
116
116
  nil
117
117
  end
118
118
  end
@@ -54,7 +54,7 @@ module Datadog
54
54
  Tracing.continue_trace!(GRPC.extract(metadata))
55
55
  rescue => e
56
56
  Datadog.logger.debug(
57
- "unable to propagate GRPC metadata to context: #{e}"
57
+ "unable to propagate GRPC metadata to context: #{e.class}: #{e.message}"
58
58
  )
59
59
  end
60
60
 
@@ -86,7 +86,7 @@ module Datadog
86
86
  # Measure service stats
87
87
  Contrib::Analytics.set_measured(span)
88
88
  rescue => e
89
- Datadog.logger.debug("GRPC server trace failed: #{e}")
89
+ Datadog.logger.debug("GRPC server trace failed: #{e.class}: #{e.message}")
90
90
  end
91
91
  end
92
92
  end
@@ -93,7 +93,7 @@ module Datadog
93
93
 
94
94
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
95
95
  rescue => e
96
- Datadog.logger.error("error preparing span from http request: #{e}")
96
+ Datadog.logger.error("error preparing span from http request: #{e.class}: #{e.message}")
97
97
  Datadog::Core::Telemetry::Logger.report(e)
98
98
  end
99
99
 
@@ -108,7 +108,7 @@ module Datadog
108
108
  Datadog.configuration.tracing.header_tags.response_tags(response)
109
109
  )
110
110
  rescue => e
111
- Datadog.logger.error("error preparing span from http response: #{e}")
111
+ Datadog.logger.error("error preparing span from http response: #{e.class}: #{e.message}")
112
112
  Datadog::Core::Telemetry::Logger.report(e)
113
113
  end
114
114
 
@@ -41,7 +41,9 @@ module Datadog
41
41
  # Add additional request specific tags to the span.
42
42
  annotate_span_with_request!(span, req, request_options)
43
43
  rescue => e
44
- Datadog.logger.error("error preparing span for httpclient request: #{e}, Source: #{e.backtrace}")
44
+ Datadog.logger.error(
45
+ "error preparing span for httpclient request: #{e.class}: #{e.message}, Source: #{e.backtrace}"
46
+ )
45
47
  Datadog::Core::Telemetry::Logger.report(e)
46
48
  ensure
47
49
  res = super
@@ -107,7 +109,9 @@ module Datadog
107
109
  Datadog.configuration.tracing.header_tags.response_tags(response.header)
108
110
  )
109
111
  rescue => e
110
- Datadog.logger.error("error preparing span from httpclient response: #{e}, Source: #{e.backtrace}")
112
+ Datadog.logger.error(
113
+ "error preparing span from httpclient response: #{e.class}: #{e.message}, Source: #{e.backtrace}"
114
+ )
111
115
  Datadog::Core::Telemetry::Logger.report(e)
112
116
  end
113
117
 
@@ -41,7 +41,7 @@ module Datadog
41
41
  # Add additional request specific tags to the span.
42
42
  annotate_span_with_request!(span, req, request_options)
43
43
  rescue => e
44
- logger.error("error preparing span for http.rb request: #{e}, Source: #{e.backtrace}")
44
+ logger.error("error preparing span for http.rb request: #{e.class}: #{e.message}, Source: #{e.backtrace}")
45
45
  Datadog::Core::Telemetry::Logger.report(e)
46
46
  ensure
47
47
  res = super(req, options)
@@ -117,7 +117,7 @@ module Datadog
117
117
  Datadog.configuration.tracing.header_tags.response_tags(response.headers)
118
118
  )
119
119
  rescue => e
120
- logger.error("error preparing span from http.rb response: #{e}, Source: #{e.backtrace}")
120
+ logger.error("error preparing span from http.rb response: #{e.class}: #{e.message}, Source: #{e.backtrace}")
121
121
  Datadog::Core::Telemetry::Logger.report(e)
122
122
  end
123
123
 
@@ -27,7 +27,7 @@ module Datadog
27
27
  auto_instrumentation: true
28
28
  ) { |key| headers[key] }
29
29
  rescue => e
30
- Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
30
+ Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
31
31
  end
32
32
 
33
33
  yield(message) if block
@@ -49,7 +49,7 @@ module Datadog
49
49
  auto_instrumentation: true
50
50
  )
51
51
  rescue => e
52
- Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
52
+ Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
53
53
  end
54
54
 
55
55
  yield(batch) if block
@@ -30,7 +30,7 @@ module Datadog
30
30
  end
31
31
  end
32
32
  rescue => e
33
- Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
33
+ Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
34
34
  end
35
35
  end
36
36
 
@@ -51,7 +51,7 @@ module Datadog
51
51
  end
52
52
  end
53
53
  rescue => e
54
- Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
54
+ Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
55
55
  end
56
56
  end
57
57
 
@@ -49,7 +49,7 @@ module Datadog
49
49
  auto_instrumentation: true
50
50
  ) { |key| headers[key] }
51
51
  rescue => e
52
- Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
52
+ Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
53
53
  end
54
54
  end
55
55
 
@@ -73,7 +73,7 @@ module Datadog
73
73
  # set the resource with the quantized query
74
74
  span.resource = serialized_query
75
75
  rescue => e
76
- Datadog.logger.debug("error when handling MongoDB 'started' event: #{e}")
76
+ Datadog.logger.debug("error when handling MongoDB 'started' event: #{e.class}: #{e.message}")
77
77
  end
78
78
  # rubocop:enable Metrics/AbcSize
79
79
 
@@ -85,7 +85,7 @@ module Datadog
85
85
  # the framework itself, so we set only the error and the message
86
86
  span.set_error(event)
87
87
  rescue => e
88
- Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e}")
88
+ Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e.class}: #{e.message}")
89
89
  ensure
90
90
  # whatever happens, the Span must be removed from the local storage and
91
91
  # it must be finished to prevent any leak
@@ -101,7 +101,7 @@ module Datadog
101
101
  rows = event.reply.fetch('n', nil)
102
102
  span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
103
103
  rescue => e
104
- Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e}")
104
+ Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e.class}: #{e.message}")
105
105
  ensure
106
106
  # whatever happens, the Span must be removed from the local storage and
107
107
  # it must be finished to prevent any leak
@@ -84,7 +84,7 @@ module Datadog
84
84
  span.resource = "#{method} #{quantized_url}"
85
85
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
86
86
  rescue => e
87
- Datadog.logger.error("#{e.class}: #{e}")
87
+ Datadog.logger.error("#{e.class}: #{e.message}")
88
88
  Datadog::Core::Telemetry::Logger.report(e)
89
89
  # TODO: Refactor the code to streamline the execution without ensure
90
90
  ensure
@@ -28,7 +28,7 @@ module Datadog
28
28
  span.type = Tracing::Metadata::Ext::SQL::TYPE
29
29
  span.set_tag(Ext::TAG_QUERY_ASYNC, false)
30
30
  rescue => e
31
- Datadog.logger.debug("error preparing span for presto: #{e}")
31
+ Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
32
32
  end
33
33
 
34
34
  super(query)
@@ -46,7 +46,7 @@ module Datadog
46
46
  span.type = Tracing::Metadata::Ext::SQL::TYPE
47
47
  span.set_tag(Ext::TAG_QUERY_ASYNC, !blk.nil?)
48
48
  rescue => e
49
- Datadog.logger.debug("error preparing span for presto: #{e}")
49
+ Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
50
50
  end
51
51
 
52
52
  super(query, &blk)
@@ -65,7 +65,7 @@ module Datadog
65
65
  # ^ not an SQL type span, since there's no SQL query
66
66
  span.set_tag(Ext::TAG_QUERY_ID, query_id)
67
67
  rescue => e
68
- Datadog.logger.debug("error preparing span for presto: #{e}")
68
+ Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
69
69
  end
70
70
 
71
71
  super(query_id)
@@ -41,7 +41,7 @@ module Datadog
41
41
  # context of middleware patching outside a Rails server process (eg. a
42
42
  # process that doesn't serve HTTP requests but has Rails environment
43
43
  # loaded such as a Resque master process)
44
- Datadog.logger.debug("Error patching middleware stack: #{e}")
44
+ Datadog.logger.debug("Error patching middleware stack: #{e.class}: #{e.message}")
45
45
  end
46
46
 
47
47
  def retain_middleware_name(middleware)
@@ -39,7 +39,7 @@ module Datadog
39
39
  rescue => e
40
40
  # in case of an Exception we don't create a
41
41
  # `request.queuing` span
42
- Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
42
+ Datadog.logger.debug("[rack] unable to parse request queue headers: #{e.class}: #{e.message}")
43
43
  nil
44
44
  end
45
45
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  app_config.log_tags << proc { Tracing.log_correlation if Datadog.configuration.tracing.log_injection }
19
19
  rescue => e
20
20
  Datadog.logger.warn(
21
- "Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class}: #{e}"
21
+ "Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class}: #{e.message}"
22
22
  )
23
23
  false
24
24
  end
@@ -86,7 +86,7 @@ module Datadog
86
86
  # Reads one more byte than the limit to allow us to check if the source exceeds the limit.
87
87
  source = File.read(file, MAX_TAG_VALUE_SIZE + 1)
88
88
  rescue => e
89
- Datadog.logger.debug { "Failed to read file '#{file}' for Rails runner: #{e.class}: #{e}" }
89
+ Datadog.logger.debug { "Failed to read file '#{file}' for Rails runner: #{e.class}: #{e.message}" }
90
90
  end
91
91
 
92
92
  Tracing.trace(