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

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

WIP

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