Created
July 17, 2015 18:12
-
-
Save jaimegago/c77b27551bf2996b81c5 to your computer and use it in GitHub Desktop.
Sensu delete dead clients
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
#!/usr/bin/python -tt | |
import json | |
import optparse | |
import requests | |
import sys | |
def get_dead_sensu_clients(sensu_server, sensu_port): | |
get_dead_clients_url = 'http://%s:%s/events' % (sensu_server, sensu_port) | |
try: | |
response = requests.get(get_dead_clients_url) | |
except Exception as e: | |
print 'Failed to get sensu events from: %s' % get_dead_clients_url | |
print e | |
sys.exit(1) | |
try: | |
events = response.json() | |
except Exception as e: | |
print 'Seems like the sensu server did not return valid JSON' | |
print 'Text response from %s: %s' % (get_clients_url, response.text) | |
print e | |
sys.exit(1) | |
dead_clients = [] | |
for event in events: | |
if event['check']['name'] == 'keepalive': | |
dead_clients.append(event['client']['name']) | |
return dead_clients | |
def delete_sensu_clients(sensu_server, sensu_port, sensu_clients_names, debug): | |
for sensu_client_name in sensu_clients_names: | |
delete_url = 'http://%s:%s/client/%s' % (sensu_server, sensu_port, | |
sensu_client_name) | |
try: | |
requests.delete(delete_url) | |
if debug: | |
print 'deleted: ' + sensu_client_name | |
print '---------------------------------------' | |
except Exception as e: | |
print 'failed to delete' + sensu_client_name | |
print e | |
if debug: | |
print 'deleted %s clients' % len(sensu_clients_names) | |
def main(): | |
parser = optparse.OptionParser() | |
parser.add_option('-s', '--sensu-server', | |
help = 'Sensu server to talk to delete clients from', | |
dest = 'sensu_server', | |
metavar = 'SENSU_SERVER') | |
parser.add_option('-p', '--sensu-port', | |
help = 'Sensu API port defaults to 4567', | |
dest = 'sensu_port', | |
default = 4567, | |
metavar = 'SENSU_PORT') | |
parser.add_option('-d', '--debug', | |
help = 'Debug mode', | |
dest = 'debug', | |
action = 'store_true', | |
default = False, | |
metavar = 'DEBUG_MODE') | |
(options, args) = parser.parse_args() | |
if not options.sensu_server: | |
print 'Sensu server needed, use -h for help' | |
sys.exit(1) | |
sensu_server = options.sensu_server | |
sensu_port = options.sensu_port | |
sensu_clients_names = get_dead_sensu_clients(sensu_server, sensu_port) | |
if not sensu_clients_names: | |
print 'No dead sensu client found, noop' | |
sys.exit(0) | |
delete_sensu_clients(sensu_server, sensu_port, sensu_clients_names, | |
debug=options.debug) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Requires python requests module (does not ship with core python atm)