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

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

add postinst

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/env python
2###
3#
4###
5
6import os,socket
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=0
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                prefixes=['remote','local']
43                try:
44                        socket.gethostbyname('server')
45                except:
46                        prefixes=['local']
47                for prefix in prefixes:
48                        if prefix=='remote':
49                                n4d=xmlrpc.ServerProxy("https://server:9779")
50                        else:
51                                n4d=xmlrpc.ServerProxy("https://localhost:9779")
52                        tasks=n4d.get_tasks("","SchedulerServer",prefix)['data']
53                        #Delete files
54                        for f in os.listdir(self.cron_dir):
55                                if f.startswith(prefix):
56                                        os.remove(self.cron_dir+'/'+f)
57                        #Create the cron files
58                        task_names={}
59                        for task in tasks:
60                                for name in task.keys():
61                                        self._debug("Scheduling %s"%name)
62                                        fname=name.replace(' ','_')
63                                        task_names[fname]=task
64                                        self._write_crontab_for_task(task_names[fname],prefix)
65
66        #def process_tasks
67
68        def _write_crontab_for_task(self,ftask,prefix):
69                task=list(ftask.keys())[0]
70                for task_name,task_data in ftask.items():
71                        fname=self.cron_dir+'/'+prefix+task_name.replace(' ','_')
72                        cron_array=[]
73                        for task_serial,task_info in task_data.items():
74                                cron_task=("%s %s %s %s %s root %s"%(task_info['m'],task_info['h'],task_info['dom'],\
75                                                                task_info['mon'],task_info['dow'],task_info['cmd']))
76                                cron_array.append(cron_task)
77                        if task_data:
78                                with open(fname,'w') as data:
79                                        data.write('#Scheduler tasks\n')
80                                        data.write('SHELL=/bin/sh\n')
81                                        data.write('PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n')
82                                        data.write('DISPLAY=:0\n')
83                                        for cron_line in cron_array:
84                                                data.write(cron_line+"\n")
85        #def _write_crontab_for_task
86
Note: See TracBrowser for help on using the repository browser.