Sha256: bab3772fb23706077402ac684feb7f01a50f3d31b61bd2c3d9042ba399542158
Contents?: true
Size: 1.43 KB
Versions: 2
Compression:
Stored size: 1.43 KB
Contents
# typed: true module Datadog module Profiling module Tasks # Wraps command with Datadog tracing class Exec attr_reader :args def initialize(args) @args = args end def run set_rubyopt! exec_with_error_handling(args) end def rubyopts [ '-rdatadog/profiling/preload' ] end private def set_rubyopt! existing_rubyopt = ENV['RUBYOPT'] ENV['RUBYOPT'] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(' ')}" : rubyopts.join(' ') end # If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and # follow the same status codes as the shell uses # See also: # * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html # * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45 def exec_with_error_handling(args) Kernel.exec(*args) rescue Errno::ENOENT => e Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')" Kernel.exit 127 rescue Errno::EACCES, Errno::ENOEXEC => e Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')" Kernel.exit 126 end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-1.0.0 | lib/datadog/profiling/tasks/exec.rb |
ddtrace-1.0.0.beta2 | lib/datadog/profiling/tasks/exec.rb |