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

Last change on this file since 6763 was 6763, checked in by Juanma, 20 months ago

WIP on expert mode

  • Property svn:executable set to *
File size: 3.0 KB
Line 
1#!/usr/bin/env python
2###
3#
4###
5
6# -*- coding: utf-8 -*-
7import os,socket
8import threading
9import time
10import xmlrpclib as xmlrpc
11
12class SchedulerClient():
13        def __init__(self):
14                self.cron_dir='/etc/cron.d'
15                self.task_prefix='remote-' #Temp workaround->Must be declared on a n4d var
16                self.cron_dir='/etc/cron.d'
17                self.count=0
18                self.dbg=1
19
20        def startup(self,options):
21                t=threading.Thread(target=self._main_thread)
22                t.daemon=True
23                t.start()
24
25        def _debug(self,msg):
26                if self.dbg:
27                        print(str(msg))
28
29        def _main_thread(self):
30                objects["VariablesManager"].register_trigger("SCHEDULED_TASKS","SchedulerClient",self.process_tasks)
31                tries=10
32                for x in range (0,tries):
33                        self.scheduler_var=objects["VariablesManager"].get_variable("SCHEDULED_TASKS")
34                        if self.scheduler_var!=self.count:
35                                self.count=self.scheduler_var
36                                self.process_tasks()
37                                break
38                        else:
39                                time.sleep(1)
40
41        def process_tasks(self,data=None):
42                self._debug("Scheduling tasks")
43                prefixes={'remote':True,'local':False}
44                tasks={}
45                try:
46                        socket.gethostbyname('server')
47                except:
48                                prefixes={'local':False}
49                for prefix,sw_remote in prefixes.iteritems():
50                        if prefix=='remote':
51                                n4d=xmlrpc.ServerProxy("https://server:9779")
52                        else:
53                                n4d=xmlrpc.ServerProxy("https://localhost:9779")
54                        tasks=n4d.get_tasks("","SchedulerServer",sw_remote,False)['data'].copy()
55                        #Delete files
56                        for f in os.listdir(self.cron_dir):
57                                if f.startswith(prefix):
58                                        os.remove(self.cron_dir+'/'+f)
59                        #Create the cron files
60                        task_names={}
61                        for name in tasks.keys():
62                                for serial in tasks[name].keys():
63                                        self._debug("Scheduling %s"%name)
64                                        fname=name.replace(' ','_')
65                                        task_names[fname]=tasks[name][serial].copy()
66                                        self._write_crontab_for_task(task_names,prefix)
67
68        #def process_tasks
69
70        def _write_crontab_for_task(self,ftask,prefix):
71                cron_array=[]
72                for task_name,task_data in ftask.iteritems():
73                        self._debug("Writing data %s"%task_name)
74                        fname=self.cron_dir+'/'+prefix+task_name.replace(' ','_')
75                        cron_task=("%s %s %s %s %s root %s"%(task_data['m'],task_data['h'],task_data['dom'],\
76                                                        task_data['mon'],task_data['dow'],u""+task_data['cmd']))
77                        cron_array.append(cron_task)
78#                       for task_serial,task_info in task_data.items():
79#                               cron_task=("%s %s %s %s %s root %s"%(task_info['m'],task_info['h'],task_info['dom'],\
80#                                                               task_info['mon'],task_info['dow'],task_info['cmd']))
81#                               cron_array.append(cron_task)
82                        if task_data:
83                                with open(fname,'w') as data:
84                                        data.write('#Scheduler tasks\n')
85                                        data.write('SHELL=/bin/bash\n')
86                                        data.write('PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n')
87                                        data.write('DISPLAY=:0\n')
88                                        data.write('XAUTHORITY=/var/run/lightdm/root/:0\n')
89                                        if 'https_proxy' in os.environ.keys():
90                                                https_proxy=os.environ['https_proxy']
91                                                data.write('https_proxy=%s\n'%https_proxy)
92                                        if 'http_proxy' in os.environ.keys():
93                                                http_proxy=os.environ['http_proxy']
94                                                data.write('http_proxy=%s\n'%http_proxy)
95                                        for cron_line in cron_array:
96                                                data.write(cron_line.encode('utf8')+"\n")
97        #def _write_crontab_for_task
98
Note: See TracBrowser for help on using the repository browser.