class Dasht::LogThread

Attributes

parent[RW]

Public Class Methods

new(parent, command) click to toggle source
# File lib/dasht/log_thread.rb, line 13
def initialize(parent, command)
  @parent            = parent
  @command           = command
  @event_definitions = []
end
update_global_stats(line) click to toggle source
# File lib/dasht/log_thread.rb, line 5
def self.update_global_stats(line)
  @total_lines ||= 0
  @total_bytes ||= 0
  @total_lines += 1
  @total_bytes += line.length
  print "\rConsumed #{@total_lines} lines (#{@total_bytes} bytes)..."
end

Public Instance Methods

append(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 62
def append(metric, regex, &block)
  event(metric, regex, :to_a, nil, &block)
end
count(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 46
def count(metric, regex, &block)
  event(metric, regex, :dasht_sum, 1, &block)
end
event(metric, regex, op, value = nil, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 42
def event(metric, regex, op, value = nil, &block)
  @event_definitions << [metric, regex, op, value, block]
end
gauge(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 50
def gauge(metric, regex, &block)
  event(metric, regex, :last, nil, &block)
end
max(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 58
def max(metric, regex, &block)
  event(metric, regex, :max, nil, &block)
end
min(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 54
def min(metric, regex, &block)
  event(metric, regex, :min, nil, &block)
end
run() click to toggle source
# File lib/dasht/log_thread.rb, line 19
def run
  parent.log "Starting `#{@command}`..."
  @thread = Thread.new do
    begin
      while true
        begin
          IO.popen(@command) do |process|
            process.each do |line|
              _consume_line(line)
            end
          end
        rescue => e
          parent.log e
        end
        sleep 2
      end
    rescue => e
      parent.log e
      raise e
    end
  end
end
terminate() click to toggle source
# File lib/dasht/log_thread.rb, line 70
def terminate
  @thread.terminate
end
unique(metric, regex, &block) click to toggle source
# File lib/dasht/log_thread.rb, line 66
def unique(metric, regex, &block)
  event(metric, regex, :uniq, nil, &block)
end

Private Instance Methods

_consume_line(line) click to toggle source
# File lib/dasht/log_thread.rb, line 76
def _consume_line(line)
  self.class.update_global_stats(line)
  ts = Time.now.to_i
  @event_definitions.each do |metric, regex, op, value, block|
    begin
      regex.match(line) do |matches|
        value = matches[0] if value.nil?
        value = block.call(matches) if block
        parent.metrics.set(metric, value, op, ts) if value
      end
    rescue => e
      parent.log e
      raise e
    end
    parent.metrics.trim_to(ts - (parent.history || (60 * 60)))
  end
end