class Collector

Public Class Methods

new() click to toggle source
# File lib/collector.rb, line 7
def initialize
  @blacklist = ['Altroot']
  @summary_metrics = { 'UnhealthyCount' => Metric.method(:sum), 'Capacity' => Metric.method(:mean),
                       'Size' => Metric.method(:sum) }
  @processor = Processor.new
  @converter = Converter.new
end

Public Instance Methods

collect_stats() click to toggle source
# File lib/collector.rb, line 14
def collect_stats
  metrics = []
  first = true

  run_command.each_line do |line|
    if first
      puts 'Processing as a header line'
      puts line
      @processor.process_header_line(line)
      first = false
    else
      puts 'Processing as a metric line'
      puts line
      metrics = metrics + @processor.line_to_metrics(line)
    end
  end

  puts 'Filtering out blacklist metrics'
  metrics = metrics.find_all { |metric|
    !@blacklist.include?(metric.name)
  }

  #Convert the value first, otherwise adding won't work when calculating summary metrics
  puts 'Starting to convert metrics'
  metrics = convert_metrics(metrics)
  puts 'Finished converting metrics'
  puts 'Starting to calculate and convert summary metrics'
  metrics = metrics + convert_metrics(get_summary_metrics(metrics))
  puts 'Finished calculating and converting summary metrics'

  metrics
end
convert_metrics(metrics) click to toggle source
# File lib/collector.rb, line 73
def convert_metrics(metrics)
  metrics.each do |metric|
    puts "Converting metric name: #{metric.name}"
    metric.name = @converter.convert_name(metric)
    puts "Metric name is now: #{metric.name}"
    puts "Converting metric value #{metric.value}"
    metric.set_value @converter.convert_value(metric)
    puts "Value is now: #{metric.value}"
    puts "Converting metric unit: #{metric.unit}"
    metric.unit = @converter.convert_unit(metric)
    puts "Unit is now: #{metric.unit}"
  end
end
get_summary_metrics(metrics) click to toggle source
# File lib/collector.rb, line 47
def get_summary_metrics(metrics)
  puts 'Started to calculate summary metrics'
  metrics_hash = {}
  metrics.each do |metric|
    puts "Processing metric #{metric.name}"
    if @summary_metrics.has_key?(metric.name)
      puts 'Metric is in summmary metrics list, processing it'
      summary_metric = metrics_hash[metric.name]
      if summary_metric.nil?
        puts 'No previous summary metric existed, creating a new one'
        summary_metric = Metric.new
        summary_metric.name = metric.name
        summary_metric.unit = metric.unit
        summary_metric.aggregate_function = @summary_metrics[metric.name]
        metrics_hash[metric.name] = summary_metric
      end

      puts "Adding value #{metric.value} to summary metric #{summary_metric.name}"
      summary_metric.add_value(metric.value)
    end
  end

  puts 'Finished calculating summary metrics'
  metrics_hash.values
end
run_command() click to toggle source
# File lib/collector.rb, line 87
def run_command
  `zpool list`
end