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