[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Mathieu Othacehe |
Date: |
Wed, 11 Aug 2021 04:05:56 -0400 (EDT) |
branch: master
commit aa2f682facce5de727bdae5bbd5d1a2a27923ebb
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Wed Aug 11 09:49:12 2021 +0200
metrics: Prevent a zero division for percentage-failed-eval-per-spec.
* src/cuirass/metrics.scm (db-percentage-failed-eval-per-spec): Prevent a
zero
division.
* tests/metrics.scm (percentage-failed-eval-per-spec): Test it.
---
src/cuirass/metrics.scm | 9 +++++----
tests/metrics.scm | 11 ++++++++++-
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/cuirass/metrics.scm b/src/cuirass/metrics.scm
index 3ec189d..6eae748 100644
--- a/src/cuirass/metrics.scm
+++ b/src/cuirass/metrics.scm
@@ -116,11 +116,12 @@ WHERE status < 0;"))))
the percentage computation to the most recent LIMIT records."
(with-db-worker-thread db
(let ((query "\
-SELECT 100 *
-CAST(SUM(CASE WHEN m.status > 0 THEN 1 ELSE 0 END) as float) /
-COUNT(*) FROM
+WITH last_evals AS
(SELECT status from Evaluations WHERE specification = :spec
-ORDER BY id DESC LIMIT ~a) m")
+ORDER BY id DESC LIMIT ~a)
+SELECT CASE WHEN COUNT(*) = 0 THEN 0 ELSE
+100 * CAST(SUM(CASE WHEN status > 0 THEN 1 ELSE 0 END) as float) /
+COUNT(*) END FROM last_evals;")
(params `((#:spec . ,spec))))
(return-inexact
(exec-query/bind-params db
diff --git a/tests/metrics.scm b/tests/metrics.scm
index ec689e5..0561b08 100644
--- a/tests/metrics.scm
+++ b/tests/metrics.scm
@@ -42,7 +42,16 @@
(exec-query (%db) "\
INSERT INTO Specifications (name, build, channels, build_outputs,
notifications, priority, systems)
-VALUES ('guix', 'hello', '()', '()', '()', 9, '()');")
+VALUES ('guix', 'hello', '()', '()', '()', 9, '()');")))
+
+ (test-equal "percentage-failed-eval-per-spec"
+ `(("guix" . 0.0))
+ (begin
+ (db-update-metric 'percentage-failed-eval-per-spec "guix")
+ (db-get-metrics-with-id 'percentage-failed-eval-per-spec)))
+
+ (test-assert "exec-query"
+ (begin
(exec-query (%db) "\
INSERT INTO Evaluations (specification, status,
timestamp, checkouttime, evaltime) VALUES ('guix', -1, 1600174547, 0, 0);")