def loop(first_start=False): global _ShedulerTask lg.out(4, 'os_windows_update.loop mode=' + str(settings.getUpdatesMode())) if settings.getUpdatesMode() == settings.getUpdatesModeValues()[2]: lg.out(4, 'os_windows_update.loop is finishing. updates is turned off') return shed = schedule.Schedule(from_dict=read_shedule_dict()) nexttime = shed.next_time() # nexttime = next(d) if first_start: nexttime = time.time() if nexttime is None: lg.out(1, 'os_windows_update.loop ERROR calculating shedule interval') return if nexttime < 0: lg.out(1, 'os_windows_update.loop nexttime=%s' % str(nexttime)) return # DEBUG # nexttime = time.time() + 60.0 delay = nexttime - time.time() if delay < 0: lg.warn('delay=%s %s' % (str(delay), shed)) delay = 0 lg.out( 6, 'os_windows_update.loop run_sheduled_update will start after %s seconds (%s hours)' % (str(delay), str(delay / 3600.0))) _ShedulerTask = reactor.callLater(delay, run_sheduled_update)
def __init__(self): #config logger self.loglvl = LOGLVL if not self.loglvl == logging.DEBUG: self.logfile = 'handle.log' else: self.logfile = 'server.log' logging.basicConfig(level=self.loglvl, filename=self.logfile, format='%(asctime)s %(name)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') self.log = logging.getLogger('HANDLE') #create task q self.tasks = Queue.Queue(maxsize=0) #create database self.database = server.Database(self.tasks) self.database.loadconfig() self.checkin() self.database.create_default_events() #create sever controller self.server = server.Bukkit(self.database, self) #create networking self.network = network.Network(self.tasks) #create schedule self.schedule = schedule.Schedule(self.tasks) #create api connection self.api = api.Api(self.tasks) #create backup self.backup = server.Backup(self.tasks) #put startup tasks self.network.cmd_q.put(NetworkCommand(NetworkCommand.SERVE,('',int(self.database.config['Handle']['port'])))) #define task handlers self.handlers = { Task.HDL_COMMAND:self.__hdl_command, Task.HDL_EXIT:self.__hdl_exit, Task.HDL_UPDATE:self.__hdl_update, Task.HDL_CHECKUP:self.__hdl_checkup, Task.NET_JOB:self.__net_job, Task.NET_SCREEN:self.__net_screen, Task.NET_VERSION:self.__net_version, Task.NET_LINEUP:self.__net_lineup, Task.NET_UPPKG:self.__net_uppkg, Task.SRV_START:self.__srv_start, Task.SRV_STOP:self.__srv_stop, Task.SRV_RESTART:self.__srv_restart, Task.SRV_INPUT:self.__srv_input, Task.CLT_UPDATE:self.__clt_update, Task.SCH_ADD:self.__sch_add, Task.SCH_REMOVE:self.__sch_remove, Task.SCH_UPDATE:self.__sch_update, Task.API_REGISTER:self.__api_register, Task.API_REMOVE:self.__api_remove, Task.API_GET:self.__api_get, Task.API_UPDATE:self.__api_update, Task.API_CONNECT:self.__api_connect, Task.ON_CONNECT:self.__on_connect, Task.SRV_BACKUP:self.__srv_backup, } #set alive flag self.alive = threading.Event() self.alive.set() self.pid = os.getpid() open("handle.pid", "w").write(str(self.pid)) threading.Thread.__init__( self )