]> git.ipfire.org Git - people/jschlag/pbs.git/commitdiff
Refactor getting recently finished jobs
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 27 Oct 2017 16:23:37 +0000 (17:23 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 27 Oct 2017 16:26:35 +0000 (17:26 +0100)
Also add a nice sorted index to make this essentially free :)

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/jobs.py
src/database.sql
src/hub/handlers.py
src/web/handlers.py

index 1713d2443ffe91475242ee40ab0b6f6d1a77fa0f..7810891ef8a86788e9ca28cc1f6edf60a9b34189 100644 (file)
@@ -78,44 +78,11 @@ class Jobs(base.Object):
 
                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 \
index ef30b33ca547bbeba05fa1541d31ca7437b14f5d..f0784e68a1cba278d8f9cbeab1c744f0ffcaca1f 100644 (file)
@@ -2448,13 +2448,6 @@ CREATE INDEX idx_2198063_build_id ON jobs USING btree (build_id);
 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: 
 --
@@ -2604,6 +2597,13 @@ ALTER TABLE jobs_buildroots CLUSTER ON jobs_buildroots_job_id;
 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: 
 --
index f53a36454a099adec8516f7955daa78da91b4726..89512a05c0291661f631d9e05c36722320705558 100644 (file)
@@ -359,7 +359,7 @@ class JobsGetLatestHandler(JobsBaseHandler):
                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],
index 2480a8430d87e4b387520859c3bb649977641eea..cc42a5a7038af9ef8bf09d99c20a81ca69ed5643 100644 (file)
@@ -7,7 +7,7 @@ from . import base
 class IndexHandler(base.BaseHandler):
        def get(self):
                jobs = self.backend.jobs.get_active()
-               jobs += self.backend.jobs.get_latest(age="24 hours", limit=5)
+               jobs += self.backend.jobs.get_recently_ended(limit=12)
 
                # Updates
                updates = []