class Lumbersexual::Plugin::Latency

Public Class Methods

new(options, *args) click to toggle source
# File lib/lumbersexual/plugin/latency.rb, line 15
def initialize(options, *args)
  @options = options
  @found = false
end

Public Instance Methods

perform() click to toggle source
# File lib/lumbersexual/plugin/latency.rb, line 20
def perform
  if @options[:log]
    elastic = Elasticsearch::Client.new url: @options[:uri], logger: Logger.new(STDERR), log: @options[:log]
  else
    elastic = Elasticsearch::Client.new url: @options[:uri]
  end

  if @options[:all]
    index_name = '_all'
  else
    index_name = Time.now.strftime('logstash-%Y.%m.%d')
  end

  @uuid = SecureRandom.uuid.delete('-')
  @sleep_count = 0
  @start_time = Time.now
  Timeout::timeout(@options[:timeout]) {
    syslog = Syslog.open('lumbersexual-ping', Syslog::LOG_CONS | Syslog::LOG_NDELAY | Syslog::LOG_PID, Syslog::LOG_INFO)
    syslog.log(Syslog::LOG_WARNING, @uuid)
    puts "Logged #{@uuid} at #{Time.now} (#{Time.now.to_i})"
    syslog.close

    until @found do
      result = elastic.search index: index_name, q: @uuid
      @found = true if result['hits']['total'] > 0
      @sleep_count += 1
      sleep @options[:interval]
    end
  }

  @end_time = Time.now
  puts "Found #{@uuid} at #{Time.now} (#{Time.now.to_i})"
  raise Interrupt
end
report() click to toggle source
# File lib/lumbersexual/plugin/latency.rb, line 55
def report
  statsd = Statsd.new(@options[:statsdhost]).tap { |s| s.namespace = "lumbersexual.latency" } if @options[:statsdhost]

  if @found
    latency = @end_time - @start_time
    adjusted_latency = latency - (@options[:interval] * @sleep_count)
    puts "Measured Latency: #{latency}"
    puts "Interval Adjusted Latency: #{adjusted_latency}"
    statsd.gauge 'runs.failed', 0 if @options[:statsdhost]
    statsd.gauge 'runs.successful', 1 if @options[:statsdhost]
    statsd.gauge 'rtt.measured', latency if @options[:statsdhost] if @options[:statsdhost]
    statsd.gauge 'rtt.adjusted', adjusted_latency if @options[:statsdhost] if @options[:statsdhost]
  else
    statsd.gauge 'runs.failed', 1 if @options[:statsdhost]
    statsd.gauge 'runs.successful', 0 if @options[:statsdhost]
    puts "Latency: unknown, uuid #{@uuid} not found"
  end
end