return [Job(self.backend, j.id, j) for j in self.db.query(query, *args)]
- def get_latest(self, arch=None, builder=None, limit=None, age=None, date=None):
- query = "SELECT * FROM jobs"
- args = []
-
- where = ["(state = 'finished' OR state = 'failed' OR state = 'aborted')"]
-
- if arch:
- where.append("arch = %s")
- args.append(arch)
-
- if builder:
- where.append("builder_id = %s")
- args.append(builder.id)
-
- if date:
- try:
- year, month, day = date.split("-", 2)
- date = datetime.date(int(year), int(month), int(day))
- except ValueError:
- pass
- else:
- where.append("(time_created::date = %s OR \
- time_started::date = %s OR time_finished::date = %s)")
- args += (date, date, date)
-
- if age:
- where.append("time_finished >= NOW() - '%s'::interval" % age)
-
- if where:
- query += " WHERE %s" % " AND ".join(where)
-
- query += " ORDER BY time_finished DESC"
-
- if limit:
- query += " LIMIT %s"
- args.append(limit)
+ def get_recently_ended(self, limit=None):
+ jobs = self._get_jobs("SELECT jobs.* FROM jobs \
+ WHERE time_finished IS NOT NULL ORDER BY time_finished DESC LIMIT %s", limit)
- return [Job(self.backend, j.id, j) for j in self.db.query(query, *args)]
+ return jobs
def restart_failed(self):
jobs = self._get_jobs("SELECT jobs.* FROM jobs \
CREATE INDEX idx_2198063_state ON jobs USING btree (state);
---
--- Name: idx_2198063_time_finished; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
---
-
-CREATE INDEX idx_2198063_time_finished ON jobs USING btree (time_finished);
-
-
--
-- Name: idx_2198063_uuid; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
--
CREATE INDEX jobs_buildroots_pkg_uuid ON jobs_buildroots USING btree (pkg_uuid);
+--
+-- Name: jobs_time_finished; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
+--
+
+CREATE INDEX jobs_time_finished ON jobs USING btree (time_finished DESC) WHERE (time_finished IS NOT NULL);
+
+
--
-- Name: mirrors_checks_sort; Type: INDEX; Schema: public; Owner: pakfire; Tablespace:
--
limit = self.get_argument_int("limit", 5)
# Get the latest jobs.
- jobs = self.backend.jobs.get_latest(age="24 HOUR", limit=limit)
+ jobs = self.backend.jobs.get_recently_ended(limit=limit)
args = {
"jobs" : [self.job2json(j) for j in jobs],