summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2019-06-18 23:59:53 +0200
committerRicardo Wurmus <rekado@elephly.net>2019-06-18 23:59:53 +0200
commit5070d17e7e1f8fbf9c59409de9b0a573054f8c65 (patch)
treeea27ba07b72f87cdb1c55da43e84c6f4a31665a6
parent767f34bd68178af46d48d80a08d6258c71b45ce2 (diff)
downloadcuirass-5070d17e7e1f8fbf9c59409de9b0a573054f8c65.tar
cuirass-5070d17e7e1f8fbf9c59409de9b0a573054f8c65.tar.gz
http: Handle /build/<id>/details URL.
* src/cuirass/http.scm (url-handler): Add handler for /build/<id>/details. * src/cuirass/templates.scm (build-details): New procedure.
-rw-r--r--src/cuirass/http.scm9
-rw-r--r--src/cuirass/templates.scm67
2 files changed, 75 insertions, 1 deletions
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index 94a2f25..19719e0 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -238,6 +238,15 @@ Hydra format."
(if hydra-build
(respond-json (object->json-string hydra-build))
(respond-build-not-found build-id))))
+ (("build" build-id "details")
+ (let ((build (db-get-build (string->number build-id))))
+ (if build
+ (respond-html
+ (html-page (string-append "Build " build-id)
+ (build-details build)
+ `(((#:name . ,(assq-ref build #:specification))
+ (#:link . ,(string-append "/spec/" (assq-ref build #:specification)))))))
+ (respond-build-not-found build-id))))
(("build" build-id "log" "raw")
(let ((build (db-get-build (string->number build-id))))
(if build
diff --git a/src/cuirass/templates.scm b/src/cuirass/templates.scm
index 05129dc..cdbbbcc 100644
--- a/src/cuirass/templates.scm
+++ b/src/cuirass/templates.scm
@@ -22,6 +22,7 @@
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-2)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-26)
#:use-module ((cuirass database) #:select (build-status))
@@ -29,7 +30,8 @@
specifications-table
evaluation-info-table
build-eval-table
- build-search-results-table))
+ build-search-results-table
+ build-details))
(define (navigation-items navigation)
(match navigation
@@ -118,6 +120,69 @@
(assq-ref spec #:inputs)) ", "))))
specs)))))))
+(define (build-details build)
+ "Return HTML showing details for the BUILD."
+ (define status (assq-ref build #:status))
+ (define display-status
+ (cond
+ ((= (build-status succeeded) status)
+ `(span (@ (class "oi oi-check text-success")
+ (title "Succeeded"))
+ " Success"))
+ ((= (build-status scheduled) status)
+ `(span (@ (class "oi oi-clock text-warning")
+ (title "Scheduled")
+ (aria-hidden "true"))
+ " Scheduled"))
+ ((= (build-status canceled) status)
+ `(span (@ (class "oi oi-question-mark text-warning")
+ (title "Canceled"))
+ " Canceled"))
+ ((= (build-status failed-dependency) status)
+ `(span (@ (class "oi oi-warning text-danger")
+ (title "Dependency failed"))
+ " Dependency failed"))
+ (else
+ `(span (@ (class "oi oi-x text-danger")
+ (title "Failed"))
+ " Failed"))))
+ (define completed?
+ (or (= (build-status succeeded) status)
+ (= (build-status failed) status)))
+ `((p (@ (class "lead")) "Build details")
+ (table
+ (@ (class "table table-sm table-hover"))
+ (tbody
+ (tr (th "Build ID")
+ (td ,(assq-ref build #:id)))
+ (tr (th "Status")
+ (td ,display-status))
+ (tr (th "System")
+ (td ,(assq-ref build #:system)))
+ (tr (th "Name")
+ (td ,(assq-ref build #:nix-name)))
+ (tr (th "Duration")
+ (td ,(or (and-let* ((start (assq-ref build #:starttime))
+ (stop (assq-ref build #:stoptime)))
+ (string-append (number->string (- stop start))
+ " seconds"))
+ "—")))
+ (tr (th "Finished")
+ (td ,(if completed?
+ (time->string (assq-ref build #:stoptime))
+ "—")))
+ (tr (th "Log file")
+ (td ,(if completed?
+ `(a (@ (href "/build/" ,(assq-ref build #:id) "/log/raw"))
+ "raw")
+ "—")))
+ (tr (th "Derivation")
+ (td (pre ,(assq-ref build #:derivation))))
+ (tr (th "Outputs")
+ (td ,(map (match-lambda ((out (#:path . path))
+ `(pre ,path)))
+ (assq-ref build #:outputs))))))))
+
(define (pagination first-link prev-link next-link last-link)
"Return html page navigation buttons with LINKS."
`(div (@ (class row))