Module: Datadog::Profiling
- Defined in:
- lib/datadog/profiling.rb,
lib/datadog/profiling/ext.rb,
lib/datadog/profiling/flush.rb,
lib/datadog/profiling/exporter.rb,
lib/datadog/profiling/profiler.rb,
lib/datadog/profiling/component.rb,
lib/datadog/profiling/scheduler.rb,
lib/datadog/profiling/tasks/exec.rb,
lib/datadog/profiling/tasks/help.rb,
lib/datadog/profiling/tag_builder.rb,
lib/datadog/profiling/tasks/setup.rb,
lib/datadog/profiling/http_transport.rb,
lib/datadog/profiling/stack_recorder.rb,
lib/datadog/profiling/collectors/info.rb,
lib/datadog/profiling/collectors/stack.rb,
lib/datadog/profiling/native_extension.rb,
lib/datadog/profiling/ext/dir_monkey_patches.rb,
lib/datadog/profiling/collectors/thread_context.rb,
lib/datadog/profiling/collectors/code_provenance.rb,
lib/datadog/profiling/collectors/idle_sampling_helper.rb,
lib/datadog/profiling/collectors/dynamic_sampling_rate.rb,
lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb,
ext/datadog_profiling_native_extension/profiling.c,
ext/datadog_profiling_loader/datadog_profiling_loader.c,
ext/datadog_profiling_native_extension/native_extension_helpers.rb
Overview
Datadog Continuous Profiler implementation: docs.datadoghq.com/profiler/
Defined Under Namespace
Modules: Collectors, Component, Ext, Loader, NativeExtension, NativeExtensionHelpers, TagBuilder, Tasks Classes: Exporter, Flush, HttpTransport, Profiler, Scheduler, StackRecorder
Class Method Summary collapse
-
.allocation_count ⇒ Object
rubocop:disable Lint/NestedMethodDefinition (On purpose!).
- .enabled? ⇒ Boolean
-
.start_if_enabled ⇒ Boolean
Starts the profiler, if the profiler is supported by in this runtime environment and if the profiler has been enabled in configuration.
- .supported? ⇒ Boolean
- .unsupported_reason ⇒ Object
- .wait_until_running(timeout_seconds: 5) ⇒ Object
Class Method Details
.allocation_count ⇒ Object
rubocop:disable Lint/NestedMethodDefinition (On purpose!)
57 58 59 60 61 |
# File 'lib/datadog/profiling.rb', line 57 def self.allocation_count # This no-op implementation is used when profiling failed to load. # It gets replaced inside #replace_noop_allocation_count. nil end |
.enabled? ⇒ Boolean
63 64 65 66 67 |
# File 'lib/datadog/profiling.rb', line 63 def self.enabled? profiler = Datadog.send(:components).profiler # Use .send(...) to avoid exposing the attr_reader as an API to the outside !!profiler&.send(:scheduler)&.running? end |
.start_if_enabled ⇒ Boolean
Starts the profiler, if the profiler is supported by in this runtime environment and if the profiler has been enabled in configuration.
27 28 29 30 31 32 33 34 35 |
# File 'lib/datadog/profiling.rb', line 27 def self.start_if_enabled # If the profiler was not previously touched, getting the profiler instance triggers start as a side-effect # otherwise we get nil profiler = Datadog.send(:components).profiler # ...but we still try to start it BECAUSE if the process forks, the profiler will exist but may # not yet have been started in the fork profiler&.start !!profiler end |
.supported? ⇒ Boolean
10 11 12 |
# File 'lib/datadog/profiling.rb', line 10 def self.supported? unsupported_reason.nil? end |
.unsupported_reason ⇒ Object
14 15 16 17 18 19 |
# File 'lib/datadog/profiling.rb', line 14 def self.unsupported_reason # NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users # first that they can't use this on JRuby before telling them that something else failed native_library_compilation_skipped? || native_library_failed_to_load? end |
.wait_until_running(timeout_seconds: 5) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/datadog/profiling.rb', line 69 def self.wait_until_running(timeout_seconds: 5) profiler = Datadog.send(:components).profiler if profiler # Use .send(...) to avoid exposing the attr_reader as an API to the outside worker = profiler.send(:worker) worker.wait_until_running(timeout_seconds: timeout_seconds) else raise 'Profiler not enabled or available' end end |