diff options
author | Christopher Baines <mail@cbaines.net> | 2020-06-28 22:28:22 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-07-01 17:43:38 +0100 |
commit | 5e61bc03b4f33ebb7378a3647bde6269b70c99fb (patch) | |
tree | 433efca50c7fbce50ae3b23a57e959a40c7ad779 | |
parent | f3eadb6984bc3fb9a4b69633c9ad68e143e95173 (diff) | |
download | build-coordinator-5e61bc03b4f33ebb7378a3647bde6269b70c99fb.tar build-coordinator-5e61bc03b4f33ebb7378a3647bde6269b70c99fb.tar.gz |
Add a function to notify the Guix Data Service about build events
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | guix-build-coordinator/guix-data-service.scm | 50 |
2 files changed, 51 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 59af3c8..d73488b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -16,6 +16,7 @@ SOURCES = \ guix-build-coordinator/datastore/abstract.scm \ guix-build-coordinator/datastore/postgresql.scm \ guix-build-coordinator/datastore/sqlite.scm \ + guix-build-coordinator/guix-data-service.scm \ guix-build-coordinator/hooks.scm \ guix-build-coordinator/metrics.scm \ guix-build-coordinator/utils.scm diff --git a/guix-build-coordinator/guix-data-service.scm b/guix-build-coordinator/guix-data-service.scm new file mode 100644 index 0000000..d777b49 --- /dev/null +++ b/guix-build-coordinator/guix-data-service.scm @@ -0,0 +1,50 @@ +;;; Guix Build Coordinator +;;; +;;; Copyright © 2020 Christopher Baines <mail@cbaines.net> +;;; +;;; This file is part of the guix-build-coordinator. +;;; +;;; The Guix Build Coordinator is free software; you can redistribute +;;; it and/or modify it under the terms of the GNU General Public +;;; License as published by the Free Software Foundation; either +;;; version 3 of the License, or (at your option) any later version. +;;; +;;; The Guix Build Coordinator is distributed in the hope that it will +;;; be useful, but WITHOUT ANY WARRANTY; without even the implied +;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +;;; See the GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with the guix-data-service. If not, see +;;; <http://www.gnu.org/licenses/>. + +(define-module (guix-build-coordinator guix-data-service) + #:use-module (srfi srfi-11) + #:use-module (ice-9 exceptions) + #:use-module (rnrs bytevectors) + #:use-module (json) + #:use-module (web client) + #:use-module (web response) + #:export (send-build-event-to-guix-data-service)) + +(define (send-build-event-to-guix-data-service target-url event) + (define body + (scm->json-string + `((items . ,(vector event))))) + + (let*-values + (((response body) + (http-post target-url + #:body body + ;; Guile doesn't treat JSON as text, so decode the + ;; body manually + #:decode-body? #f)) + ((code) + (response-code response))) + (unless (and (>= code 200) + (< code 300)) + (raise-exception + (make-exception-with-message + (simple-format #f "code: ~A response: ~A" + code + (utf8->string body))))))) |