[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Mathieu Othacehe |
Date: |
Mon, 22 Feb 2021 03:09:13 -0500 (EST) |
branch: master
commit f0e0c3454f89ed1d3655d8e1f288f144fe9aa5a1
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Mon Feb 22 09:05:27 2021 +0100
Add parameters support.
* src/cuirass/parameters.scm: New file.
* Makefile.am (dist_pkgmodule_DATA): Add it.
* bin/cuirass.in: Add "parameters" argument.
* src/cuirass/base.scm (read-parameters): New procedure.
* src/cuirass/notification.scm (build-details-url): New procedure.
(notification-text): Use it.
* src/cuirass/rss.scm (build-details-url): New procedure.
(build->rss-item): Use it.
(rss-feed): Remove "base-url" argument.
* src/cuirass/remote-server.scm: Add "parameters" argument.
* src/cuirass/zabbix.scm (%zabbix-uri, %zabbix-uri, %zabbix-password):
Remove
them.
(zabbix-request, zabbix-login): Adapt accordingly.
---
Makefile.am | 1 +
bin/cuirass.in | 8 +++++---
src/cuirass/base.scm | 11 +++++++++++
src/cuirass/notification.scm | 13 +++++++++----
src/cuirass/parameters.scm | 41 +++++++++++++++++++++++++++++++++++++++++
src/cuirass/remote-server.scm | 9 +++++++++
src/cuirass/rss.scm | 17 +++++++++++------
src/cuirass/zabbix.scm | 23 +++++++----------------
8 files changed, 94 insertions(+), 29 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 0a22eae..8d071cb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -57,6 +57,7 @@ dist_pkgmodule_DATA = \
src/cuirass/mastodon.scm \
src/cuirass/metrics.scm \
src/cuirass/notification.scm \
+ src/cuirass/parameters.scm \
src/cuirass/remote.scm \
src/cuirass/remote-server.scm \
src/cuirass/remote-worker.scm \
diff --git a/bin/cuirass.in b/bin/cuirass.in
index e5b7ff9..8dbb14f 100644
--- a/bin/cuirass.in
+++ b/bin/cuirass.in
@@ -53,6 +53,8 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0" "$@"
--fallback Fall back to building when the substituter fails.
-S --specifications=SPECFILE
Add specifications from SPECFILE to database.
+ -P --parameters=PARAMFILE
+ Read parameters for PARAMFILE.
-D --database=DB Use DB to store build results.
--ttl=DURATION Keep build results live for at least DURATION.
--web Start the web interface
@@ -63,7 +65,6 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0" "$@"
--use-substitutes Allow usage of pre-built substitutes
--record-events Record events for distribution
--threads=N Use up to N kernel threads
- -z, --zabbix-uri=URI Use Zabbix server at URI
-V, --version Display version
-h, --help Display this help message")
(newline)
@@ -74,6 +75,7 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0" "$@"
(web (value #f))
(cache-directory (value #t))
(specifications (single-char #\S) (value #t))
+ (parameters (single-char #\P) (value #t))
(database (single-char #\D) (value #t))
(port (single-char #\p) (value #t))
(listen (value #t))
@@ -81,7 +83,6 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0" "$@"
(build-remote (value #f))
(use-substitutes (value #f))
(threads (value #t))
- (zabbix-uri (single-char #\z) (value #t))
(fallback (value #f))
(record-events (value #f))
(ttl (value #t))
@@ -110,7 +111,6 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0"
"$@"
(%package-cachedir
(option-ref opts 'cache-directory (%package-cachedir)))
(%build-remote? (option-ref opts 'build-remote #f))
- (%zabbix-uri (option-ref opts 'zabbix-uri #f))
(%use-substitutes? (option-ref opts 'use-substitutes #f))
(%fallback? (option-ref opts 'fallback #f))
(%record-events? (option-ref opts 'record-events #f))
@@ -132,6 +132,7 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0"
"$@"
(host (option-ref opts 'listen "localhost"))
(interval (string->number (option-ref opts 'interval "300")))
(specfile (option-ref opts 'specifications #f))
+ (paramfile (option-ref opts 'parameters #f))
;; Since our work is mostly I/O-bound, default to a maximum of 4
;; kernel threads. Going beyond that can increase overhead (GC
@@ -155,6 +156,7 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0"
"$@"
(primitive-load specfile)))))
(for-each db-add-specification new-specs)))
+ (and paramfile (read-parameters paramfile))
(if one-shot?
(process-specs (db-get-specifications))
diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index d74a807..8528409 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -32,6 +32,7 @@
#:use-module (guix build utils)
#:use-module (guix derivations)
#:use-module (guix store)
+ #:use-module (guix ui)
#:use-module (guix git)
#:use-module (guix cache)
#:use-module (zlib)
@@ -60,6 +61,7 @@
#:use-module (rnrs bytevectors)
#:export (;; Procedures.
call-with-time-display
+ read-parameters
fetch-input
fetch-inputs
compile
@@ -378,6 +380,15 @@ Return a list of jobs that are associated to EVAL-ID."
;;;
+;;; Read parameters.
+;;;
+
+(define (read-parameters file)
+ (let ((modules (make-user-module '((cuirass parameters)))))
+ (load* file modules)))
+
+
+;;;
;;; Build status.
;;;
diff --git a/src/cuirass/notification.scm b/src/cuirass/notification.scm
index 358005e..262b90d 100644
--- a/src/cuirass/notification.scm
+++ b/src/cuirass/notification.scm
@@ -17,10 +17,10 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (cuirass notification)
- #:use-module (cuirass database)
#:use-module (cuirass logging)
#:use-module (cuirass mail)
#:use-module (cuirass mastodon)
+ #:use-module (cuirass parameters)
#:use-module (cuirass utils)
#:export (notification-type
notification-event
@@ -72,6 +72,12 @@ interfering with fibers."
((= weather weather-failure)
"broken"))))
+(define (build-details-url build)
+ "Return the build details URL for BUILD."
+ (let ((id (assq-ref build #:id))
+ (url (or (%cuirass-url) "")))
+ (string-append url "/build/" (number->string id) "/details")))
+
(define (notification-subject notification)
"Return the subject for the given NOTIFICATION."
(let* ((build (assq-ref notification #:build))
@@ -84,14 +90,13 @@ interfering with fibers."
(define (notification-text notification)
"Return the text for the given NOTIFICATION."
(let* ((build (assq-ref notification #:build))
- (id (assq-ref build #:id))
+ (url (build-details-url build))
(job-name (assq-ref build #:job-name))
(specification (assq-ref build #:specification))
(weather-text (build-weather-text build)))
(format #f "The build ~a for specification ~a is ~a. You can find
the detailed information about this build here: ~a."
- job-name specification weather-text
- (string-append "build/" (number->string id) "/details"))))
+ job-name specification weather-text url)))
(define (notification-email notification)
"Send an email for the given NOTIFICATION."
diff --git a/src/cuirass/parameters.scm b/src/cuirass/parameters.scm
new file mode 100644
index 0000000..e9be8a3
--- /dev/null
+++ b/src/cuirass/parameters.scm
@@ -0,0 +1,41 @@
+;;; parameters.scm -- Cuirass parameters.
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;;
+;;; This file is part of Cuirass.
+;;;
+;;; GNU Guix 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.
+;;;
+;;; GNU Guix 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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (cuirass parameters)
+ #:export (%cuirass-url
+ %zabbix-url
+ %zabbix-user
+ %zabbix-password))
+
+;; The URL of the Cuirass web server. This is useful to send absolute links
+;; within notifications.
+(define %cuirass-url
+ (make-parameter #f))
+
+;; The URL of the Zabbix monitoring server providing the workers status,
+;; if supported.
+(define %zabbix-url
+ (make-parameter #f))
+
+ ;; The user for Zabbix API authentication.
+(define %zabbix-user
+ (make-parameter "Admin"))
+
+;; The password for Zabbix API authentication.
+(define %zabbix-password
+ (make-parameter "zabbix"))
diff --git a/src/cuirass/remote-server.scm b/src/cuirass/remote-server.scm
index 404ed02..5850e0c 100644
--- a/src/cuirass/remote-server.scm
+++ b/src/cuirass/remote-server.scm
@@ -97,6 +97,8 @@ Start a remote build server.\n"))
(display (G_ "
-p, --publish-port=PORT publish substitutes on PORT"))
(display (G_ "
+ -P, --parameters=FILE Read parameters from FILE"))
+ (display (G_ "
-D, --database=DB Use DB to read and store build results"))
(display (G_ "
-c, --cache=DIRECTORY cache built items to DIRECTORY"))
@@ -134,6 +136,9 @@ Start a remote build server.\n"))
(option '(#\p "publish-port") #t #f
(lambda (opt name arg result)
(alist-cons 'publish-port (string->number* arg) result)))
+ (option '(#\P "parameters") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'parameters arg result)))
(option '(#\D "database") #t #f
(lambda (opt name arg result)
(alist-cons 'database arg result)))
@@ -438,6 +443,7 @@ exiting."
(log-port (assoc-ref opts 'log-port))
(publish-port (assoc-ref opts 'publish-port))
(cache (assoc-ref opts 'cache))
+ (parameters (assoc-ref opts 'parameters))
(database (assoc-ref opts 'database))
(trigger-substitute-url (assoc-ref opts 'trigger-substitute-url))
(user (assoc-ref opts 'user))
@@ -458,6 +464,9 @@ exiting."
(when user
(gather-user-privileges user))
+ (and parameters
+ (read-parameters parameters))
+
(atomic-box-set!
%publish-pid
(publish-server publish-port
diff --git a/src/cuirass/rss.scm b/src/cuirass/rss.scm
index 20fa7ba..1be3d37 100644
--- a/src/cuirass/rss.scm
+++ b/src/cuirass/rss.scm
@@ -18,6 +18,7 @@
(define-module (cuirass rss)
#:use-module (cuirass database)
+ #:use-module (cuirass parameters)
#:use-module (cuirass utils)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-26)
@@ -127,9 +128,15 @@ list ATTRS and the child nodes in BODY."
(lambda (port)
(sxml->html sxml port))))
+(define (build-details-url build)
+ "Return the build details URL for BUILD."
+ (let ((id (assq-ref build #:id))
+ (url (or (%cuirass-url) "")))
+ (string-append url "/build/" (number->string id) "/details")))
+
(define* (build->rss-item build)
"Convert BUILD into an RSS <item> node."
- (let* ((id (assq-ref build #:id))
+ (let* ((url (build-details-url build))
(job-name (assq-ref build #:job-name))
(specification (assq-ref build #:specification))
(weather (assq-ref build #:weather))
@@ -147,19 +154,17 @@ list ATTRS and the child nodes in BODY."
(pubDate ,(date->rfc822-str
(time-utc->date
(make-time time-utc 0 stoptime))))
- (link "../../build/" ,id "/details")
+ (link ,url)
(description
,(sxml->html-string
`(p "The build " (b ,job-name) " for specification "
(b ,specification) " is " ,weather-text ".
You can find the detailed information about this build "
- (a (@ (href ,(string-append "../../build/"
- (number->string id)
- "/details")))
+ (a (@ (href ,url))
"here")
"."))))))
-(define* (rss-feed builds #:key base-url params)
+(define* (rss-feed builds #:key params)
(let ((specification (and params
(assq-ref params 'specification))))
`(rss (@ (version "2.0"))
diff --git a/src/cuirass/zabbix.scm b/src/cuirass/zabbix.scm
index adc51cb..90c7665 100644
--- a/src/cuirass/zabbix.scm
+++ b/src/cuirass/zabbix.scm
@@ -17,6 +17,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (cuirass zabbix)
+ #:use-module (cuirass parameters)
#:use-module (guix import json)
#:use-module (web uri)
#:use-module (web client)
@@ -40,24 +41,12 @@
(define %zabbix-auth
(make-parameter #f))
-(define %zabbix-uri
- (make-parameter
- (getenv "CUIRASS_ZABBIX_URI")))
-
-(define %zabbix-user
- (make-parameter
- (or (getenv "CUIRASS_ZABBIX_USER") "Admin")))
-
-(define %zabbix-password
- (make-parameter
- (or (getenv "CUIRASS_ZABBIX_PASSWORD") "zabbix")))
-
(define* (zabbix-request params)
(let ((headers `((User-Agent . "Cuirass")
(Accept . "application/json")
(Content-Type . "application/json"))))
(let-values (((response port)
- (http-post (%zabbix-uri)
+ (http-post (%zabbix-url)
#:headers headers
#:body (string->utf8
(scm->json-string params))
@@ -98,9 +87,11 @@
(string? (zabbix-api-version))))
(define (zabbix-login)
- (let* ((params (zabbix-params "user.login"
- `(("user" . ,(%zabbix-user))
- ("password" . ,(%zabbix-password)))))
+ (let* ((user (%zabbix-user))
+ (password (%zabbix-password))
+ (params (zabbix-params "user.login"
+ `(("user" . ,user)
+ ("password" . ,password))))
(result (zabbix-request params)))
(%zabbix-auth result)
result))