1
2
3
4
5
6
7
8
9
10
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
23 """
24 Show which jobs are running.
25 """
26 __call__ = ZopeTwoPageTemplateFile('joblist.pt')
27
28 __call__.id = 'joblist'
29
34
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
49
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
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