diff options
author | Mathieu Othacehe <othacehe@gnu.org> | 2020-09-17 10:10:08 +0200 |
---|---|---|
committer | Mathieu Othacehe <othacehe@gnu.org> | 2020-09-17 10:13:14 +0200 |
commit | bd4f4d680a396692d62bca1ff37967c943a9c0de (patch) | |
tree | 38a0a3020e7bcbc9315a381d605ecfc6df23f7fe | |
parent | 2470b216f112594189ac639ee9d40029ef96a164 (diff) | |
download | cuirass-bd4f4d680a396692d62bca1ff37967c943a9c0de.tar cuirass-bd4f4d680a396692d62bca1ff37967c943a9c0de.tar.gz |
metrics: Display more metrics.
* src/cuirass/http.scm (url-handler): Move metric page creation to ...
(metrics-page): ... this new procedure. Pass average evaluation build start
time and evaluation completion speed to "global-metrics-content".
* src/cuirass/templates.scm (make-line-chart): Add "time-x-axes?",
"xaxes-labels", "x-label" and "y-label" arguents.
(global-metrics-content): Add "avg-eval-build-start-time" and
"eval-completion-speed" arguments. Create and display two new charts from
those metrics.
-rw-r--r-- | src/cuirass/http.scm | 72 | ||||
-rw-r--r-- | src/cuirass/templates.scm | 79 |
2 files changed, 107 insertions, 44 deletions
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm index d91d5a2..a58fef3 100644 --- a/src/cuirass/http.scm +++ b/src/cuirass/http.scm @@ -235,6 +235,43 @@ Hydra format." ((#:name . ,(string-append "Evaluation " (number->string id))) (#:link . ,(string-append "/eval/" (number->string id))))))) +(define* (metrics-page) + (html-page + "Global metrics" + (global-metrics-content + #:avg-eval-durations + (list + (db-get-metrics-with-id + 'average-10-last-eval-duration-per-spec) + (db-get-metrics-with-id + 'average-100-last-eval-duration-per-spec) + (db-get-metrics-with-id + 'average-eval-duration-per-spec)) + #:avg-eval-build-start-time + (db-get-metrics-with-id 'average-eval-build-start-time + #:limit 100) + #:builds-per-day + (db-get-metrics-with-id 'builds-per-day + #:limit 100) + #:eval-completion-speed + (db-get-metrics-with-id 'evaluation-completion-speed + #:limit 100) + #:new-derivations-per-day + (db-get-metrics-with-id 'new-derivations-per-day + #:limit 100) + #:pending-builds + (db-get-metrics-with-id 'pending-builds + #:limit 100) + #:percentage-failed-eval + (list + (db-get-metrics-with-id + 'percentage-failure-10-last-eval-per-spec) + (db-get-metrics-with-id + 'percentage-failure-100-last-eval-per-spec) + (db-get-metrics-with-id + 'percentage-failed-eval-per-spec))) + '())) + ;;; ;;; Web server. @@ -608,40 +645,7 @@ Hydra format." (('GET "metrics") (respond-html - (html-page - "Global metrics" - (let ((builds-per-day - (db-get-metrics-with-id 'builds-per-day - #:limit 10)) - (new-derivations-per-day - (db-get-metrics-with-id 'new-derivations-per-day - #:limit 10)) - (pending-builds - (db-get-metrics-with-id 'pending-builds - #:limit 10)) - (avg-eval-durations - (list - (db-get-metrics-with-id - 'average-10-last-eval-duration-per-spec) - (db-get-metrics-with-id - 'average-100-last-eval-duration-per-spec) - (db-get-metrics-with-id - 'average-eval-duration-per-spec))) - (percentage-failed-eval - (list - (db-get-metrics-with-id - 'percentage-failure-10-last-eval-per-spec) - (db-get-metrics-with-id - 'percentage-failure-100-last-eval-per-spec) - (db-get-metrics-with-id - 'percentage-failed-eval-per-spec))) ) - (global-metrics-content - #:avg-eval-durations avg-eval-durations - #:builds-per-day builds-per-day - #:new-derivations-per-day new-derivations-per-day - #:pending-builds pending-builds - #:percentage-failed-eval percentage-failed-eval)) - '()))) + (metrics-page))) (('GET "status") (respond-html diff --git a/src/cuirass/templates.scm b/src/cuirass/templates.scm index 2dfac33..29162de 100644 --- a/src/cuirass/templates.scm +++ b/src/cuirass/templates.scm @@ -830,22 +830,34 @@ and BUILD-MAX are global minimal and maximal row identifiers." #:key (interpolation? #t) (legend? #f) + (time-x-axes? #f) + xaxes-labels + x-label + y-label title labels colors) - (let* ((scales `((xAxes - . ,(vector '((type . "time") - (time . ((unit . "day"))) - (display . #t) - (distribution . "series") - (scaleLabel - . ((display . #t) - (labelString . "Day")))))) + (let* ((normal-xAxes (vector `((type . "category") + (labels . ,xaxes-labels) + (display . #t) + (scaleLabel + . ((display . #t) + (labelString . ,x-label)))))) + (time-xAxes (vector `((type . "time") + (time . ((unit . "day"))) + (display . #t) + (distribution . "series") + (scaleLabel + . ((display . #t) + (labelString . ,x-label)))))) + (scales `((xAxes . ,(if time-x-axes? + time-xAxes + normal-xAxes)) (yAxes - . ,(vector '((display . #t) + . ,(vector `((display . #t) (scaleLabel . ((display . #t) - (labelString . "Builds")))))))) + (labelString . ,y-label)))))))) (chart `((type . "line") (data . ((datasets . ,(apply vector @@ -872,7 +884,9 @@ window.~a = new Chart\ (define* (global-metrics-content #:key avg-eval-durations + avg-eval-build-start-time builds-per-day + eval-completion-speed new-derivations-per-day pending-builds percentage-failed-eval) @@ -902,7 +916,22 @@ window.~a = new Chart\ `((x . ,(* field 1000)) (y . ,value)))) builds))) + (define (evals->json-scm evals) + (apply vector + (map (match-lambda + ((field . value) + `((x . ,(number->string field)) (y . ,value)))) + evals))) + + (define (evals->labels evals) + (apply vector + (map (match-lambda + ((field . value) field)) + evals))) + (let ((builds-chart "builds_per_day") + (build-start-chart "avg_eval_build_start_time") + (evaluation-speed-chart "eval_speed_chart") (pending-builds-chart "pending_builds")) `((p (@ (class "lead")) "Global metrics") (h6 "Average evaluation duration per specification (seconds).") @@ -918,6 +947,12 @@ window.~a = new Chart\ (h6 "Build speed.") (canvas (@ (id ,builds-chart))) (br) + (h6 "Evaluation average build start time.") + (canvas (@ (id ,build-start-chart))) + (br) + (h6 "Evaluation completion speed.") + (canvas (@ (id ,evaluation-speed-chart))) + (br) (h6 "Pending builds.") (canvas (@ (id ,pending-builds-chart))) (br) @@ -936,13 +971,37 @@ window.~a = new Chart\ (list (builds->json-scm new-derivations-per-day) (builds->json-scm builds-per-day)) #:interpolation? #f + #:time-x-axes? #t + #:x-label "Day" + #:y-label "Builds" #:title "Builds per day" #:legend? #t #:labels '("New derivations" "Builds completed") #:colors (list "#f6dd27" "#3e95cd")) + ,@(make-line-chart build-start-chart + (list (evals->json-scm avg-eval-build-start-time)) + #:xaxes-labels (evals->labels + avg-eval-build-start-time) + #:x-label "Evaluations" + #:y-label "Time (s)" + #:title "Evaluation average build start time" + #:labels '("Build start time") + #:colors (list "#3e95cd")) + ,@(make-line-chart evaluation-speed-chart + (list (evals->json-scm eval-completion-speed)) + #:xaxes-labels (evals->labels + eval-completion-speed) + #:x-label "Evaluations" + #:y-label "Speed (builds/hour)" + #:title "Evaluation completion speed" + #:labels '("Completion speed") + #:colors (list "#3e95cd")) ,@(make-line-chart pending-builds-chart (list (builds->json-scm pending-builds)) + #:time-x-axes? #t + #:x-label "Day" + #:y-label "Builds" #:title "Pending builds" #:labels '("Pending builds") #:colors (list "#3e95cd"))))) |