Sha256: c4c9137677d2fd1cb50f1478223d211d68dcf731b12dd2ed66d8fccbd349a197
Contents?: true
Size: 1.44 KB
Versions: 2
Compression:
Stored size: 1.44 KB
Contents
# frozen_string_literal: true module Datadog module Profiling # Profiling entry point, which coordinates the worker and scheduler threads class Profiler include Datadog::Core::Utils::Forking private attr_reader :worker, :scheduler public def initialize(worker:, scheduler:) @worker = worker @scheduler = scheduler end def start after_fork! do worker.reset_after_fork scheduler.reset_after_fork end worker.start(on_failure_proc: proc { component_failed(:worker) }) scheduler.start(on_failure_proc: proc { component_failed(:scheduler) }) end def shutdown! Datadog.logger.debug('Shutting down profiler') stop_worker stop_scheduler end private def stop_worker worker.stop end def stop_scheduler scheduler.enabled = false scheduler.stop(true) end def component_failed(failed_component) Datadog.logger.warn( "Detected issue with profiler (#{failed_component} component), stopping profiling. " \ 'See previous log messages for details.' ) if failed_component == :worker stop_scheduler elsif failed_component == :scheduler stop_worker else raise ArgumentError, "Unexpected failed_component: #{failed_component.inspect}" end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
datadog-2.0.0.beta2 | lib/datadog/profiling/profiler.rb |
datadog-2.0.0.beta1 | lib/datadog/profiling/profiler.rb |