]> git.ipfire.org Git - people/jschlag/pbs.git/blob - src/buildservice/jobqueue.py
23f6d4fbbc3ddbd11254cfa192ef038a730c2f09
[people/jschlag/pbs.git] / src / buildservice / jobqueue.py
1 #!/usr/bin/python
2
3 from . import base
4
5 PENDING_STATE = "pending"
6
7 class JobQueue(base.Object):
8 def __iter__(self):
9 jobs = self.backend.jobs._get_jobs("SELECT jobs.* FROM jobs_queue queue \
10 LEFT JOIN jobs ON queue.job_id = jobs.id")
11
12 return iter(jobs)
13
14 def __len__(self):
15 res = self.db.get("SELECT COUNT(*) AS len FROM jobs_queue")
16
17 return res.len
18
19 def for_arches(self, arches, limit=None):
20 jobs = self.backend.jobs._get_jobs("SELECT jobs.* FROM jobs_queue queue \
21 LEFT JOIN jobs ON queue.job_id = jobs.id \
22 WHERE jobs.arch = ANY(%s) LIMIT %s", arches, limit)
23
24 return jobs
25
26 def get_length_for_arch(self, arch):
27 res = self.db.get("SELECT COUNT(*) AS len FROM jobs_queue queue \
28 LEFT JOIN jobs on queue.job_id = jobs.id \
29 WHERE jobs.arch = %s", arch)
30
31 return res.len
32
33 @property
34 def average_waiting_time(self):
35 """
36 Returns how long the jobs in the queue have been waiting on average
37 """
38 res = self.db.get("SELECT AVG(NOW() - COALESCE(jobs.start_not_before, jobs.time_created)) AS avg \
39 FROM jobs_queue queue LEFT JOIN jobs ON queue.job_id = jobs.id")
40
41 return res.avg