From: Michael Tremer Date: Fri, 27 Oct 2017 16:23:37 +0000 (+0100) Subject: Refactor getting recently finished jobs X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1b1f4a37b6cd36270d4143a8dff08a2c6bdbd72e;p=pbs.git Refactor getting recently finished jobs Also add a nice sorted index to make this essentially free :) Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index 1713d244..7810891e 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -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 \ diff --git a/src/database.sql b/src/database.sql index ef30b33c..f0784e68 100644 --- a/src/database.sql +++ b/src/database.sql @@ -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: -- diff --git a/src/hub/handlers.py b/src/hub/handlers.py index f53a3645..89512a05 100644 --- a/src/hub/handlers.py +++ b/src/hub/handlers.py @@ -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], diff --git a/src/web/handlers.py b/src/web/handlers.py index 2480a843..cc42a5a7 100644 --- a/src/web/handlers.py +++ b/src/web/handlers.py @@ -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 = []