summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-01-28 14:34:59 +0100
committerMarius Bakke <marius@gnu.org>2022-01-29 12:52:37 +0100
commit5122805c4849034c567ca90be5de8117b2581b3e (patch)
tree6ebac43860371e6ddee19220cfbf6ff0b7a04aa7
parent0d347fe83eabc0786590fe0a60646c5824bfad2b (diff)
downloadguix-patches-5122805c4849034c567ca90be5de8117b2581b3e.tar
guix-patches-5122805c4849034c567ca90be5de8117b2581b3e.tar.gz
services: zabbix-server: Add shepherd actions for runtime control commands.
* gnu/services/monitoring.scm (zabbix-server-runtime-control-procedure, zabbix-server-actions): New variables. (zabbix-server-shepherd-service)[actions]: New field. Let-bind variables common between actions and the start procedure.
-rw-r--r--gnu/services/monitoring.scm76
1 files changed, 60 insertions, 16 deletions
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 957672882a..a331bf1117 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
;;; Copyright © 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
;;; Copyright © 2018, 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -334,7 +335,6 @@ configuration file."))
#~(begin
(use-modules (guix build utils)
(ice-9 rdelim))
-
(let ((user (getpw #$(zabbix-server-configuration-user config))))
(for-each (lambda (file)
(let ((directory (dirname file)))
@@ -345,25 +345,69 @@ configuration file."))
#$(zabbix-server-configuration-pid-file config)
"/etc/zabbix/maintenance.inc.php"))))))
+(define (zabbix-server-runtime-control-procedure zabbix-server config command)
+ ;; XXX: This is duplicated from mcron; factorize.
+ #~(lambda (_ . args)
+ ;; Run 'zabbix_server' in a pipe so we can explicitly redirect its output
+ ;; to 'current-output-port', which at this stage is bound to the client
+ ;; connection.
+ (let ((pipe (apply open-pipe* OPEN_READ #$zabbix-server
+ "--config" #$config
+ "-R" #$command args)))
+ (let loop ()
+ (match (read-line pipe 'concat)
+ ((? eof-object?)
+ (catch 'system-error
+ (lambda ()
+ (zero? (close-pipe pipe)))
+ (lambda args
+ ;; There's a race with the SIGCHLD handler, which could
+ ;; call 'waitpid' before 'close-pipe' above does. If we
+ ;; get ECHILD, that means we lost the race; in that case, we
+ ;; cannot tell what the exit code was (FIXME).
+ (or (= ECHILD (system-error-errno args))
+ (apply throw args)))))
+ (line
+ (display line)
+ (loop)))))))
+
+;; Provide shepherd actions for common "zabbix_server -R" commands
+;; mainly for a convenient way to use the correct configuration file.
+(define (zabbix-server-actions zabbix-server config)
+ (list (shepherd-action
+ (name 'reload-config-cache)
+ (documentation "Reload the configuration cache.")
+ (procedure (zabbix-server-runtime-control-procedure
+ zabbix-server config "config_cache_reload")))
+ (shepherd-action
+ (name 'reload-snmp-cache)
+ (documentation "Reload SNMP cache.")
+ (procedure (zabbix-server-runtime-control-procedure
+ zabbix-server config "snmp_cache_reload")))))
+
(define (zabbix-server-shepherd-service config)
"Return a <shepherd-service> for Zabbix server with CONFIG."
- (list (shepherd-service
- (provision '(zabbix-server))
- (documentation "Run Zabbix server daemon.")
- (start #~(make-forkexec-constructor
- (list #$(file-append (zabbix-server-configuration-zabbix-server config)
- "/sbin/zabbix_server")
- "--config" #$(zabbix-server-config-file config)
- "--foreground")
- #:user #$(zabbix-server-configuration-user config)
- #:group #$(zabbix-server-configuration-group config)
- #:pid-file #$(zabbix-server-configuration-pid-file config)
- #:environment-variables
- (list "SSL_CERT_DIR=/run/current-system/profile\
+ (let ((zabbix-server
+ (file-append (zabbix-server-configuration-zabbix-server config)
+ "/sbin/zabbix_server"))
+ (config-file (zabbix-server-config-file config)))
+ (list (shepherd-service
+ (provision '(zabbix-server))
+ (documentation "Run the Zabbix server daemon.")
+ (actions (zabbix-server-actions zabbix-server config-file))
+ (start #~(make-forkexec-constructor
+ (list #$zabbix-server
+ "--config" #$config-file
+ "--foreground")
+ #:user #$(zabbix-server-configuration-user config)
+ #:group #$(zabbix-server-configuration-group config)
+ #:pid-file #$(zabbix-server-configuration-pid-file config)
+ #:environment-variables
+ (list "SSL_CERT_DIR=/run/current-system/profile\
/etc/ssl/certs"
- "SSL_CERT_FILE=/run/current-system/profile\
+ "SSL_CERT_FILE=/run/current-system/profile\
/etc/ssl/certs/ca-certificates.crt")))
- (stop #~(make-kill-destructor)))))
+ (stop #~(make-kill-destructor))))))
(define zabbix-server-service-type
(service-type