[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Mathieu Othacehe |
Date: |
Mon, 7 Dec 2020 10:14:56 -0500 (EST) |
branch: master
commit ac2187ff6b10c7a1e974b21e27ddea51b5e112e2
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Mon Dec 7 15:34:29 2020 +0100
http: Add /api/evaluation route.
* src/cuirass/database.scm (db-get-evaluation): New procedure.
* src/cuirass/http.scm (url-handler): Add "/api/evaluation" route.
---
src/cuirass/database.scm | 16 ++++++++++++++++
src/cuirass/http.scm | 8 ++++++++
2 files changed, 24 insertions(+)
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index 3d86c1b..c160692 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -73,6 +73,7 @@
db-add-event
db-get-events
db-delete-events-with-ids-<=-to
+ db-get-evaluation
db-get-evaluations
db-get-evaluations-build-summary
db-get-evaluations-id-min
@@ -1190,6 +1191,21 @@ WHERE evaluation =" eval-id ";"))
(#:directory . ,directory))
checkouts)))))))
+(define (db-get-evaluation id)
+ (with-db-worker-thread db
+ (match (sqlite-exec db "SELECT id, specification, status,
+timestamp, checkouttime, evaltime
+FROM Evaluations WHERE id = " id)
+ (() #f)
+ ((#(id specification status timestamp checkouttime evaltime))
+ `((#:id . ,id)
+ (#:specification . ,specification)
+ (#:status . ,status)
+ (#:timestamp . ,timestamp)
+ (#:checkouttime . ,checkouttime)
+ (#:evaltime . ,evaltime)
+ (#:checkouts . ,(db-get-checkouts id)))))))
+
(define (db-get-evaluations limit)
(with-db-worker-thread db
(let loop ((rows (sqlite-exec db "SELECT id, specification, status,
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index f721917..99dc2ce 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -476,6 +476,14 @@ Hydra format."
(append output
`((#:build . ,(or build #nil)))))))
(respond-output-not-found id))))
+ (('GET "api" "evaluation")
+ (let* ((params (request-parameters request))
+ (id (assq-ref params 'id)))
+ (if id
+ (respond-json (object->json-string
+ (evaluation->json-object
+ (db-get-evaluation id))))
+ (respond-json-with-error 500 "Parameter not defined!"))))
(('GET "api" "evaluations")
(let* ((params (request-parameters request))
;; 'nr parameter is mandatory to limit query size.