Skip to content

Instantly share code, notes, and snippets.

@cabecada
Created November 2, 2016 17:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cabecada/640c0c1fc8686f6b1bdca13fce88ef44 to your computer and use it in GitHub Desktop.
Save cabecada/640c0c1fc8686f6b1bdca13fce88ef44 to your computer and use it in GitHub Desktop.
#!/opt/sensu/embedded/bin/ruby
require 'net/http'
require 'json'
require 'optparse'
module Sensu
class Api
attr_reader :server, :port
def initialize(server='localhost', port=4567)
@server = server
@port = port
@http = Net::HTTP.new(@server, @port)
@http.set_debug_output($stdout) if $DEBUG
end
def headers
{'api-proxy' => 'true', 'Content-Type' => 'application/json'}
end
def http
@http ||= Net::HTTP.new(@server, @port)
@http.set_debug_output($stdout) if $DEBUG
@http
end
def make_request(action, path, headers, content=false)
if action == "get"
req = Net::HTTP::Get.new(URI.encode(path), headers)
elsif action == "post"
req = Net::HTTP::Post.new(URI.encode(path), headers)
req.body = content.to_json
elsif action == "delete"
req = Net::HTTP::Delete.new(URI.encode(path), headers)
else
raise 'Invalid Request'
end
begin
http.request(req)
rescue Timeout::Error
puts 'HTTP request has timed out.'
exit 1
rescue StandardError => e
puts 'An HTTP error occurred'
puts e
exit 1
end
end
def get_request(path)
make_request('get', path, headers)
end
def post_request(path, content)
make_request('post', path, headers, content)
end
def delete_request(path)
make_request('delete', path, headers)
end
def parse_response(res)
JSON.parse(res.body)
end
def events
return @events if @events
res = get_request('/events')
if res.code == '200'
@events ||= parse_response(res)
else
puts "Failed with #{res.code}, #{res.body}"
exit 1
end
end
def run
events.each do |event|
if event['check']['output'].strip.empty? || event['check']['status'].to_i > 4
p event['client']['name']
end
end
end
end
end
def parse_options
options = {:server => 'localhost'}
parser = OptionParser.new do |opts|
opts.banner = "Usage: migrate.rb [options]"
opts.on("-s", "--server server", "Sensu Server") do |server|
options[:server] = server
end
opts.on("-h", "--help", "Help") do |server|
puts opts
exit 1
end
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
options[:verbose] = v
end
end
parser.parse!
options
end
def list_weird_sensu_clients
options = parse_options
$DEBUG = options[:verbose]
Sensu::Api.new(options[:server]).run
end
list_weird_sensu_clients
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment