def get_by_uuid(self, uuid):
return self._get_job("SELECT * FROM jobs WHERE uuid = %s", uuid)
- def get_active(self, host_id=None, builder=None, states=None):
- if builder:
- host_id = builder.id
-
- if states is None:
- states = ["dispatching", "running", "uploading"]
-
- query = "SELECT * FROM jobs WHERE state IN (%s)" % ", ".join(["%s"] * len(states))
- args = states
-
- if host_id:
- query += " AND builder_id = %s" % host_id
-
- query += " ORDER BY \
- CASE \
- WHEN jobs.state = 'running' THEN 0 \
- WHEN jobs.state = 'uploading' THEN 1 \
- WHEN jobs.state = 'dispatching' THEN 2 \
- WHEN jobs.state = 'pending' THEN 3 \
- WHEN jobs.state = 'new' THEN 4 \
- END, time_started ASC"
+ def get_active(self, limit=None):
+ jobs = self._get_jobs("SELECT jobs.* FROM jobs \
+ WHERE time_started IS NOT NULL AND time_finished IS NULL \
+ ORDER BY time_started LIMIT %s", limit)
- return [Job(self.backend, j.id, j) for j in self.db.query(query, *args)]
+ return jobs
def get_recently_ended(self, limit=None):
jobs = self._get_jobs("SELECT jobs.* FROM jobs \
CREATE INDEX jobs_time_finished ON jobs USING btree (time_finished DESC) WHERE (time_finished IS NOT NULL);
+--
+-- Name: jobs_time_started; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
+--
+
+CREATE INDEX jobs_time_started ON jobs USING btree (time_started) WHERE ((time_started IS NOT NULL) AND (time_finished IS NULL));
+
+
--
-- Name: mirrors_checks_sort; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
--
class IndexHandler(base.BaseHandler):
def get(self):
- jobs = self.backend.jobs.get_active()
+ jobs = []
+
+ # Get all active jobs
+ jobs += self.backend.jobs.get_active()
+
+ # Get some recently finished jobs
jobs += self.backend.jobs.get_recently_ended(limit=12)
# Updates