source: taskScheduler/trunk/fuentes/python3-taskscheduler.install/usr/share/taskscheduler/taskscheduler.py @ 6269

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

Initial release

File size: 4.2 KB
Line 
1#!/usr/bin/env python3
2###
3#
4###
5
6import os
7import json
8import sys
9try:
10        import xmlrpc.client as n4d
11except ImportError:
12        raise ImportError("xmlrpc not available. Disabling server queries")
13import ssl
14
15class TaskScheduler():
16        def __init__(self):
17                self.dbg=1
18                self.n4dserver=self._n4d_connect()
19                self.n4dclient=self._n4d_connect('localhost')
20                self.tasks_dir="/etc/scheduler/conf.d"
21                self.custom_tasks=self.tasks_dir+"/custom.json"
22                self.commands_file=self.tasks_dir+'/commands.json'
23                self.sched_dir="/etc/scheduler/tasks.d"
24                self.local_tasks_dir=self.sched_dir+"/local"
25                self.credentials=["",""]
26        #def __init__
27
28        def _debug(self,msg):
29                if (self.dbg):
30                        print("Scheduler Client: %s" % msg)
31        #def _debug
32       
33        def set_credentials(self,credentials):
34                self.credentials=credentials
35
36        def get_available_tasks(self):
37#               tasks=[]
38                tasks={}
39                wrkfiles=self._get_wrkfiles('available')
40                for wrkfile in wrkfiles:
41                        task=self._read_tasks_file(wrkfile)
42                        if task:
43#                               tasks.append(task)
44                                tasks.update(task)
45                self._debug(str(tasks))
46                return tasks
47
48        def get_scheduled_tasks(self,task_type):
49                tasks=[]
50                self._debug("Retrieving %s task list"%task_type)
51                if task_type=='remote':
52                        n4d_server=self.n4dserver
53                else:
54                        n4d_server=self.n4dclient
55                tasks=n4d_server.get_tasks("","SchedulerServer",task_type)
56                self._debug(str(tasks))
57                return tasks
58
59        def get_task_description(self,task_cmd):
60                desc=task_cmd
61                sw_found=False
62                self._debug("Getting desc for %s"%task_cmd)
63                tasks=self.get_available_tasks()
64                for task_desc,task_data in tasks.items():
65                        for action,cmd in task_data.items():
66                                if cmd==task_cmd:
67                                        desc=action
68                                        sw_found=True
69                                        break
70                        if sw_found:
71                                break
72                return desc
73        #def get_task_description
74
75        def get_task_command(self,task_description):
76                cmd=task_description
77                sw_found=False
78                self._debug("Getting cmd for %s"%task_description)
79                tasks=self.get_available_tasks()
80                for task_desc,task_data in tasks.items():
81                        if task_description in task_data.keys():
82                                cmd=task_data[task_description]
83                                sw_found=True
84                                break
85                return cmd
86        #def get_task_command
87
88        def _get_wrkfiles(self,task_type=None):
89                if task_type=='available':
90                        wrkdir=self.tasks_dir
91                else:
92                        wrkdir=self.local_tasks_dir
93                wrkfiles=[]
94                self._debug("Opening %s"%wrkdir)
95                if os.path.isdir(wrkdir):
96                        for f in os.listdir(wrkdir):
97                                wrkfiles.append(wrkdir+'/'+f)
98                return wrkfiles
99
100        def get_commands(self):
101                cmds={}
102                if os.path.isfile(self.commands_file):
103                        try:
104                                cmds=json.loads(open(self.commands_file).read())
105                        except Exception as e:
106                                print(e)
107                                self.errormsg=(("unable to open %s") % self.commands_file)
108                                self.status=1
109                                self._debug(self.errormsg)
110                return(cmds)
111
112        def get_command_cmd(self,cmd_desc):
113                commands=self.get_commands()
114                cmd=cmd_desc
115                if cmd_desc in commands.keys():
116                        cmd=commands[cmd_desc]
117                return cmd
118
119        def write_custom_task(self,cmd_name,cmd,parms):
120                n4d_server=self.n4dserver
121                tasks=n4d_server.write_custom_task(self.credentials,"SchedulerServer",cmd_name,cmd,parms)
122
123        def _read_tasks_file(self,wrkfile):
124                self._debug("Opening %s" % wrkfile)
125                tasks=None
126                if os.path.isfile(wrkfile) and wrkfile!=self.commands_file:
127                        try:
128                                tasks=json.loads(open(wrkfile).read())
129                        except Exception as e:
130                                print(e)
131                                self.errormsg=(("unable to open %s") % wrkfile)
132                                self.status=1
133                                self._debug(self.errormsg)
134                return(tasks)
135        #def _read_tasks_file
136
137        def write_tasks(self,tasks,task_type):
138                self._debug("Sending task info to %s server"%task_type)
139                if task_type=='remote':
140                        n4d_server=self.n4dserver
141                else:
142                        n4d_server=self.n4dclient
143                tasks=n4d_server.write_tasks(self.credentials,"SchedulerServer",task_type,tasks)
144                self._debug(tasks)
145                return True
146        #def write_tasks
147
148        def remove_task(self,task_name,task_serial,task_cmd,task_type):
149                self._debug("Removing task from %s server"%task_type)
150                if task_type=='remote':
151                        n4d_server=self.n4dserver
152                else:
153                        n4d_server=self.n4dclient
154                tasks=n4d_server.remove_task(self.credentials,"SchedulerServer",task_type,task_name,task_serial,task_cmd)
155                self._debug(tasks)
156
157        def _n4d_connect(self,server='server'):
158                #Setup SSL
159                context=ssl._create_unverified_context()
160                n4dclient = n4d.ServerProxy("https://"+server+":9779",context=context,allow_none=True)
161                return(n4dclient)
162        #def _n4d_connect
Note: See TracBrowser for help on using the repository browser.