about summary refs log tree commit diff
path: root/gn/services/monitoring.scm
blob: 9475d3108d9e04dbebe0cbf73e1cd922b9ca002e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(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>
  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 <guile-sheepdog-configuration> (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))))