class ProbeListener
Public Class Methods
new(name, is_hash)
click to toggle source
# File lib/dtracer/probe_listener.rb, line 5 def initialize(name, is_hash) @name = name @probe_string = probe_string(name) @is_hash = is_hash end
Public Instance Methods
listen() { |value| ... }
click to toggle source
# File lib/dtracer/probe_listener.rb, line 11 def listen write_probe cmd = "sudo dtrace -s #{trace_file_path}" IO.popen(cmd) do |stdout| stdout.each do |line| if @is_hash value = try_parse(line) next unless value else value = line.strip next if value.empty? end puts "\n#{@name.capitalize}----------------------------------------------" yield(value) end end clean_up end
Private Instance Methods
clean_up()
click to toggle source
# File lib/dtracer/probe_listener.rb, line 57 def clean_up @file.unlink @file.close end
probe_string(name)
click to toggle source
# File lib/dtracer/probe_listener.rb, line 42 def probe_string(name) builder = DTracer::Builder.new builder.add_options(true) builder.add_begin_probe builder.add_probe(name) builder.build end
trace_file_path()
click to toggle source
# File lib/dtracer/probe_listener.rb, line 62 def trace_file_path @file.path end
try_parse(string)
click to toggle source
# File lib/dtracer/probe_listener.rb, line 36 def try_parse(string) JSON.parse(string) rescue nil end
write_probe()
click to toggle source
# File lib/dtracer/probe_listener.rb, line 51 def write_probe @file = Tempfile.new('temp.d') @file.write(@probe_string) @file.flush end