branch: main
commit c263b657908a46aa79d153f26da626afc23e081b
Author: Ludovic Courtès <l...@gnu.org>
AuthorDate: Sun Jan 5 17:27:12 2025 +0100

    metrics: Add #:timestamp? to ‘db-get-metrics-with-id’.
    
    * src/cuirass/metrics.scm (db-get-metrics-with-id): Add #:timestamp? and
    honor it.
---
 src/cuirass/metrics.scm | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/cuirass/metrics.scm b/src/cuirass/metrics.scm
index e4c6cf5..28bf128 100644
--- a/src/cuirass/metrics.scm
+++ b/src/cuirass/metrics.scm
@@ -378,28 +378,34 @@ DELETE FROM Metrics WHERE type =" index " AND field = " 
name ";")))
 
 (define* (db-get-metrics-with-id id
                                  #:key
+                                 timestamp?
                                  limit
                                  (order "id DESC"))
-  "Return the metrics with the given ID.  If LIMIT is set, the resulting list
-if restricted to LIMIT records."
+  "Return the metrics with the given ID as a key/value alist or, when
+TIMESTAMP? is true, as a list of timestamp/key/value tuples.  If LIMIT is set,
+the resulting list is restricted to LIMIT records."
   (with-db-connection db
     (let* ((metric (find-metric id))
            (type (metric->type metric))
            (field-type (metric-field-type metric))
            (limit (or limit "ALL")))
-      (let ((query (format #f "SELECT field, value from Metrics
+      (let ((query (format #f "SELECT field, value, timestamp FROM Metrics
 WHERE type = :type ORDER BY ~a LIMIT ~a" order limit))
             (params `((#:type . ,type))))
         (let loop ((rows (exec-query/bind-params db query params))
                    (metrics '()))
           (match rows
             (() (reverse metrics))
-            (((field value) . rest)
+            (((field value timestamp) . rest)
              (let ((field (match field-type
                             ('int (string->number field))
                             (else field))))
                (loop rest
-                     `((,field . ,(locale-string->inexact value))
+                     `(,(if timestamp?
+                            `(,(string->number timestamp)
+                              ,field
+                              ,(locale-string->inexact value))
+                            `(,field . ,(locale-string->inexact value)))
                        ,@metrics))))))))))
 
 (define* (db-update-metric id #:optional field

Reply via email to