Skip to content

Instantly share code, notes, and snippets.

@jaimegago
Created July 17, 2015 18:12
Show Gist options
  • Save jaimegago/c77b27551bf2996b81c5 to your computer and use it in GitHub Desktop.
Save jaimegago/c77b27551bf2996b81c5 to your computer and use it in GitHub Desktop.
Sensu delete dead clients
#!/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()
@jaimegago
Copy link
Author

Requires python requests module (does not ship with core python atm)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment