From: Michael Tremer Date: Mon, 3 Dec 2012 10:51:46 +0000 (+0100) Subject: Redesign builders pages. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f96eb5eda04817b98116d08152b5f712e0352a7e;p=people%2Fjschlag%2Fpbs.git Redesign builders pages. --- diff --git a/backend/builders.py b/backend/builders.py index 6ce1365..9a8415b 100644 --- a/backend/builders.py +++ b/backend/builders.py @@ -1,5 +1,7 @@ #!/usr/bin/python +from __future__ import division + import datetime import hashlib import logging @@ -69,17 +71,17 @@ class Builders(base.Object): return sorted(arches) def get_load(self): - slots = 1 - running_jobs = 0 - - for builder in self.get_all(): - if not builder.state == "online": - continue + res1 = self.db.get("SELECT SUM(max_jobs) AS max_jobs FROM builders \ + WHERE status = 'enabled'") + if not res1: + return 0 - slots += builder.max_jobs - running_jobs += len(builder.get_active_jobs(uploads=False)) + res2 = self.db.get("SELECT COUNT(*) AS count FROM jobs \ + WHERE state = 'dispatching' OR state = 'running' OR state = 'uploading'") + if not res2: + return 0 - return int(running_jobs * 100 / slots) + return (res2.count * 100 / res1.max_jobs) def get_history(self, limit=None, offset=None, builder=None, user=None): query = "SELECT * FROM builders_history" @@ -134,9 +136,8 @@ class Builder(base.Object): @property def data(self): if self._data is None: - self._data = \ - self.db.get("SELECT *, NOW() - time_keepalive AS updated \ - FROM builders WHERE id = %s", self.id) + self._data = self.db.get("SELECT * FROM builders WHERE id = %s", self.id) + assert self._data return self._data @@ -531,11 +532,17 @@ class Builder(base.Object): if self.data.time_keepalive is None: return "offline" - if self.data.updated >= 5*60: - return "offline" + #if self.data.updated >= 5*60: + # return "offline" return "online" + @property + def active_jobs(self): + jobs = self.get_active_jobs() + + return len(jobs) + def get_active_jobs(self, uploads=True): if self._active_jobs is None: self._active_jobs = \ diff --git a/data/templates/builder-detail.html b/data/templates/builder-detail.html index 409eda1..8ea27c5 100644 --- a/data/templates/builder-detail.html +++ b/data/templates/builder-detail.html @@ -17,21 +17,22 @@ + + {% if builder.overload %} -
- {{ _("Warning") }}! {{ _("This builder is overloaded.") }} - {{ _("That means it will take no additional jobs although it has not reached its threshold.") }} - {{ _("If the load decreases new jobs will be added automatically.") }} +
+

{{ _("Warning") }}!

+ {{ _("This builder is overloaded.") }} + {{ _("That means it will not take any additional jobs although it has not reached its threshold of running jobs, yet.") }} + {{ _("New jobs will be started automatically after the load decreased.") }}
{% end %} - -
-
- +
+
@@ -80,8 +81,8 @@ {% end %} -
-
{{ _("State") }}
+
+
@@ -139,68 +140,40 @@ {% if current_user and current_user.has_perm("maintain_builders") %} -
-
-
-
- {% if builder.enabled %} - - {{ _("Disable") }} - - {% else %} - - {{ _("Enable") }} - - {% end %} - - - {{ _("Action") }} - - - -
-
-
-
- {% end %} +
+ {% if builder.enabled %} + + {{ _("Disable builder") }} + + {% else %} + + {{ _("Enable builder") }} + + {% end %} + + + + {{ _("Edit builder") }} + + + {% if not builder.enabled %} + + + {{ _("Renew passphrase") }} + + {% end %} - {% if builder.get_active_jobs() %} -
-
-

{{ _("Currently running builds on this host") }}

- {% module JobsList(builder.get_active_jobs()) %} -
+ + + {{ _("Delete builder") }} +
{% end %} -
-
-

{{ _("Log") }}

- {% module Log(builder.get_history(limit=20)) %} -
-
+
+ +

{{ _("Log") }}

+ {% module Log(builder.get_history(limit=5)) %} {% end block %} diff --git a/data/templates/builder-edit.html b/data/templates/builder-edit.html index e48dbdb..9ffc447 100644 --- a/data/templates/builder-edit.html +++ b/data/templates/builder-edit.html @@ -1,6 +1,6 @@ -{% extends "base-form1.html" %} +{% extends "base.html" %} -{% block title %}{{ _("Edit builder %s") % builder.hostname }}{% end block %} +{% block title %}{{ _("Manage builder %s") % builder.hostname }}{% end block %} {% block body %} -
-
-
- {% raw xsrf_form_html() %} -
-
- -
- {{ builder.hostname }} -

- {{ _("The hostname cannot be changed.") }} -

-
-
+ + {% raw xsrf_form_html() %} +
+
+ +
+ {{ builder.hostname }} +

+ {{ _("The hostname cannot be changed.") }} +

+
+
-
- -
- -
-
-
+
+ +
+ +
+
+
-
- {{ _("Build job settings") }} +
+ {{ _("Build job settings") }} -
- -
- +
+ +
+ -

- {{ _("This is the number of build jobs that are started in parallel.") }} -

-
-
+

+ {{ _("This is the number of build jobs that are started in parallel.") }} +

+
+
-
-
- -
-
+
+
+ +
+
-
-
- -
-
+
+
+ +
+
-
-
- -
-
+
+
+ +
+
-
- -
- +
+ +
+ -

- {{ _("Select or deselect the architectures, this builder should build or not.") }} -

-
-
+

+ {{ _("Select or deselect the architectures, this builder should build or not.") }} +

+
+
-
- -
-
- -
-
+
+ +
+ + {% end block %} diff --git a/data/templates/builder-list.html b/data/templates/builder-list.html index 11a7c3d..4154017 100644 --- a/data/templates/builder-list.html +++ b/data/templates/builder-list.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}{{ _("Build servers") }}{% end block %} +{% block title %}{{ _("Builders") }}{% end block %} {% block body %} -
-
-

- {{ _("Builders are those, that do all the hard work.") }} - {{ _("Build jobs are scheduled to these hosts that they process and send back the result.") }} -

-
-
+ {% module BuildersLoad() %} + +
-
+
{{ _("Pakfire version") }}
- - + + {% for builder in builders %} - {% end %} - - - - -
  {{ _("Hostname") }}{{ _("Load") }}{{ _("Running jobs") }}{{ _("Architectures") }}{{ _("Jobs") }}
- {{ _( + + {% if builder.state == "disabled" %} + + {% elif builder.state == "offline" %} + + {% elif builder.state == "online" %} + + {% end %} {{ builder.name }} {% if builder.overload %} - {{ _("Overload") }} + {{ _("Overload") }} {% end %} -
- {{ locale.list([a.name for a in builder.arches]) }} +
+ {{ builder.cpu_model or _("Unknown CPU") }} - {{ format_size(builder.memory) }}
- {{ builder.load1 or _("N/A") }} + {% if builder.arches %} + {{ locale.list([a.name for a in builder.arches]) }} + {% else %} + {{ _("N/A") }} + {% end %} - {{ len(builder.get_active_jobs()) }}/{{ builder.max_jobs }} +

+ {{ len(builder.get_active_jobs()) }}/{{ builder.max_jobs }} +

-
-
-
-
- {% if current_user and current_user.is_admin() %} - - {% end %} -
-
-
-
-
- {% if log %} -

{{ _("Log") }}

- {% module Log(log) %} + {% if current_user and current_user.is_admin() %} + {% end %}
diff --git a/web/__init__.py b/web/__init__.py index 73be54c..71a6875 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -35,6 +35,9 @@ class Application(tornado.web.Application): "LogEntry" : LogEntryModule, "LogEntryComment" : LogEntryCommentModule, + # Builders + "BuildersLoad" : BuildersLoadModule, + "BuildHeadline" : BuildHeadlineModule, "BuildStateWarnings" : BuildStateWarningsModule, diff --git a/web/handlers_builders.py b/web/handlers_builders.py index aa9ba6d..eaab382 100644 --- a/web/handlers_builders.py +++ b/web/handlers_builders.py @@ -9,11 +9,8 @@ from handlers_base import * class BuilderListHandler(BaseHandler): def get(self): builders = self.pakfire.builders.get_all() - load = self.pakfire.builders.get_load() - log = self.pakfire.builders.get_history(limit=10) - - self.render("builder-list.html", builders=builders, load=load, log=log) + self.render("builder-list.html", builders=builders) class BuilderDetailHandler(BaseHandler): diff --git a/web/ui_modules.py b/web/ui_modules.py index 5f38685..a5b593c 100644 --- a/web/ui_modules.py +++ b/web/ui_modules.py @@ -96,6 +96,13 @@ class BuildHeadlineModule(UIModule): prefix=prefix, build=build, pkg=build.pkg, short=short, shorter=shorter) +class BuildersLoadModule(UIModule): + def render(self): + load = self.pakfire.builders.get_load() + + return self.render_string("modules/builders/load.html", load=load) + + class BugsTableModule(UIModule): def render(self, pkg, bugs): return self.render_string("modules/bugs-table.html",