aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathieu Othacehe <othacehe@gnu.org>2020-07-02 21:07:21 +0200
committerMathieu Othacehe <othacehe@gnu.org>2020-07-02 21:07:30 +0200
commit136a8295e4e09724eccc230c127fb880aa84b57d (patch)
treef41f3b843c9c45763ecd8bf87bf3b938ce3ff2f8 /src
parent882393dee0ae78d98eeb8e571843644d985e4736 (diff)
downloadcuirass-136a8295e4e09724eccc230c127fb880aa84b57d.tar
cuirass-136a8295e4e09724eccc230c127fb880aa84b57d.tar.gz
Add "latest builds" support.
Add a "status" dropdown menu in the navigation bar. For now this menu only contains one item, a link to the "latest builds" page at "/status" location. * src/cuirass/database.scm (db-get-builds): Add support for 'started status. * src/cuirass/http.scm (url-handler): Add "/status" route. * src/cuirass/templates.scm (running-builds-table): New procedure, (html-page): add a dropdown menu containing one item, a link to "/status" route defined above. * src/static/css/cuirass.css: Add new class to allow bootstrap dropdown menus to work without javascript plugin.
Diffstat (limited to 'src')
-rw-r--r--src/cuirass/database.scm1
-rw-r--r--src/cuirass/http.scm9
-rw-r--r--src/cuirass/templates.scm46
-rw-r--r--src/static/css/cuirass.css22
4 files changed, 74 insertions, 4 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index ea56db3..3564217 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -770,6 +770,7 @@ FILTERS is an assoc list whose possible keys are 'derivation | 'id | 'jobset |
(status . ,(match (assq-ref filters 'status)
(#f #f)
('done "Builds.status >= 0")
+ ('started "Builds.status = -1")
('pending "Builds.status < 0")
('succeeded "Builds.status = 0")
('failed "Builds.status > 0")))
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index 3602f9f..36143b4 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -570,6 +570,15 @@ Hydra format."
(respond-json-with-error 500 "No build found.")))
(respond-json-with-error 500 "Query parameter not provided."))))
+ (('GET "status")
+ (respond-html
+ (html-page
+ "Running builds"
+ (running-builds-table
+ (db-get-builds `((status . started)
+ (order . status+submission-time))))
+ '())))
+
(('GET "download" id)
(let ((path (db-get-build-product-path id)))
(respond-file path)))
diff --git a/src/cuirass/templates.scm b/src/cuirass/templates.scm
index 0f90b53..4c43e8a 100644
--- a/src/cuirass/templates.scm
+++ b/src/cuirass/templates.scm
@@ -38,7 +38,8 @@
build-eval-table
build-search-results-table
build-details
- evaluation-build-table))
+ evaluation-build-table
+ running-builds-table))
(define (navigation-items navigation)
(match navigation
@@ -112,15 +113,28 @@ system whose names start with " (code "guile-") ":" (br)
(href "/static/css/cuirass.css")))
(title ,title))
(body
- (nav (@ (class "navbar navbar-expand navbar-light bg-light"))
+ (nav (@ (class "navbar navbar-expand-lg navbar-light bg-light"))
(a (@ (class "navbar-brand pt-0")
(href "/"))
(img (@ (src "/static/images/logo.png")
(alt "logo")
(height "25")
(style "margin-top: -12px"))))
- (div (@ (class "navbar-collapse"))
- (ul (@ (class "navbar-nav"))
+ (div (@ (class "collapse navbar-collapse"))
+ (ul (@ (class "navbar-nav mr-auto"))
+ (li (@ (class "nav-item dropdown"))
+ (a (@ (class "nav-link dropdown-toggle")
+ (data-toggle "dropdown")
+ (href "#")
+ (role "button")
+ (aria-haspopup "true")
+ (aria-expanded "false"))
+ "Status")
+ (div (@ (class "dropdown-menu")
+ (aria-labelledby "navbarDropdow"))
+ (a (@ (class "dropdown-item")
+ (href "/status"))
+ "Latest builds")))
(li (@ (class "nav-item"))
(a (@ (class "nav-link" ,(if (null? navigation)
" active" ""))
@@ -748,3 +762,27 @@ and BUILD-MAX are global minimal and maximal row identifiers."
#f "?query=~a&border-low-id=~d"
query
(1- (first build-min))))))))
+
+(define (running-builds-table builds)
+ "Return HTML for the running builds table."
+ (define (build-row build)
+ `(tr
+ (th (@ (scope "row"))
+ (a (@ (href "/build/" ,(assq-ref build #:id) "/details"))
+ ,(assq-ref build #:id)))
+ (td ,(assq-ref build #:job-name))
+ (td ,(time->string
+ (assq-ref build #:starttime)))
+ (td ,(assq-ref build #:system))))
+
+ `((p (@ (class "lead")) "Running builds")
+ (table
+ (@ (class "table table-sm table-hover table-striped"))
+ ,@(if (null? builds)
+ `((th (@ (scope "col")) "No elements here."))
+ `((thead (tr (th (@ (scope "col")) "ID")
+ (th (@ (scope "col")) "Job")
+ (th (@ (scope "col")) "Queued at")
+ (th (@ (scope "col")) "System")))
+ (tbody
+ ,(map build-row builds)))))))
diff --git a/src/static/css/cuirass.css b/src/static/css/cuirass.css
index 313b6a8..4e97c3d 100644
--- a/src/static/css/cuirass.css
+++ b/src/static/css/cuirass.css
@@ -15,3 +15,25 @@
#search:focus-within #search-hints {
display: block;
}
+
+/*
+ This is taken from: https://gist.github.com/YushengLi/824d3317f36c31f3d3e9 to
+ allow bootstrap dropdown menus to work without the associated javascript
+ plugin.
+ */
+a.dropdown-toggle:focus {
+ pointer-events: none;
+}
+
+a.dropdown-toggle:focus + .dropdown-menu {
+ opacity: 1;
+ visibility: visible;
+ pointer-events: auto;
+}
+
+.dropdown-menu {
+ opacity: 0;
+ display: block;
+ visibility: hidden;
+ transition: visibility 0.5s;
+}