source: taskScheduler/trunk/fuentes/client-scheduler.install/usr/share/n4d/python-plugins/SchedulerClient.py @ 6078

Last change on this file since 6078 was 6078, checked in by Juanma, 2 years ago

Initial Release

  • Property svn:executable set to *
File size: 2.0 KB
Line 
1#!/usr/bin/env python
2###
3#
4###
5
6import os
7import threading
8import time
9import xmlrpclib as xmlrpc
10
11class SchedulerClient():
12        def __init__(self):
13                self.cron_dir='/etc/cron.d'
14                self.task_prefix='remote-' #Temp workaround->Must be declared on a n4d var
15                self.cron_dir='/etc/cron.d'
16                self.count=0
17                self.dbg=1
18
19        def startup(self,options):
20                t=threading.Thread(target=self._main_thread)
21                t.daemon=True
22                t.start()
23
24        def _debug(self,msg):
25                if self.dbg:
26                        print(str(msg))
27
28        def _main_thread(self):
29                objects["VariablesManager"].register_trigger("SCHEDULED_TASKS","SchedulerClient",self.process_tasks)
30                tries=10
31                for x in range (0,tries):
32                        self.scheduler_var=objects["VariablesManager"].get_variable("SCHEDULED_TASKS")
33                        if self.scheduler_var!=self.count:
34                                self.count=self.scheduler_var
35                                self.process_tasks()
36                                break
37                        else:
38                                time.sleep(1)
39
40        def process_tasks(self,data=None):
41                self._debug("Scheduling tasks")
42                n4d=xmlrpc.ServerProxy("https://server:9779")
43                tasks=n4d.get_tasks("","ServerScheduler")
44                #Create the cron files
45                task_names={}
46                for task in tasks:
47                        for name in task.keys():
48                                self._debug("Scheduling %s"%name)
49                                fname=name.replace(' ','_')
50                                task_names[fname]=task
51                                self._write_crontab_for_task(task_names[fname])
52
53                #If a file is not in tasks delete it
54                for f in os.listdir(self.cron_dir):
55                        if f.startswith(self.task_prefix):
56                                fname=f.replace(self.task_prefix,'')
57                                if fname not in task_names.keys():
58                                        os.remove(cron_dir+'/'+f)
59        #def process_tasks
60
61        def _write_crontab_for_task(self,ftask):
62                task=list(ftask.keys())[0]
63                for task_name,task_data in ftask.items():
64                        fname=self.cron_dir+'/'+self.task_prefix+task_name.replace(' ','_')
65                        cron_array=[]
66                        for task_serial,task_info in task_data.items():
67                                cron_task=("%s %s %s %s %s %s"%(task_info['m'],task_info['h'],task_info['dom'],\
68                                                                task_info['mon'],task_info['dow'],task_info['cmd']))
69                                cron_array.append(cron_task)
70                        if task_data:
71                                with open(fname,'w') as data:
72                                        for cron_line in cron_array:
73                                                data.write(cron_line+"\n")
74        #def _write_crontab_for_task
75
Note: See TracBrowser for help on using the repository browser.