guix-commits
[Top][All Lists]
Advanced

[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);")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]