Ignore:
Timestamp:
Feb 13, 2018, 4:52:00 PM (20 months ago)
Author:
Juanma
Message:

WIP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • taskscheduler/trunk/fuentes/server-scheduler.install/usr/share/n4d/python-plugins/SchedulerServer.py

    r6763 r6811  
    1212        def __init__(self):
    1313                self.dbg=1
    14                 self.taskDir="/etc/scheduler/tasks.d"
    15                 self.schedTasksDir=self.taskDir+"/scheduled"
     14                self.tasks_dir="/etc/scheduler/tasks.d"
     15                self.schedTasksDir=self.tasks_dir+"/scheduled"
    1616                self.available_tasks_dir="/etc/scheduler/conf.d/tasks"
    1717                self.custom_tasks=self.available_tasks_dir+"/personal.json"
    18                 self.remote_tasks_dir=self.taskDir+"/remote"
    19                 self.local_tasks_dir=self.taskDir+"/local"
     18                self.remote_tasks_dir=self.tasks_dir+"/remote"
     19                self.local_tasks_dir=self.tasks_dir+"/local"
    2020        #def __init__
    2121
     
    2525        #def _debug
    2626
    27         def get_tasks(self,sw_remote=False,available=False):
     27        def get_tasks(self):
     28                return(self._read_wrkfiles(self.tasks_dir))
     29        #def get_tasks
     30
     31        def get_local_tasks(self):
     32                local_tasks={}
     33                tasks_data=self._read_wrkfiles(self.tasks_dir)['data'].copy()
     34                for task_serial in tasks_data.keys():
     35                        sw_continue=False
     36                        for task in task_serial.keys():
     37                                if ['spread_task'] in task.keys():
     38                                                if task['spread_task']==True:
     39                                                        sw_continue=True
     40                                                        break
     41                        if sw_continue:
     42                                continue
     43                        local_tasks.update(task_serial)
     44                return local_tasks
     45
     46        def get_remote_tasks(self):
     47                remote_tasks={}
     48                tasks_data=self._read_wrkfiles(self.tasks_dir)['data']
     49                for task_serial in tasks_data.keys():
     50                        sw_continue=False
     51                        for task in task_serial.keys():
     52                                if ['spread_task'] in task.keys():
     53                                        if task['spread_task']==True:
     54                                                remote_tasks.update(task_serial)
     55                                                break
     56                return remote_tasks
     57
     58        def get_available_tasks(self):
     59                return(self._read_wrkfiles(self.available_tasks_dir))
     60
     61        def _read_wrkfiles(self,folder):
    2862                tasks={}
    29                 wrkfiles=self._get_wrkfiles(sw_remote,available)
    30                 self._debug(wrkfiles)
     63                wrkfiles=self._get_wrkfiles(folder)
     64                self._debug(folder)
    3165                for wrkfile in wrkfiles:
    3266                        task=self._read_tasks_file(wrkfile)
     
    3670                self._debug(str(tasks))
    3771                return({'status':True,'data':tasks})
    38         #def get_tasks
    39 
    40         def get_available_tasks(self):
    41                 tasks={}
    42                 wrkfiles=self._get_wrkfiles(available=True)
    43                 self._debug(wrkfiles)
    44                 for wrkfile in wrkfiles:
    45                         task=self._read_tasks_file(wrkfile)
    46                         if task:
    47                                 tasks.update(task)
    48                 self._debug(str(tasks))
    49                 return({'status':True,'data':tasks})
    50 
    51         def _get_wrkfiles(self,sw_remote=False,available=False):
    52                 if available:
    53                         wrk_dir=self.available_tasks_dir
    54                 else:
    55                         if sw_remote:
    56                                 wrk_dir=self.remote_tasks_dir
    57                         elif sw_remote==False:
    58                                 wrk_dir=self.local_tasks_dir
    59                 if not os.path.isdir(wrk_dir):
    60                         os.makedirs(wrk_dir)
     72
     73        def _get_wrkfiles(self,folder):
    6174                wrkfiles=[]
    62                 for f in os.listdir(wrk_dir):
    63                         wrkfiles.append(wrk_dir+'/'+f)
     75                if not os.path.isdir(folder):
     76                        os.makedirs(folder)
     77                for f in os.listdir(folder):
     78                        wrkfiles.append(folder+'/'+f)
    6479                return wrkfiles
    6580        #def _get_wrkfiles
     
    7792        #def _read_tasks_file
    7893       
    79         def remove_task(self,task_type,task_name,task_serial,task_cmd):
    80                 if task_type=='local':
    81                         wrk_dir=self.local_tasks_dir
    82                 else:
    83                         wrk_dir=self.remote_tasks_dir
     94        def remove_task(self,task):
     95                wrk_dir=self.tasks_dir
    8496                self._debug("Removing task from system")
    8597                sw_del=False
    8698                msg=''
    87                 wrkfile=wrk_dir+'/'+task_name
     99                wrkfile=wrk_dir+'/'+task['name']
    88100                wrkfile=wrkfile.replace(' ','_')
    89                 task=self._read_tasks_file(wrkfile)
    90                 if task_name in task.keys():
    91                         if task_serial in task[task_name].keys():
    92                                 del task[task_name][task_serial]
     101                tasks=self._read_tasks_file(wrkfile)
     102                if task['name'] in tasks.keys():
     103                        if task['serial'] in tasks[task['name']].keys():
     104                                del tasks[task['name']][task['serial']]
    93105                                self._debug("Task deleted")
    94106                                sw_del=True
    95107
    96108                if sw_del:
    97                         task=self._serialize_task(task)
     109                        tasks=self._serialize_task(tasks)
    98110                        with open(wrkfile,'w') as json_data:
    99                                 json.dump(task,json_data,indent=4)
     111                                json.dump(tasks,json_data,indent=4)
    100112                        self._register_cron_update()
    101113                return ({'status':sw_del,'data':msg})
     
    114126
    115127        def write_tasks(self,task_type,tasks):
    116                 if task_type=='local':
    117                         wrk_dir=self.local_tasks_dir
    118                 else:
    119                         wrk_dir=self.remote_tasks_dir
     128                wrk_dir=self.tasks_dir
    120129                self._debug("Writing task info")
    121130                msg=''
     
    134143                        sched_tasks=json.loads(open(wrkfile).read())
    135144                        serial=len(sched_tasks[task_name])
     145                        data=self._fill_task_data(tasks[task_name][task_serial])
     146                        tasks[task_name][task_serial]=data
     147                        if task_type=='local':
     148                                tasks[task_name][task_serial].update({'spread':False})
     149                        elif task_type=="remote":
     150                                tasks[task_name][task_serial].update({'spread':True})
     151
    136152                        if task_serial in sched_tasks[task_name].keys():
     153                                #Modify
    137154                                self._debug("Modify item %s" % serial)
    138155                                sched_tasks[task_name][task_serial]=tasks[task_name][task_serial]
    139                                 #Modify
    140156                        else:
    141157                                #Add
    142158                                self._debug("Add item %s" % serial)
    143159                                serialized_data={}
     160                                data=self._fill_task_data(tasks[task_name][task_serial])
     161                                tasks[task_name][task_serial]=data
     162                                self._fill_task_data(tasks[task_name][task_serial])
    144163                                serialized_data[serial+1]=tasks[task_name][task_serial]
    145164                                sched_tasks[task_name].update(serialized_data)
    146165                else:
    147166                        self._debug("Add new item 1 to %s"%wrkfile)
     167                        data=self._fill_task_data(tasks[task_name]["0"])
     168                        tasks[task_name]["0"]=data
     169                        if task_type=='local':
     170                                tasks[task_name]["0"].update({'spread':False})
     171                        elif task_type=="remote":
     172                                tasks[task_name]["0"].update({'spread':True})
    148173                        tasks[task_name]={"1":tasks[task_name]["0"]}
    149174                        sched_tasks=tasks.copy()
     
    158183                self._debug("%s updated" % task_name)
    159184                return({'status':status,'data':msg})
     185        #def write_tasks
     186
     187        def _fill_task_data(self,task):
     188                task['kind']=[]
     189                if ['spread'] not in task.keys():
     190                        task['spread']=False
     191                #set task kind
     192                if task['dow']!='*':
     193                        task['kind'].append('daily')
     194                try:
     195                        int(task['mon'])
     196                        int(task['dom'])
     197                        int(task['h'])
     198                        int(task['m'])
     199                        task['kind']=['fixed']
     200                except:
     201                        if '/' in (task['mon']+task['dom']+task['h']+task['m']):
     202                                task['kind'].append('repeat')
     203                return task
     204
     205        def write_tasks_old(self,tasks):
     206                pass
    160207        #def write_tasks
    161208
Note: See TracChangeset for help on using the changeset viewer.