civodul pushed a commit to branch wip-syslogd
in repository shepherd.

commit e8ee0e853d01075dd4848cdc174e73a10a4cf88f
Author: Ludovic Courtès <[email protected]>
AuthorDate: Sat Jul 27 10:46:15 2024 +0200

    squash! Multiple sources + RTD printer.
---
 modules/shepherd/service/system-log.scm | 39 +++++++++++++++++++++++----------
 tests/services/system-log.sh            |  2 +-
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/modules/shepherd/service/system-log.scm 
b/modules/shepherd/service/system-log.scm
index 3919f2a..7311784 100644
--- a/modules/shepherd/service/system-log.scm
+++ b/modules/shepherd/service/system-log.scm
@@ -25,6 +25,7 @@
   #:autoload   (shepherd comm) (system-log-file)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-9 gnu)
   #:use-module (srfi srfi-71)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
@@ -343,7 +344,22 @@ the file(s) returned by @var{log-files} for each message."
   ;; File to read to get kernel messages.
   (make-parameter "/proc/kmsg"))
 
-(define* (system-log-service #:optional (file (system-log-file))
+;; Running system log.
+(define-record-type <system-log>
+  (system-log channel ports dispatcher)
+  system-log?
+  (channel    system-log-channel)
+  (ports      system-log-ports)
+  (dispatcher system-log-dispatcher))
+
+(define (print-system-log log port)
+  (simple-format port "#<system-log ~a>"
+                 (number->string (object-address log) 16)))
+
+(set-record-type-printer! <system-log> print-system-log)
+
+(define* (system-log-service #:optional
+                             (sources (list (system-log-file)))
                              #:key
                              (provision '(system-log syslogd))
                              (requirement '())
@@ -353,20 +369,18 @@ the file(s) returned by @var{log-files} for each message."
                              (max-silent-time (* 20 60)))
   "Return the system log service (@dfn{syslogd}) with the given
 @var{provision} and @var{requirement} (lists of symbols).  The service accepts
-connections on @var{file}, a Unix-domain socket; optionally it also reads
-messages from @code{#:kernel-log-file}, which defaults to @file{/proc/kmsg}
-when running as root.
+connections on @var{sources}, a list of Unix-domain sockets; optionally it
+also reads messages from @code{#:kernel-log-file}, which defaults to
+@file{/proc/kmsg} when running as root.
 
 Log messages are passed to @var{log-files}, a one-argument procedure that must
 return the list of files to write it to.  Write a mark to log files when no
 message has been logged for more than @var{max-silent-time} seconds."
-  (define channel
-    (make-channel))
-
   (service provision
            #:requirement requirement
            #:start (lambda ()
-                     (let ((sockets (cons (open-socket file)
+                     (let ((channel (make-channel))
+                           (ports (append (map open-socket sources)
                                           (if kernel-log-file
                                               (list (open kernel-log-file
                                                           (logior O_RDONLY
@@ -378,11 +392,12 @@ message has been logged for more than 
@var{max-silent-time} seconds."
                                                              max-silent-time)))
                        (spawn-fiber
                         (lambda ()
-                          (run-system-log channel sockets dispatcher)))
-                       sockets))
-           #:stop (lambda (sockets)
+                          (run-system-log channel ports dispatcher)))
+                       (system-log channel ports dispatcher)))
+           #:stop (lambda (system-log)
                     (let ((reply (make-channel)))
-                      (put-message channel `(terminate ,reply))
+                      (put-message (system-log-channel system-log)
+                                   `(terminate ,reply))
                       (get-message reply)         ;wait for complete shutdown
                       #f))
            #:respawn? #f))
diff --git a/tests/services/system-log.sh b/tests/services/system-log.sh
index cec729b..f357c51 100644
--- a/tests/services/system-log.sh
+++ b/tests/services/system-log.sh
@@ -55,7 +55,7 @@ cat > "$conf" <<EOF
             (list "$syslog_file")))))
 
 (register-services
-  (list (system-log-service "$syslog_socket"
+  (list (system-log-service (list "$syslog_socket")
                             #:log-files log-files
                             #:kernel-log-file "$kmsg")
         (service

Reply via email to