#!/usr/bin/env python ### # ### # -*- coding: utf-8 -*- import os,socket import threading import time from datetime import date #import xmlrpclib as xmlrpc import signal import n4d.responses import n4d.client as n4dclient import n4d.server.core as n4dCore class SchedulerClient(): def __init__(self): self.dbg=False self.task_prefix='remote-' #Temp workaround->Must be declared on a n4d var self.cron_dir='/etc/cron.d' self.count=0 self.holidays_shell="/usr/bin/check_holidays.py" self.pidfile="/tmp/taskscheduler.pid" self.core=n4dCore.Core.get_core() self.n4dclient=self._n4d_connect('localhost') def startup(self,options): t=threading.Thread(target=self._main_thread) t.daemon=True t.start() def _debug(self,msg): if self.dbg: print("{}".format(msg)) def _main_thread(self): self.core.register_variable_trigger("SCHEDULED_TASKS","SchedulerClient",self.process_tasks) tries=10 for x in range (0,tries): #self.scheduler_var=objects["VariablesManager"].get_variable("SCHEDULED_TASKS") self.scheduler_var=self.core.get_variable("SCHEDULED_TASKS")["return"] if self.scheduler_var!=self.count: self.count=self.scheduler_var self.process_tasks() else: time.sleep(1) def process_tasks(self,data=None): self._debug("Scheduling tasks2") today=date.today() prefixes={'remote':True,'local':False} tasks={} try: socket.gethostbyname('server') except: prefixes={'local':False} for prefix,sw_remote in prefixes.items(): if prefix=='remote': plugin="SchedulerServer" method="get_remote_tasks" proxy=n4dclient.Proxy(self.n4dclient,plugin,method) tasks=proxy.call() else: plugin="SchedulerServer" method="get_local_tasks" proxy=n4dclient.Proxy(self.n4dclient,plugin,method) tasks=proxy.call() #Delete files for f in os.listdir(self.cron_dir): if f.startswith(prefix): os.remove(self.cron_dir+'/'+f) #Create the cron files for name in tasks.keys(): task_names={} self._debug("Processing task: %s"%name) for serial in tasks[name].keys(): self._debug("Item {}".format(serial)) sw_pass=False if 'autoremove' in tasks[name][serial]: if (tasks[name][serial]['mon'].isdigit()): mon=int(tasks[name][serial]['mon']) if mon