(define-module (gn services monitoring) #:use-module (gnu) #:use-module (gnu services shepherd) #:use-module (gnu services databases) #:use-module ((gn packages guile) #:select (guile-sheepdog)) #:use-module (guix gexp) #:use-module (guix records) #:use-module (ice-9 match) #:export (guile-sheepdog-configuration guile-sheepdog-configuration? guile-sheepdog-configuration-settings-file guile-sheepdog-configuration-package guile-sheepdog-service-type)) (define-record-type* guile-sheepdog-configuration make-guile-sheepdog-configuration guile-sheepdog-configuration? (settings-file guile-sheepdog-configuration-settings-file (default "/etc/conn.scm")) (package guile-sheepdog-configuration-package (default guile-sheepdog))) (define (guile-sheepdog-gexp config) (match-record config (settings-file package) (program-file "guile-sheepdog" (with-imported-modules '((guix build utils)) #~(begin (use-modules (guix build utils)) (invoke #$(file-append package "/bin/guile-sheepdog") #$settings-file)))))) (define (guile-sheepdog-shepherd-service config) (shepherd-service (documentation "Run Sheepdog") (provision '(guile-sheepdog)) (requirement '(networking redis)) (start #~(make-forkexec-constructor (list #$(guile-sheepdog-gexp config)) #:log-file "/var/log/sheepdog.log")) (stop #~(make-kill-destructor)))) (define guile-sheepdog-service-type (service-type (name 'guile-sheepdog) (description "Run sheepdog monitor") (extensions (list (service-extension shepherd-root-service-type (compose list guile-sheepdog-shepherd-service)))) (default-value (guile-sheepdog-configuration))))