code-lever/brigade-monitor-gem

View on GitHub
bin/brigade-monitor

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby

require 'awesome_print'
require 'brigade/monitor'
require 'cgminer/api'
require 'logger'
require 'optparse'
require 'yaml'

me = File.basename(__FILE__)

log = Logger.new(STDOUT)
log.level = Logger::WARN

options = {}
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{me} [options]"
  opts.on('-s', '--sample [FILE]', String, 'Write a sample configuration file') do |file|
    file ||= 'config.yaml'
    File.open(file, 'w') do |f|
      f.write <<EOF
# Set the api-key value to your API key from brigade.io
# or, specify via command line, if that's your thing.
api-key: REPLACE_WITH_API_KEY

# Add the miners you wish to monitor with this agent.
# port is optional, it defaults to the cgminer default of 4028.
miners:
  'Unnamed Miner 1':
    host: miner1_hostname
  'Unnamed Miner 2':
    host: miner2_hostname
    port: 4029
EOF
    end
    puts "Sample configuration written to #{file}"
    exit
  end
  opts.on('-c', '--config FILE', String, 'YAML configuration file') do |c|
    options[:config] = c
  end
  opts.on('-k', '--key API-KEY', String, 'Brigade API key') do |key|
    options[:key] = key
  end
  opts.on('-d', '--debug LEVEL', [:debug, :info], 'Debug level (debug, info)') do |dbg|
    log.level = { debug: Logger::DEBUG, info: Logger::INFO }.fetch(dbg, Logger::WARN)
  end
  opts.on('-v', '--version', 'Print application version') do
    puts "#{me} v#{Brigade::Monitor::VERSION}"
    exit
  end
end.parse!

fail 'Configuration file is required' unless options[:config]

begin
  config = YAML.load(open(options[:config]).read)
rescue => e
  puts 'An error occurred parsing configuration file'
  fail
end

key = options.fetch(:key, config['api-key'])
fail 'Brigade API key is required' if key.nil?

# build a hash-o-miner clients
miners = config['miners'].map do |miner|
  client = CGMiner::API::Client.new(miner[1]['host'], miner[1]['port'] || 4028)
  { name: miner[0], client: client }
end

monitor = Brigade::Monitor::Monitor.new(key, miners, log)
monitor.run