datadog 2.1.0 → 2.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +101 -1
- data/ext/datadog_profiling_loader/extconf.rb +15 -15
- data/ext/datadog_profiling_native_extension/clock_id.h +1 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -2
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +1 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +132 -44
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +49 -26
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +34 -4
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +4 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +90 -37
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +81 -19
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +110 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +57 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +69 -62
- data/ext/datadog_profiling_native_extension/heap_recorder.c +34 -6
- data/ext/datadog_profiling_native_extension/heap_recorder.h +3 -1
- data/ext/datadog_profiling_native_extension/helpers.h +6 -17
- data/ext/datadog_profiling_native_extension/http_transport.c +3 -3
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +0 -86
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +2 -23
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +61 -126
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +64 -138
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +17 -11
- data/ext/datadog_profiling_native_extension/profiling.c +0 -2
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +0 -33
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -26
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +1 -1
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +27 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +0 -15
- data/ext/datadog_profiling_native_extension/time_helpers.h +36 -6
- data/ext/{datadog_profiling_native_extension → libdatadog_api}/crashtracker.c +20 -7
- data/ext/libdatadog_api/datadog_ruby_common.c +110 -0
- data/ext/libdatadog_api/datadog_ruby_common.h +57 -0
- data/ext/libdatadog_api/extconf.rb +108 -0
- data/ext/libdatadog_api/macos_development.md +26 -0
- data/ext/libdatadog_extconf_helpers.rb +130 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +49 -0
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +73 -0
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +68 -0
- data/lib/datadog/appsec/contrib/graphql/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +37 -0
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +59 -0
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +1 -1
- data/lib/datadog/appsec/extensions.rb +1 -0
- data/lib/datadog/appsec/processor/actions.rb +1 -1
- data/lib/datadog/appsec/response.rb +15 -1
- data/lib/datadog/appsec.rb +1 -0
- data/lib/datadog/core/configuration/components.rb +17 -12
- data/lib/datadog/core/configuration/settings.rb +93 -7
- data/lib/datadog/core/configuration.rb +3 -17
- data/lib/datadog/core/crashtracking/agent_base_url.rb +21 -0
- data/lib/datadog/core/crashtracking/component.rb +111 -0
- data/lib/datadog/core/crashtracking/tag_builder.rb +39 -0
- data/lib/datadog/core/deprecations.rb +58 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +8 -11
- data/lib/datadog/core/environment/yjit.rb +5 -0
- data/lib/datadog/core/runtime/ext.rb +1 -0
- data/lib/datadog/core/runtime/metrics.rb +6 -0
- data/lib/datadog/core/telemetry/component.rb +154 -0
- data/lib/datadog/core/telemetry/emitter.rb +9 -11
- data/lib/datadog/core/telemetry/event.rb +132 -26
- data/lib/datadog/core/telemetry/ext.rb +3 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +11 -13
- data/lib/datadog/core/telemetry/http/ext.rb +3 -0
- data/lib/datadog/core/telemetry/http/transport.rb +38 -9
- data/lib/datadog/core/telemetry/logging.rb +35 -0
- data/lib/datadog/core/telemetry/metric.rb +167 -0
- data/lib/datadog/core/telemetry/metrics_collection.rb +81 -0
- data/lib/datadog/core/telemetry/metrics_manager.rb +81 -0
- data/lib/datadog/core/telemetry/request.rb +1 -1
- data/lib/datadog/core/telemetry/worker.rb +173 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +102 -0
- data/lib/datadog/core/utils/only_once_successful.rb +76 -0
- data/lib/datadog/core.rb +2 -19
- data/lib/datadog/kit/appsec/events.rb +2 -4
- data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -10
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +15 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +23 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +24 -11
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +17 -17
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +11 -13
- data/lib/datadog/profiling/collectors/info.rb +3 -3
- data/lib/datadog/profiling/collectors/thread_context.rb +4 -2
- data/lib/datadog/profiling/component.rb +85 -90
- data/lib/datadog/profiling/exporter.rb +3 -3
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +410 -0
- data/lib/datadog/profiling/ext.rb +21 -21
- data/lib/datadog/profiling/flush.rb +1 -1
- data/lib/datadog/profiling/http_transport.rb +8 -6
- data/lib/datadog/profiling/load_native_extension.rb +5 -5
- data/lib/datadog/profiling/preload.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +5 -8
- data/lib/datadog/profiling/scheduler.rb +31 -25
- data/lib/datadog/profiling/tag_builder.rb +2 -2
- data/lib/datadog/profiling/tasks/exec.rb +5 -5
- data/lib/datadog/profiling/tasks/setup.rb +16 -35
- data/lib/datadog/profiling.rb +5 -5
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -6
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +9 -4
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -2
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +1 -5
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/cache/event.rb +32 -0
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +156 -0
- data/lib/datadog/tracing/contrib/active_support/cache/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +45 -41
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +17 -40
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +29 -6
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +16 -4
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +33 -29
- data/lib/datadog/tracing/contrib/analytics.rb +5 -0
- data/lib/datadog/tracing/contrib/ext.rb +14 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +8 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +166 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +16 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +17 -13
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +5 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +22 -10
- data/lib/datadog/tracing/contrib/racecar/event.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -0
- data/lib/datadog/tracing/contrib/rails/runner.rb +95 -0
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +4 -1
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +14 -16
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +3 -1
- data/lib/datadog/tracing/distributed/datadog.rb +2 -2
- data/lib/datadog/tracing/distributed/propagation.rb +9 -2
- data/lib/datadog/tracing/distributed/trace_context.rb +3 -2
- data/lib/datadog/tracing/metadata/errors.rb +9 -1
- data/lib/datadog/tracing/metadata/ext.rb +4 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
- data/lib/datadog/tracing/span.rb +9 -2
- data/lib/datadog/tracing/span_event.rb +41 -0
- data/lib/datadog/tracing/span_operation.rb +9 -4
- data/lib/datadog/tracing/trace_operation.rb +7 -3
- data/lib/datadog/tracing/trace_segment.rb +4 -1
- data/lib/datadog/tracing/tracer.rb +9 -2
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -0
- data/lib/datadog/tracing.rb +5 -1
- data/lib/datadog/version.rb +2 -2
- metadata +43 -12
- data/lib/datadog/core/telemetry/client.rb +0 -95
- data/lib/datadog/core/telemetry/heartbeat.rb +0 -33
- data/lib/datadog/profiling/crashtracker.rb +0 -91
- data/lib/datadog/profiling/ext/forking.rb +0 -98
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../core/utils/time"
|
4
4
|
|
5
|
-
require_relative
|
6
|
-
require_relative
|
5
|
+
require_relative "../core/worker"
|
6
|
+
require_relative "../core/workers/polling"
|
7
7
|
|
8
8
|
module Datadog
|
9
9
|
module Profiling
|
@@ -22,7 +22,8 @@ module Datadog
|
|
22
22
|
|
23
23
|
attr_reader \
|
24
24
|
:exporter,
|
25
|
-
:transport
|
25
|
+
:transport,
|
26
|
+
:profiler_failed
|
26
27
|
|
27
28
|
public
|
28
29
|
|
@@ -34,6 +35,7 @@ module Datadog
|
|
34
35
|
)
|
35
36
|
@exporter = exporter
|
36
37
|
@transport = transport
|
38
|
+
@profiler_failed = false
|
37
39
|
|
38
40
|
# Workers::Async::Thread settings
|
39
41
|
self.fork_policy = fork_policy
|
@@ -50,25 +52,23 @@ module Datadog
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def perform(on_failure_proc)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
Datadog.logger.debug('#flush was interrupted or failed before it could complete') if interrupted
|
71
|
-
end
|
55
|
+
# A profiling flush may be called while the VM is shutting down, to report the last profile. When we do so,
|
56
|
+
# we impose a strict timeout. This means this last profile may or may not be sent, depending on if the flush can
|
57
|
+
# successfully finish in the strict timeout.
|
58
|
+
# This can be somewhat confusing (why did it not get reported?), so let's at least log what happened.
|
59
|
+
interrupted = true
|
60
|
+
|
61
|
+
flush_and_wait
|
62
|
+
interrupted = false
|
63
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
64
|
+
Datadog.logger.warn(
|
65
|
+
"Profiling::Scheduler thread error. " \
|
66
|
+
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
67
|
+
)
|
68
|
+
on_failure_proc&.call
|
69
|
+
raise
|
70
|
+
ensure
|
71
|
+
Datadog.logger.debug("#flush was interrupted or failed before it could complete") if interrupted
|
72
72
|
end
|
73
73
|
|
74
74
|
# Configure Workers::IntervalLoop to not report immediately when scheduler starts
|
@@ -80,8 +80,14 @@ module Datadog
|
|
80
80
|
true
|
81
81
|
end
|
82
82
|
|
83
|
+
# This is called by the Profiler class whenever an issue happened in the profiler. This makes sure that even
|
84
|
+
# if there is data to be flushed, we don't try to flush it.
|
85
|
+
def mark_profiler_failed
|
86
|
+
@profiler_failed = true
|
87
|
+
end
|
88
|
+
|
83
89
|
def work_pending?
|
84
|
-
exporter.can_flush?
|
90
|
+
!profiler_failed && exporter.can_flush?
|
85
91
|
end
|
86
92
|
|
87
93
|
def reset_after_fork
|
@@ -124,7 +130,7 @@ module Datadog
|
|
124
130
|
|
125
131
|
begin
|
126
132
|
transport.export(flush)
|
127
|
-
rescue
|
133
|
+
rescue => e
|
128
134
|
Datadog.logger.error(
|
129
135
|
"Unable to report profile. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
130
136
|
)
|
@@ -18,16 +18,16 @@ module Datadog
|
|
18
18
|
|
19
19
|
def rubyopts
|
20
20
|
[
|
21
|
-
|
21
|
+
"-rdatadog/profiling/preload"
|
22
22
|
]
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
27
|
def set_rubyopt!
|
28
|
-
existing_rubyopt = ENV[
|
28
|
+
existing_rubyopt = ENV["RUBYOPT"]
|
29
29
|
|
30
|
-
ENV[
|
30
|
+
ENV["RUBYOPT"] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(" ")}" : rubyopts.join(" ")
|
31
31
|
end
|
32
32
|
|
33
33
|
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
@@ -38,10 +38,10 @@ module Datadog
|
|
38
38
|
def exec_with_error_handling(args)
|
39
39
|
Kernel.exec(*args)
|
40
40
|
rescue Errno::ENOENT => e
|
41
|
-
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(
|
41
|
+
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(" ")}')"
|
42
42
|
Kernel.exit 127
|
43
43
|
rescue Errno::EACCES, Errno::ENOEXEC => e
|
44
|
-
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(
|
44
|
+
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(" ")}')"
|
45
45
|
Kernel.exit 126
|
46
46
|
end
|
47
47
|
end
|
@@ -1,56 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
3
|
+
require_relative "../../core/utils/only_once"
|
4
|
+
require_relative "../../core/utils/at_fork_monkey_patch"
|
5
5
|
|
6
6
|
module Datadog
|
7
7
|
module Profiling
|
8
8
|
module Tasks
|
9
|
-
# Takes care of
|
9
|
+
# Takes care of restarting the profiler when the process forks
|
10
10
|
class Setup
|
11
11
|
ACTIVATE_EXTENSIONS_ONLY_ONCE = Core::Utils::OnlyOnce.new
|
12
12
|
|
13
13
|
def run
|
14
14
|
ACTIVATE_EXTENSIONS_ONLY_ONCE.run do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
"Location: #{Array(e.backtrace).first}"
|
22
|
-
end
|
15
|
+
Datadog::Core::Utils::AtForkMonkeyPatch.apply!
|
16
|
+
setup_at_fork_hooks
|
17
|
+
rescue StandardError, ScriptError => e
|
18
|
+
Datadog.logger.warn do
|
19
|
+
"Profiler extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
20
|
+
"Location: #{Array(e.backtrace).first}"
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
27
25
|
private
|
28
26
|
|
29
|
-
def activate_forking_extensions
|
30
|
-
if Ext::Forking.supported?
|
31
|
-
Ext::Forking.apply!
|
32
|
-
elsif Datadog.configuration.profiling.enabled
|
33
|
-
Datadog.logger.debug('Profiler forking extensions skipped; forking not supported.')
|
34
|
-
end
|
35
|
-
rescue StandardError, ScriptError => e
|
36
|
-
Datadog.logger.warn do
|
37
|
-
"Profiler forking extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
38
|
-
"Location: #{Array(e.backtrace).first}"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
27
|
def setup_at_fork_hooks
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
"Error during post-fork hooks. Cause: #{e.class.name} #{e.message} " \
|
51
|
-
"Location: #{Array(e.backtrace).first}"
|
52
|
-
end
|
53
|
-
end
|
28
|
+
Datadog::Core::Utils::AtForkMonkeyPatch.at_fork(:child) do
|
29
|
+
# Restart profiler, if enabled
|
30
|
+
Profiling.start_if_enabled
|
31
|
+
rescue => e
|
32
|
+
Datadog.logger.warn do
|
33
|
+
"Error during post-fork hooks. Cause: #{e.class.name} #{e.message} " \
|
34
|
+
"Location: #{Array(e.backtrace).first}"
|
54
35
|
end
|
55
36
|
end
|
56
37
|
end
|
data/lib/datadog/profiling.rb
CHANGED
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
profiler = Datadog.send(:components).profiler
|
31
31
|
# ...but we still try to start it BECAUSE if the process forks, the profiler will exist but may
|
32
32
|
# not yet have been started in the fork
|
33
|
-
profiler
|
33
|
+
profiler&.start
|
34
34
|
!!profiler
|
35
35
|
end
|
36
36
|
|
@@ -47,6 +47,7 @@ module Datadog
|
|
47
47
|
# (This is similar to some OS-based time representations.)
|
48
48
|
#
|
49
49
|
# Note 2: All fibers in the same thread will share the same counter values.
|
50
|
+
# Note 3: This counter is not accurate when using the M:N scheduler.
|
50
51
|
#
|
51
52
|
# Only available when the profiler is running, and allocation-related features are not disabled via configuration.
|
52
53
|
#
|
@@ -62,7 +63,7 @@ module Datadog
|
|
62
63
|
def self.enabled?
|
63
64
|
profiler = Datadog.send(:components).profiler
|
64
65
|
# Use .send(...) to avoid exposing the attr_reader as an API to the outside
|
65
|
-
!!
|
66
|
+
!!profiler&.send(:scheduler)&.running?
|
66
67
|
end
|
67
68
|
|
68
69
|
def self.wait_until_running(timeout_seconds: 5)
|
@@ -97,7 +98,7 @@ module Datadog
|
|
97
98
|
|
98
99
|
contents = file_api.read(skipped_reason_file).strip
|
99
100
|
contents unless contents.empty?
|
100
|
-
rescue
|
101
|
+
rescue
|
101
102
|
# Do nothing
|
102
103
|
end
|
103
104
|
end
|
@@ -135,7 +136,7 @@ module Datadog
|
|
135
136
|
private_class_method def self.load_profiling
|
136
137
|
return false unless supported?
|
137
138
|
|
138
|
-
require_relative 'profiling/ext/
|
139
|
+
require_relative 'profiling/ext/dir_monkey_patches'
|
139
140
|
require_relative 'profiling/collectors/info'
|
140
141
|
require_relative 'profiling/collectors/code_provenance'
|
141
142
|
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
@@ -143,7 +144,6 @@ module Datadog
|
|
143
144
|
require_relative 'profiling/collectors/idle_sampling_helper'
|
144
145
|
require_relative 'profiling/collectors/stack'
|
145
146
|
require_relative 'profiling/collectors/thread_context'
|
146
|
-
require_relative 'profiling/crashtracker'
|
147
147
|
require_relative 'profiling/stack_recorder'
|
148
148
|
require_relative 'profiling/exporter'
|
149
149
|
require_relative 'profiling/flush'
|
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
Tracing::Metadata::Ext::AppTypes::TYPE_WEB
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def on_start(span, _event, _id, payload)
|
38
38
|
channel = payload[:broadcasting] # Channel has high cardinality
|
39
39
|
span.service = configuration[:service_name] if configuration[:service_name]
|
40
40
|
span.type = span_type
|
@@ -33,7 +33,7 @@ module Datadog
|
|
33
33
|
Tracing::Metadata::Ext::AppTypes::TYPE_WEB
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def on_start(span, _event, _id, payload)
|
37
37
|
channel_class = payload[:channel_class]
|
38
38
|
|
39
39
|
span.service = configuration[:service_name] if configuration[:service_name]
|
@@ -27,9 +27,11 @@ module Datadog
|
|
27
27
|
Datadog.configuration.tracing[:action_mailer]
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def on_start(span, event, _id, payload)
|
31
|
+
super
|
32
|
+
|
33
|
+
span.type = span_type
|
31
34
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
|
-
span.resource = payload[:mailer]
|
33
35
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
34
36
|
|
35
37
|
# Set analytics sample rate
|
@@ -39,10 +41,6 @@ module Datadog
|
|
39
41
|
|
40
42
|
# Measure service stats
|
41
43
|
Contrib::Analytics.set_measured(span)
|
42
|
-
|
43
|
-
report_if_exception(span, payload)
|
44
|
-
rescue StandardError => e
|
45
|
-
Datadog.logger.debug(e.message)
|
46
44
|
end
|
47
45
|
end
|
48
46
|
end
|
@@ -30,15 +30,20 @@ module Datadog
|
|
30
30
|
Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def on_start(span, event, _id, payload)
|
34
34
|
super
|
35
35
|
|
36
|
-
span.
|
36
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_DELIVER)
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_finish(span, event, _id, payload)
|
40
|
+
super
|
41
|
+
|
42
|
+
span.resource = payload[:mailer] # Mailer is not available at `on_start`
|
43
|
+
|
37
44
|
span.set_tag(Ext::TAG_MAILER, payload[:mailer])
|
38
45
|
span.set_tag(Ext::TAG_MSG_ID, payload[:message_id])
|
39
46
|
|
40
|
-
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_DELIVER)
|
41
|
-
|
42
47
|
# Since email data can contain PII we disable by default
|
43
48
|
# Some of these fields can be either strings or arrays, so we try to normalize
|
44
49
|
# https://github.com/rails/rails/blob/18707ab17fa492eb25ad2e8f9818a320dc20b823/actionmailer/lib/action_mailer/base.rb#L742-L754
|
@@ -30,10 +30,11 @@ module Datadog
|
|
30
30
|
Tracing::Metadata::Ext::HTTP::TYPE_TEMPLATE
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def on_start(span, event, _id, payload)
|
34
34
|
super
|
35
35
|
|
36
|
-
span.
|
36
|
+
span.resource = payload[:mailer] # Mailer is not available at `on_start`
|
37
|
+
|
37
38
|
span.set_tag(Ext::TAG_ACTION, payload[:action])
|
38
39
|
span.set_tag(Ext::TAG_MAILER, payload[:mailer])
|
39
40
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
27
27
|
Ext::SPAN_RENDER_PARTIAL
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def on_start(span, _event, _id, payload)
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_TEMPLATE
|
33
33
|
|
@@ -41,10 +41,6 @@ module Datadog
|
|
41
41
|
|
42
42
|
# Measure service stats
|
43
43
|
Contrib::Analytics.set_measured(span)
|
44
|
-
|
45
|
-
record_exception(span, payload)
|
46
|
-
rescue StandardError => e
|
47
|
-
Datadog.logger.debug(e.message)
|
48
44
|
end
|
49
45
|
end
|
50
46
|
end
|
@@ -27,7 +27,7 @@ module Datadog
|
|
27
27
|
Ext::SPAN_RENDER_TEMPLATE
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def on_start(span, _event, _id, payload)
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_TEMPLATE
|
33
33
|
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_DISCARD
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_ENQUEUE
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_ENQUEUE
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_ENQUEUE_RETRY
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_PERFORM
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
Ext::SPAN_RETRY_STOPPED
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def on_start(span, event, _id, payload)
|
30
30
|
span.name = span_name
|
31
31
|
span.service = configuration[:service_name] if configuration[:service_name]
|
32
32
|
span.resource = payload[:job].class.name
|
@@ -31,7 +31,7 @@ module Datadog
|
|
31
31
|
Ext::SPAN_INSTANTIATION
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
34
|
+
def on_start(span, event, _id, payload)
|
35
35
|
span.resource = payload.fetch(:class_name)
|
36
36
|
span.type = Ext::SPAN_TYPE_INSTANTIATION
|
37
37
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
@@ -29,7 +29,7 @@ module Datadog
|
|
29
29
|
Ext::SPAN_SQL
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def on_start(span, event, _id, payload)
|
33
33
|
config = Utils.connection_config(payload[:connection], payload[:connection_id])
|
34
34
|
settings = Datadog.configuration.tracing[:active_record, config]
|
35
35
|
adapter_name = Contrib::Utils::Database.normalize_vendor(config[:adapter])
|
@@ -62,6 +62,7 @@ module Datadog
|
|
62
62
|
cached = payload[:cached] || (payload[:name] == PAYLOAD_CACHE)
|
63
63
|
|
64
64
|
span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
|
65
|
+
span.set_tag(Contrib::Ext::DB::TAG_INSTANCE, config[:database])
|
65
66
|
span.set_tag(Ext::TAG_DB_NAME, config[:database])
|
66
67
|
span.set_tag(Ext::TAG_DB_CACHED, cached) if cached
|
67
68
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, config[:host]) if config[:host]
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../notifications/event'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Tracing
|
7
|
+
module Contrib
|
8
|
+
module ActiveSupport
|
9
|
+
module Cache
|
10
|
+
# Defines basic behaviors for an ActiveSupport event.
|
11
|
+
module Event
|
12
|
+
def self.included(base)
|
13
|
+
base.include(ActiveSupport::Notifications::Event)
|
14
|
+
base.extend(ClassMethods)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Class methods for ActiveRecord events.
|
18
|
+
module ClassMethods
|
19
|
+
def span_options
|
20
|
+
{}
|
21
|
+
end
|
22
|
+
|
23
|
+
def configuration
|
24
|
+
Datadog.configuration.tracing[:active_support]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|