import argparse import sys import time from pymemcache.client.base import Client import phpserialize MR_MAINTENANCE_KEY = 'masters_registry_maintenance' MEMCACHED_SERIALIZE_FLAG = 1 parser = argparse.ArgumentParser( description='Toggle MastersRegistry maintenance state by switching the ' 'flag value in memcached.', usage='toggle_maintenance.py [start|stop] -h [memcache_host]' ' -p [memcache_port]', add_help=False ) parser.add_argument('action', choices=['start', 'stop']) parser.add_argument('-h', '--host', dest='host') parser.add_argument('-p', '--port', dest='port', type=int) args = parser.parse_args() STATE_MESSAGES = { 0: 'disabled', 1: 'enabled' } try: client = Client( (args.host, args.port), serializer=lambda key, value: (value, MEMCACHED_SERIALIZE_FLAG)) val = 1 if args.action == 'start' else 0 memcached_list = [ 'b:{};'.format(val).encode(), int(time.time()), '1800'.encode()] new_value = phpserialize.dumps(memcached_list) client.set(MR_MAINTENANCE_KEY, new_value) print('Maintenance state switched to:', STATE_MESSAGES.get(val)) except Exception as ex: print('Failed to access memcached server. Error: %s', ex) sys.exit(1)