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

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

WIP on expert mode

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