Created
November 2, 2016 17:40
-
-
Save cabecada/640c0c1fc8686f6b1bdca13fce88ef44 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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