Package Jobber :: Package browser :: Module JobListView
[hide private]
[frames] | no frames]

Source Code for Module Jobber.browser.JobListView

 1  ########################################################################### 
 2  # 
 3  # This program is part of Zenoss Core, an open source monitoring platform. 
 4  # Copyright (C) 2009, Zenoss Inc. 
 5  # 
 6  # This program is free software; you can redistribute it and/or modify it 
 7  # under the terms of the GNU General Public License version 2 as published by 
 8  # the Free Software Foundation. 
 9  # 
10  # For complete information please visit: http://www.zenoss.com/oss/ 
11  # 
12  ########################################################################### 
13   
14  import time 
15  from itertools import chain 
16  from Products.Five.browser import BrowserView 
17  from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile 
18  from Products.ZenUtils.Utils import relative_time, readable_time 
19  from Products.ZenUtils.json import json 
20   
21   
22 -class JobListView(BrowserView):
23 """ 24 Show which jobs are running. 25 """ 26 __call__ = ZopeTwoPageTemplateFile('joblist.pt') 27 # Give the template object an id so that the tab will be selected 28 __call__.id = 'joblist' 29
30 - def start_daemon(self):
31 self.context.dmd.About.doDaemonAction('zenjobs', 'start') 32 self.request.response.redirect('/zport/dmd/JobManager/joblist') 33 self.context.callZenScreen(self.request)
34
35 - def daemonstr(self):
36 pid = self.context.dmd.About._getDaemonPID('zenjobs') 37 if pid: 38 return "zenjobs daemon is running." 39 else: 40 return ("zenjobs daemon is not running. " 41 "<a href='startzenjobs'>Start zenjobs</a>")
42
43 - def _get_jobs(self):
44 jm = self.context.dmd.JobManager.primaryAq() 45 pending = jm.getPendingJobs() 46 running = jm.getRunningJobs() 47 finished = jm.getFinishedJobs() 48 return dict(Pending=pending, Running=running, Finished=finished)
49
50 - def jobs(self):
51 def job_link(jobstatus): 52 desc = '%s %s' % (jobstatus.getJob().getJobType(), 53 jobstatus.getJob().getDescription()) 54 link = jobstatus.absolute_url_path() + '/viewlog' 55 return dict(description=desc, link=link)
56 _jobs = self._get_jobs() 57 return dict(pending=map(job_link, _jobs['pending']), 58 running=map(job_link, _jobs['running']), 59 finished=map(job_link, _jobs['finished']))
60 61 @json
62 - def jsonjobs(self):
63 jobs = self._get_jobs() 64 result = dict(jobs=[], total=0) 65 def _statstring(state, job): 66 if state!='Finished': 67 return state 68 if job.result: 69 return 'Failed' 70 return 'Succeeded'
71 for k, jobset in jobs.items(): 72 for job in jobset: 73 j = job.getJob() 74 started, finished = job.getTimes() 75 duration = job.getDuration() 76 d = dict( 77 status = _statstring(k, job), 78 type = j.getJobType(), 79 description = j.getDescription(), 80 baseurl = job.absolute_url_path() 81 ) 82 if started: 83 d['started'] = relative_time(started) 84 d['starttime'] = started and started or (time.time() + 100000) 85 if finished: d['finished'] = relative_time(finished) 86 if duration: d['duration'] = readable_time(duration) 87 result['jobs'].append(d) 88 result['total'] += 1 89 def cmpjobs(a, b): 90 return int(b['starttime']) - int(a['starttime']) 91 result['jobs'].sort(cmpjobs) 92 return result 93