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