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

Last change on this file since 6818 was 6818, checked in by Juanma, 19 months ago

refactorized

File size: 4.8 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.credentials=["",""]
19                self.n4dserver=None
20                self.n4dclient=self._n4d_connect('localhost')
21                self.conf_dir="/etc/scheduler/conf.d/"
22                self.tasks_dir=self.conf_dir+'/tasks'
23                self.custom_tasks=self.tasks_dir+"/personal.json"
24                self.commands_file=self.conf_dir+'/commands/commands.json'
25                self.sched_dir="/etc/scheduler/tasks.d"
26                self.local_tasks_dir=self.sched_dir+"/local"
27        #def __init__
28
29        def _debug(self,msg):
30                if (self.dbg):
31                        print("Scheduler lib: %s" % msg)
32        #def _debug
33       
34        def set_credentials(self,user,pwd,server):
35                self.credentials=[user,pwd]
36                self.n4dserver=self._n4d_connect(server)
37        #def set_credentials
38
39        def get_available_tasks(self):
40                tasks={}
41                if self.n4dserver:
42                        result=self.n4dserver.get_available_tasks("","SchedulerServer")
43                        if type(result)==type({}):
44                                tasks=result['data'].copy()
45                result=self.n4dclient.get_available_tasks("","SchedulerServer")
46                if type(result)==type({}):
47                        tasks.update(result['data'].copy())
48                return tasks
49        #def get_available_tasks
50
51        def get_scheduled_tasks(self,sw_remote):
52                tasks={}
53                self._debug("Retrieving task list remote=%s"%sw_remote)
54                if self.n4dserver:
55                        result=self.n4dserver.get_remote_tasks("","SchedulerServer")
56                        if type(result)==type({}):
57                                tasks=result.copy()
58                result=self.n4dclient.get_tasks("","SchedulerServer")
59                if type(result)==type({}):
60                        tasks.update(result['data'].copy())
61                return tasks
62        #def get_scheduled_tasks
63
64        def get_task_description(self,i18n_desc):
65                desc=i18n_desc
66                sw_found=False
67                self._debug("Getting desc for %s"%i18n_desc)
68                tasks=self.get_available_tasks()
69                try:
70                        for task_desc,task_data in tasks.items():
71                                for action,cmd in task_data.items():
72                                        if cmd==i18n_desc:
73                                                desc=action
74                                                sw_found=True
75                                                break
76                                if sw_found:
77                                        break
78                except Exception as e:
79                        print(e)
80                        self._debug(("Error ocurred when looking for %s")%task_cmd)
81                return desc
82        #def get_task_description
83
84        def get_task_command(self,i18n_cmd):
85                cmd=i18n_cmd
86                self._debug("Getting cmd for %s"%i18n_cmd)
87                tasks=self.get_available_tasks()
88                for task_desc,task_data in tasks.items():
89                        if task_desc in task_data.keys():
90                                cmd=task_data[i18n_cmd]
91                                break
92                return cmd
93        #def get_task_command
94
95        def _get_wrkfiles(self,sw_remote=None):
96                if sw_remote=='available':
97                        wrkdir=self.tasks_dir
98                else:
99                        wrkdir=self.local_tasks_dir
100                wrkfiles=[]
101                self._debug("Opening %s"%wrkdir)
102                if os.path.isdir(wrkdir):
103                        for f in os.listdir(wrkdir):
104                                wrkfiles.append(wrkdir+'/'+f)
105                return wrkfiles
106        #def _get_wrkfiles
107
108        def get_commands(self):
109                cmds={}
110                if os.path.isfile(self.commands_file):
111                        try:
112                                cmds=json.loads(open(self.commands_file).read())
113                        except Exception as e:
114                                print(e)
115                                self._debug(("unable to open %s") % self.commands_file)
116                return(cmds)
117        #def get_commands
118
119        def get_command_cmd(self,cmd_desc):
120                commands=self.get_commands()
121                cmd=cmd_desc
122                if cmd_desc in commands.keys():
123                        cmd=commands[cmd_desc]
124                return cmd
125        #def get_command_cmd
126
127        def write_custom_task(self,cmd_name,cmd,parms):
128                status=False
129                n4d_server=self.n4dserver
130                result=n4d_server.write_custom_task(self.credentials,"SchedulerServer",cmd_name,cmd,parms)
131                if type(result)==type({}):
132                        status=result['status']
133                return status
134        #def write_custom_task
135
136        def _read_tasks_file(self,wrkfile):
137                self._debug("Opening %s" % wrkfile)
138                tasks=None
139                if os.path.isfile(wrkfile) and wrkfile!=self.commands_file:
140                        try:
141                                tasks=json.loads(open(wrkfile).read())
142                        except Exception as e:
143                                print(e)
144                                self._debug(("unable to open %s") % wrkfile)
145                return(tasks)
146        #def _read_tasks_file
147
148        def write_tasks(self,tasks,sw_remote):
149                status=False
150                self._debug("Sending task info to %s server"%sw_remote)
151                if sw_remote=='remote':
152                        result=self.n4dserver.write_tasks(self.credentials,"SchedulerServer",sw_remote,tasks)
153                else:
154                        result=self.n4dclient.write_tasks(self.credentials,"SchedulerServer",sw_remote,tasks)
155                if type(result)==type({}):
156                        status=result['status']
157                return status
158        #def write_tasks
159
160        def remove_task(self,task):
161                status=False
162                sw_remote=False
163                self._debug("Removing task %s"%task)
164                if task['spread']:
165                        result=self.n4dserver.remove_task(self.credentials,"SchedulerServer",task)
166                else:
167                        result=self.n4dclient.remove_task(self.credentials,"SchedulerServer",task)
168                if type(result)==type({}):
169                        status=result['status']
170                self._debug("Status %s"%status)
171                return status
172        #def remove_task
173
174        def _n4d_connect(self,server):
175                #Setup SSL
176                context=ssl._create_unverified_context()
177                n4dclient = n4d.ServerProxy("https://"+server+":9779",context=context,allow_none=True)
178                return(n4dclient)
179        #def _n4d_connect
Note: See TracBrowser for help on using the repository browser.