From: John Soo <jsoo1@asu.edu>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 44460@debbugs.gnu.org
Subject: [bug#44460] Add copyright lines
Date: Fri, 13 Nov 2020 08:16:25 -0800 [thread overview]
Message-ID: <87eekxxmee.fsf@asu.edu> (raw)
In-Reply-To: <87pn4hn7lr.fsf@asu.edu> (John Soo's message of "Thu, 12 Nov 2020 21:33:52 -0800")
[-- Attachment #1: Type: text/plain, Size: 86 bytes --]
Hello again,
No big changes here, I just forgot to update the manual again.
- John
[-- Attachment #2: 0001-processes-Put-ChildProcess-and-ChildPID-on-separate-.patch --]
[-- Type: text/x-patch, Size: 4024 bytes --]
From 6082c559d1200e632b3fb45eb0633d28829667a1 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Thu, 12 Nov 2020 21:16:48 -0800
Subject: [PATCH 1/2] processes: Put ChildProcess and ChildPID on separate
lines.
* guix/scripts/processes.scm: Put child process information in
separate fields.
* doc/guix.texi: Document change in output of guix processes.
---
doc/guix.texi | 22 +++++++++++++---------
guix/scripts/processes.scm | 6 ++++--
2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 5e3e0435b4..e8814c686c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -82,6 +82,7 @@ Copyright @copyright{} 2020 Pierre Langlois@*
Copyright @copyright{} 2020 pinoaffe@*
Copyright @copyright{} 2020 André Batista@*
Copyright @copyright{} 2020 Alexandru-Sergiu Marton@*
+Copyright @copyright{} 2020 John Soo@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -12661,9 +12662,12 @@ ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
-ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
-ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
-ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
+ChildPID: 20495
+ChildCommand: guix offload x86_64-linux 7200 1 28800
+ChildPID: 27733
+ChildCommand: guix offload x86_64-linux 7200 1 28800
+ChildPID: 27793
+ChildCommand: guix offload x86_64-linux 7200 1 28800
@end example
In this example we see that @command{guix-daemon} has three clients:
@@ -12672,12 +12676,12 @@ integration tool; their process identifier (PID) is given by the
@code{ClientPID} field. The @code{SessionPID} field gives the PID of the
@command{guix-daemon} sub-process of this particular session.
-The @code{LockHeld} fields show which store items are currently locked by this
-session, which corresponds to store items being built or substituted (the
-@code{LockHeld} field is not displayed when @command{guix processes} is not
-running as root). Last, by looking at the @code{ChildProcess} field, we
-understand that these three builds are being offloaded (@pxref{Daemon Offload
-Setup}).
+The @code{LockHeld} fields show which store items are currently locked
+by this session, which corresponds to store items being built or
+substituted (the @code{LockHeld} field is not displayed when
+@command{guix processes} is not running as root). Last, by looking at
+the @code{ChildPID} and @code{ChildCommand} fields, we understand that
+these three builds are being offloaded (@pxref{Daemon Offload Setup}).
The output is in Recutils format so we can use the handy @command{recsel}
command to select sessions of interest (@pxref{Selection Expressions,,,
diff --git a/guix/scripts/processes.scm b/guix/scripts/processes.scm
index b4ca7b1687..3a7ea0b89c 100644
--- a/guix/scripts/processes.scm
+++ b/guix/scripts/processes.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 John Soo <jsoo1@asu.edu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -188,8 +189,9 @@ active sessions, and the master 'guix-daemon' process."
(format port "LockHeld: ~a~%" lock))
(daemon-session-locks-held session))
(for-each (lambda (process)
- (format port "ChildProcess: ~a:~{ ~a~}~%"
- (process-id process)
+ (format port "ChildPID: ~a~%"
+ (process-id process))
+ (format port "ChildCommand: :~{ ~a~}~%"
(process-command process)))
(daemon-session-children session)))
--
2.29.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-processes-Optionally-normalize-recutils-output.patch --]
[-- Type: text/x-patch, Size: 8472 bytes --]
From becf3a8fee4aea0a49dde47f5728410b97d94fbf Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Wed, 4 Nov 2020 07:51:52 -0800
Subject: [PATCH 2/2] processes: Optionally normalize recutils output.
* guix/scripts/processes.scm: Add "format" and "list-formats" flag.
* doc/guix.texi: Document new flags.
---
doc/guix.texi | 38 ++++++++++
guix/scripts/processes.scm | 144 ++++++++++++++++++++++++++++++++-----
2 files changed, 163 insertions(+), 19 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index e8814c686c..d67ccd8acc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12695,6 +12695,44 @@ ClientPID: 19419
ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
@end example
+Additional options are listed below.
+
+@table @code
+@item --format=@var{format}
+@itemx -f @var{format}
+Produce output in the specified @var{format}, one of:
+
+@table @code
+@item recutils
+The default option. It outputs a set of Session recutils records
+that include each ChildProcess as a field.
+
+@item normalized
+Normalize the output records into record sets (@pxref{Record Sets,,,
+recutils, GNU recutils manual}). Normalizing into record sets allows
+joins across record types. The example below lists the PID of each
+ChildProcess and the associated PID for Session that spawned the
+ChildProcess where the Session was started using guix build.
+
+@example
+$ guix processes --format=normalized | \
+ recsel \
+ -j Session \
+ -t ChildProcess \
+ -p Session.PID,PID \
+ -e 'Session.ClientCommand ~ "guix build'"
+PID: 4435
+Session_PID: 4278
+
+PID: 4554
+Session_PID: 4278
+
+PID: 4646
+Session_PID: 4278
+@end example
+@end table
+@end table
+
@node System Configuration
@chapter System Configuration
diff --git a/guix/scripts/processes.scm b/guix/scripts/processes.scm
index 3a7ea0b89c..bcc541badb 100644
--- a/guix/scripts/processes.scm
+++ b/guix/scripts/processes.scm
@@ -177,6 +177,9 @@ active sessions, and the master 'guix-daemon' process."
(values (filter-map child-process->session children)
master)))
+(define (lock->recutils lock port)
+ (format port "LockHeld: ~a~%" lock))
+
(define (daemon-session->recutils session port)
"Display SESSION information in recutils format on PORT."
(format port "SessionPID: ~a~%"
@@ -185,8 +188,7 @@ active sessions, and the master 'guix-daemon' process."
(process-id (daemon-session-client session)))
(format port "ClientCommand:~{ ~a~}~%"
(process-command (daemon-session-client session)))
- (for-each (lambda (lock)
- (format port "LockHeld: ~a~%" lock))
+ (for-each (lambda (lock) (lock->recutils lock port))
(daemon-session-locks-held session))
(for-each (lambda (process)
(format port "ChildPID: ~a~%"
@@ -195,19 +197,102 @@ active sessions, and the master 'guix-daemon' process."
(process-command process)))
(daemon-session-children session)))
+(define (daemon-sessions->recutils port sessions)
+ "Display denormalized SESSIONS information to PORT."
+ (for-each (lambda (session)
+ (daemon-session->recutils session port)
+ (newline port))
+ sessions))
+
+(define session-rec-type
+ "%rec: Session
+%type: PID int
+%type: ClientPID int
+%key: PID
+%mandatory: ClientPID ClientCommand")
+
+(define lock-rec-type
+ "%rec: Lock
+%mandatory: LockHeld
+%type: Session rec Session")
+
+(define child-process-rec-type
+ "%rec: ChildProcess
+%type: PID int
+%type: Session rec Session
+%key: PID
+%mandatory: Command")
+
+(define (session-key->recutils session port)
+ "Display SESSION PID as a recutils field on PORT."
+ (format
+ port "Session: ~a"
+ (process-id (daemon-session-process session))))
+
+(define (session-scalars->normalized-record session port)
+ "Display SESSION scalar fields to PORT in normalized form."
+ (format port "PID: ~a~%"
+ (process-id (daemon-session-process session)))
+ (format port "ClientPID: ~a~%"
+ (process-id (daemon-session-client session)))
+ (format port "ClientCommand:~{ ~a~}~%"
+ (process-command (daemon-session-client session))))
+
+(define (child-process->normalized-record process port)
+ "Display PROCESS record on PORT in normalized form"
+ (format port "PID: ~a" (process-id process))
+ (newline port)
+ (format port "Command:~{ ~a~}" (process-command process)))
+
+(define (daemon-sessions->normalized-record port sessions)
+ "Display SESSIONS recutils on PORT in normalized form"
+ (display session-rec-type port)
+ (newline port)
+ (newline port)
+ (for-each (lambda (session)
+ (session-scalars->normalized-record session port)
+ (newline port))
+ sessions)
+
+ (display lock-rec-type port)
+ (newline port)
+ (newline port)
+ (for-each (lambda (session)
+ (for-each (lambda (lock)
+ (lock->recutils "testing testing" port)
+ (session-key->recutils session port)
+ (newline port)
+ (newline port))
+ (daemon-session-locks-held session)))
+ sessions)
+
+ (display child-process-rec-type port)
+ (newline port)
+ (newline port)
+ (for-each (lambda (session)
+ (for-each (lambda (process)
+ (child-process->normalized-record process port)
+ (newline port)
+ (session-key->recutils session port)
+ (newline port)
+ (newline port))
+ (daemon-session-children session)))
+ sessions))
+
\f
;;;
;;; Options.
;;;
-(define %options
- (list (option '(#\h "help") #f #f
- (lambda args
- (show-help)
- (exit 0)))
- (option '(#\V "version") #f #f
- (lambda args
- (show-version-and-exit "guix processes")))))
+(define %available-formats
+ '("recutils" "normalized"))
+
+(define (list-formats)
+ (display (G_ "The available formats are:\n"))
+ (newline)
+ (for-each (lambda (f)
+ (format #t " - ~a~%" f))
+ %available-formats))
(define (show-help)
(display (G_ "Usage: guix processes
@@ -218,8 +303,33 @@ List the current Guix sessions and their processes."))
(display (G_ "
-V, --version display version information and exit"))
(newline)
+ (display (G_ "
+ -f, --format=FORMAT display results as normalized record sets"))
+ (display (G_ "
+ --list-formats display available formats"))
+ (newline)
(show-bug-report-information))
+(define %options
+ (list (option '(#\h "help") #f #f
+ (lambda args
+ (show-help)
+ (exit 0)))
+ (option '(#\V "version") #f #f
+ (lambda args
+ (show-version-and-exit "guix processes")))
+ (option '(#\f "format") #t #f
+ (lambda (opt name arg result)
+ (unless (member arg %available-formats)
+ (leave (G_ "~a: unsupported output format~%") arg))
+ (alist-cons 'format (string->symbol arg) result)))
+ (option '("list-formats") #f #f
+ (lambda (opt name arg result)
+ (list-formats)
+ (exit 0)))))
+
+(define %default-options '((format . recutils)))
+
\f
;;;
;;; Entry point.
@@ -229,17 +339,13 @@ List the current Guix sessions and their processes."))
(category plumbing)
(synopsis "list currently running sessions")
(define options
- (args-fold* args %options
- (lambda (opt name arg result)
- (leave (G_ "~A: unrecognized option~%") name))
- cons
- '()))
+ (parse-command-line args %options (list %default-options)))
(with-paginated-output-port port
- (for-each (lambda (session)
- (daemon-session->recutils session port)
- (newline port))
- (daemon-sessions))
+ (match (assoc-ref options 'format)
+ ('normalized
+ (daemon-sessions->normalized-record port (daemon-sessions)))
+ (_ (daemon-sessions->recutils port (daemon-sessions))))
;; Pass 'R' (instead of 'r') so 'less' correctly estimates line length.
#:less-options "FRX"))
--
2.29.1
next prev parent reply other threads:[~2020-11-13 16:20 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-05 4:31 [bug#44460] [PATCH] processes: Optionally normalize recutils output John Soo
2020-11-05 15:49 ` [bug#44460] processes: Don't normalize Locks John Soo
2020-11-05 16:01 ` [bug#44460] Fixup the output of Session John Soo
2020-11-06 23:34 ` [bug#44460] Add copyright lines John Soo
2020-11-10 22:15 ` Ludovic Courtès
2020-11-11 17:51 ` John Soo
2020-11-11 17:59 ` John Soo
2020-11-11 18:47 ` John Soo
2020-11-12 10:58 ` Ludovic Courtès
2020-11-12 15:37 ` John Soo
2020-11-12 20:29 ` Ludovic Courtès
2020-11-13 5:33 ` John Soo
2020-11-13 16:16 ` John Soo [this message]
2020-11-29 22:49 ` bug#44460: " Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87eekxxmee.fsf@asu.edu \
--to=jsoo1@asu.edu \
--cc=44460@debbugs.gnu.org \
--cc=ludo@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).