def check_interval(self): from procfs_reader import path_owner from time import sleep crons = [] for action in ('backup','archive'): for server in mc.list_servers_to_act(action, self.base_directory): crons.append( (action, server) ) for action, server in crons: try: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) getattr(mc(server, path_owner(path_), self.base_directory), 'commit')() except Exception: pass else: sleep(len(crons) * mc.COMMIT_DELAY) for action, server in crons: try: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) getattr(mc(server, path_owner(path_), self.base_directory), action)() sleep(mc.COMMIT_DELAY) except Exception: pass
def list_servers_to_act(cls, action, base_directory): """Generator listing all servers doing action at this minute in time""" from procfs_reader import path_owner from ConfigParser import NoOptionError, NoSectionError hits = [] msm = cls.minutes_since_midnight() if action == 'archive': section_option = ('crontabs', 'archive_interval') elif action == 'backup': section_option = ('crontabs', 'backup_interval') else: raise NotImplementedError("Requested action is not yet implemented.") for i in cls.list_servers(base_directory): path_ = os.path.join(base_directory, cls.DEFAULT_PATHS['servers'], i) owner_ = path_owner(path_) instance = cls(i, owner_, base_directory) try: interval = instance.server_config.getint(section_option[0],section_option[1]) '''at midnight, always archive. this works because if archive_interval is not type(int), e.g., 'skip' or '', it'll except ValueError, skipping the test altogether''' if msm == 0: hits.append(i) elif msm % interval == 0: hits.append(i) except (ZeroDivisionError, KeyError, ValueError, NoOptionError, NoSectionError): pass return hits
def check_interval(self): from procfs_reader import path_owner for action in ('backup','archive'): for i in mc.list_servers_to_act(action, self.base_directory): path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], i) getattr(mc(i, path_owner(path_), self.base_directory), action)()
def check_interval(self): from procfs_reader import path_owner for action in ('backup', 'archive'): for i in mc.list_servers_to_act(action, self.base_directory): path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], i) getattr(mc(i, path_owner(path_), self.base_directory), action)()
def list_servers_start_at_boot(cls, base_directory): hits = [] for i in cls.list_servers(base_directory): try: path_ = os.path.join(base_directory, cls.DEFAULT_PATHS['servers'], i) owner_ = procfs_reader.path_owner(path_) instance = cls(i, owner_, base_directory) if instance.server_config.getboolean('onreboot', 'start'): hits.append(i) except: pass return hits
def list_servers_start_at_boot(cls, base_directory): from procfs_reader import path_owner from ConfigParser import NoOptionError, NoSectionError hits = [] msm = cls.minutes_since_midnight() for i in cls.list_servers(base_directory): path_ = os.path.join(base_directory, cls.DEFAULT_PATHS['servers'], i) owner_ = path_owner(path_) instance = cls(i, owner_, base_directory) try: if instance.server_config.getboolean('onreboot', 'start'): hits.append(i) except (ValueError, KeyError, NoSectionError, NoOptionError): pass return hits
def list_servers_to_act(cls, action, base_directory): hits = [] msm = cls.minutes_since_midnight() section_option = ('crontabs', '%s_interval' % action) for i in cls.list_servers(base_directory): try: path_ = os.path.join(base_directory, cls.DEFAULT_PATHS['servers'], i) owner_ = procfs_reader.path_owner(path_) instance = cls(i, owner_, base_directory) interval = instance.server_config.getint( section_option[0], section_option[1]) if msm == 0: hits.append(i) elif msm % interval == 0: hits.append(i) except: continue return hits
from stock_profiles import STOCK_PROFILES profile = iter([i for i in STOCK_PROFILES if i['name'] == arguments[0]]).next() mc(**init_args).define_profile(profile) elif args.cmd == 'define_profile': from collections import OrderedDict profile = OrderedDict([(k,None) for k in ('name', 'type', 'url', 'save_as', 'run_as','ignore')]) for k,v in profile.iteritems(): profile[k] = raw_input('%s: ' % k) mc(**init_args).define_profile(profile) elif args.cmd == 'start': from procfs_reader import path_owner for i in mc.list_servers_start_at_boot(args.base_directory): try: owner = path_owner(os.path.join(args.base_directory, mc.DEFAULT_PATHS['servers'], i)) print 'starting %s...' % i, mc(i, owner, args.base_directory).start() print ' done' except Exception as ex: print ex.message elif args.cmd == 'stop': from procfs_reader import path_owner for i in mc.list_servers_up(): if os.path.samefile(i.base_dir, args.base_directory): try: srv_ = i.server_name owner = path_owner(os.path.join(i.base_dir, mc.DEFAULT_PATHS['servers'], srv_)) print "sending '%s' to %s..." % (args.cmd, srv_), instance = mc(srv_, owner, i.base_dir)._command_stuff(args.cmd) print ' done'
text = '%s %s' % (args.cmd, ' '.join(arguments)) instance._command_stuff(text) print( '{%s} sent to gameserver console [screen_pid:%s] successfully.' % (text, instance.screen_pid)) else: init_args = { 'server_name': 'throwaway', 'owner': getuser(), 'base_directory': args.base_directory } if args.cmd == 'start': for i in mc.list_servers_start_at_boot(args.base_directory): try: owner = path_owner( os.path.join(args.base_directory, mc.DEFAULT_PATHS['servers'], i)) print('starting %s...' % i, end=' ') mc(i, owner, args.base_directory).start() print(' done') except Exception as ex: print(ex) elif args.cmd == 'stop': for i in mc.list_servers_up(): try: srv_ = i.server_name owner = path_owner( os.path.join(args.base_directory, mc.DEFAULT_PATHS['servers'], srv_)) print("sending '%s' to %s..." % (args.cmd, srv_), end=' ') instance = mc(srv_, owner,
def check_interval(self): from procfs_reader import path_owner from time import sleep from subprocess import CalledProcessError crons = [] for action in ('restart', 'backup', 'archive'): for server in mc.list_servers_to_act(action, self.base_directory): crons.append((action, server)) for action in ('backups_keep', 'archives_keep'): for server in mc.list_servers_to_prune(action, self.base_directory): crons.append((action, server)) for server in set(s for a, s in crons): path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) cherrypy.log('[%s] commit' % server) try: instance._command_stuff('save-off') instance.commit() except RuntimeError: pass else: cherrypy.log( '[%s] commit command received by process; sleeping %ssec' % (server, self.commit_delay)) sleep(self.commit_delay) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': cherrypy.log('[%s] stop' % server) try: instance._command_stuff('stop') except RuntimeError: pass else: cherrypy.log( '[%s] stop command received by process; sleeping %ssec' % (server, self.commit_delay)) sleep(self.commit_delay) elif action in ('backup', 'archive'): cherrypy.log('[%s] %s (Server Up: %s)' % (server, action, instance.up)) try: getattr(instance, action)() except CalledProcessError as e: cherrypy.log('[%s] %s exception: returncode %s' % (server, action, e.returncode)) cherrypy.log(e.output) except RuntimeError: cherrypy.log( '[%s] %s exception: server state changed since beginning of %s.' % (server, action, action)) cherrypy.log('[%s] %s (Server Up: %s)' % (server, action, instance.up)) cherrypy.log( 'You may need to increase mineos.conf => server.commit_delay' ) else: cherrypy.log( '[%s] %s return code reports success; sleeping 3sec' % (server, action)) sleep(3) elif action in ('backups_keep', 'archives_keep'): param = instance.server_config.getint('crontabs', action) cherrypy.log('[%s] %s %s (Server Up: %s)' % (server, action, param, instance.up)) try: getattr(instance, action)(param) except CalledProcessError as e: cherrypy.log('[%s] %s exception: returncode %s' % (server, action, e.returncode)) cherrypy.log(e.output) except RuntimeError: cherrypy.log( '[%s] %s exception: server state changed since beginning of %s.' % (server, action, action)) cherrypy.log('[%s] %s (Server Up: %s)' % (server, action, instance.up)) cherrypy.log( 'You may need to increase mineos.conf => server.commit_delay' ) else: cherrypy.log( '[%s] %s return code reports success; sleeping 3sec' % (server, action)) sleep(3) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': if instance.up: cherrypy.log('[%s] extra delay; sleeping %s seconds' % (server, self.commit_delay)) sleep(self.commit_delay) cherrypy.log('[%s] start' % server) try: instance.start() except RuntimeError: pass else: cherrypy.log('[%s] started; sleeping %s seconds' % (server, self.commit_delay)) sleep(self.commit_delay)
def check_interval(self): from procfs_reader import path_owner from time import sleep from subprocess import CalledProcessError crons = [] for action in ('restart','backup','archive'): for server in mc.list_servers_to_act(action, self.base_directory): crons.append( (action, server) ) for server in set(s for a,s in crons): path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) cherrypy.log('[%s] commit' % server) try: instance._command_stuff('save-off') instance.commit() except RuntimeError: pass else: sleep(self.commit_delay) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': cherrypy.log('[%s] stop' % server) try: instance._command_stuff('stop') except RuntimeError: pass else: sleep(self.commit_delay) elif action in ('backup', 'archive'): cherrypy.log('[%s] %s' % (server, action)) try: getattr(instance, action)() except CalledProcessError as e: cherrypy.log('[%s] %s exception: returncode %s' % (server, action, e.returncode)) cherrypy.log(e.output) else: sleep(self.commit_delay) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': if instance.up: cherrypy.log('[%s] extra delay' % server) sleep(self.commit_delay) cherrypy.log('[%s] start' % server) try: instance.start() except RuntimeError: pass else: sleep(self.commit_delay)
def check_interval(self): from procfs_reader import path_owner from time import sleep from subprocess import CalledProcessError crons = [] for action in ('restart','backup','archive'): for server in mc.list_servers_to_act(action, self.base_directory): crons.append( (action, server) ) for server in set(s for a,s in crons): path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) cherrypy.log('[%s] commit' % server) try: instance._command_stuff('save-off') instance.commit() except RuntimeError: pass else: cherrypy.log('[%s] commit command received by process; sleeping %ssec' % (server, self.commit_delay)) sleep(self.commit_delay) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': cherrypy.log('[%s] stop' % server) try: instance._command_stuff('stop') except RuntimeError: pass else: cherrypy.log('[%s] stop command received by process; sleeping %ssec' % (server, self.commit_delay)) sleep(self.commit_delay) elif action in ('backup', 'archive'): cherrypy.log('[%s] %s (Server Up: %s)' % (server, action, instance.up)) try: getattr(instance, action)() except CalledProcessError as e: cherrypy.log('[%s] %s exception: returncode %s' % (server, action, e.returncode)) cherrypy.log(e.output) except RuntimeError: cherrypy.log('[%s] %s exception: server state changed since beginning of %s.' % (server, action, action)) cherrypy.log('[%s] %s (Server Up: %s)' % (server, action, instance.up)) cherrypy.log('You may need to increase mineos.conf => server.commit_delay') else: cherrypy.log('[%s] %s return code reports success; sleeping 3sec' % (server, action)) sleep(3) for action, server in crons: path_ = os.path.join(self.base_directory, mc.DEFAULT_PATHS['servers'], server) instance = mc(server, path_owner(path_), self.base_directory) if action == 'restart': if instance.up: cherrypy.log('[%s] extra delay; sleeping %s seconds' % (server, self.commit_delay)) sleep(self.commit_delay) cherrypy.log('[%s] start' % server) try: instance.start() except RuntimeError: pass else: cherrypy.log('[%s] started; sleeping %s seconds' % (server, self.commit_delay)) sleep(self.commit_delay)