* [bug#29699] [PATCH] guix: offload: Add "status" sub-command.
@ 2017-12-13 22:44 Ricardo Wurmus
2017-12-15 10:42 ` Ludovic Courtès
0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Wurmus @ 2017-12-13 22:44 UTC (permalink / raw)
To: 29699; +Cc: Ricardo Wurmus
* guix/scripts/offload.scm (check-machine-load): New procedure.
(guix-offload): Call it when the argument is "status".
* doc/guix.texi (Daemon Offload Setup): Document it.
---
doc/guix.texi | 9 +++++++++
guix/scripts/offload.scm | 26 ++++++++++++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index 92ac45b1c..6845a4271 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -1066,6 +1066,15 @@ regular expression like this:
# guix offload test machines.scm '\.gnu\.org$'
@end example
+@cindex offload status
+To display the current load of all build hosts, run this command on the
+main node:
+
+@example
+# guix offload status
+@end example
+
+
@node Invoking guix-daemon
@section Invoking @command{guix-daemon}
diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm
index ebd0bf783..40bc68b11 100644
--- a/guix/scripts/offload.scm
+++ b/guix/scripts/offload.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -629,6 +630,19 @@ machine."
(for-each assert-node-can-import nodes names sockets)
(for-each assert-node-can-export nodes names sockets))))
+(define (check-machine-load machine-file pred)
+ "Print the load of each machine matching PRED in MACHINE-FILE."
+ (define (build-machine=? m1 m2)
+ (and (string=? (build-machine-name m1) (build-machine-name m2))
+ (= (build-machine-port m1) (build-machine-port m2))))
+
+ ;; A given build machine may appear several times (e.g., once for
+ ;; "x86_64-linux" and a second time for "i686-linux"); test them only once.
+ (let ((machines (filter pred
+ (delete-duplicates (build-machines machine-file)
+ build-machine=?))))
+ (for-each machine-load machines)))
+
\f
;;;
;;; Entry point.
@@ -691,6 +705,18 @@ machine."
(() (values %machine-file (const #t)))
(x (leave (G_ "wrong number of arguments~%"))))))
(check-machine-availability (or file %machine-file) pred))))
+ (("status" rest ...)
+ (with-error-handling
+ (let-values (((file pred)
+ (match rest
+ ((file regexp)
+ (values file
+ (compose (cut string-match regexp <>)
+ build-machine-name)))
+ ((file) (values file (const #t)))
+ (() (values %machine-file (const #t)))
+ (x (leave (G_ "wrong number of arguments~%"))))))
+ (check-machine-load (or file %machine-file) pred))))
(("--version")
(show-version-and-exit "guix offload"))
(("--help")
--
2.15.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [bug#29699] [PATCH] guix: offload: Add "status" sub-command.
2017-12-13 22:44 [bug#29699] [PATCH] guix: offload: Add "status" sub-command Ricardo Wurmus
@ 2017-12-15 10:42 ` Ludovic Courtès
2017-12-15 21:05 ` Ricardo Wurmus
0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2017-12-15 10:42 UTC (permalink / raw)
To: Ricardo Wurmus; +Cc: 29699
Ricardo Wurmus <rekado@elephly.net> skribis:
> * guix/scripts/offload.scm (check-machine-load): New procedure.
> (guix-offload): Call it when the argument is "status".
> * doc/guix.texi (Daemon Offload Setup): Document it.
Nice, LGTM!
> +(define (check-machine-load machine-file pred)
> + "Print the load of each machine matching PRED in MACHINE-FILE."
> + (define (build-machine=? m1 m2)
> + (and (string=? (build-machine-name m1) (build-machine-name m2))
> + (= (build-machine-port m1) (build-machine-port m2))))
> +
> + ;; A given build machine may appear several times (e.g., once for
> + ;; "x86_64-linux" and a second time for "i686-linux"); test them only once.
> + (let ((machines (filter pred
> + (delete-duplicates (build-machines machine-file)
> + build-machine=?))))
> + (for-each machine-load machines)))
Perhaps we could also display information from ‘uname’, as in
<https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/machine-status.scm#n118>?
Thanks!
Ludo’.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [bug#29699] [PATCH] guix: offload: Add "status" sub-command.
2017-12-15 10:42 ` Ludovic Courtès
@ 2017-12-15 21:05 ` Ricardo Wurmus
2017-12-15 22:41 ` Ludovic Courtès
0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Wurmus @ 2017-12-15 21:05 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 29699
Ludovic Courtès <ludo@gnu.org> writes:
> Ricardo Wurmus <rekado@elephly.net> skribis:
>
>> * guix/scripts/offload.scm (check-machine-load): New procedure.
>> (guix-offload): Call it when the argument is "status".
>> * doc/guix.texi (Daemon Offload Setup): Document it.
>
> Nice, LGTM!
>
>> +(define (check-machine-load machine-file pred)
>> + "Print the load of each machine matching PRED in MACHINE-FILE."
>> + (define (build-machine=? m1 m2)
>> + (and (string=? (build-machine-name m1) (build-machine-name m2))
>> + (= (build-machine-port m1) (build-machine-port m2))))
>> +
>> + ;; A given build machine may appear several times (e.g., once for
>> + ;; "x86_64-linux" and a second time for "i686-linux"); test them only once.
>> + (let ((machines (filter pred
>> + (delete-duplicates (build-machines machine-file)
>> + build-machine=?))))
>> + (for-each machine-load machines)))
>
> Perhaps we could also display information from ‘uname’, as in
> <https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/machine-status.scm#n118>?
I didn’t even notice machine-status.scm! Should we just fold that into
offload.scm instead of accepting my simplistic “check-machine-load”
procedure?
--
Ricardo
GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC
https://elephly.net
^ permalink raw reply [flat|nested] 5+ messages in thread
* [bug#29699] [PATCH] guix: offload: Add "status" sub-command.
2017-12-15 21:05 ` Ricardo Wurmus
@ 2017-12-15 22:41 ` Ludovic Courtès
2017-12-16 20:52 ` bug#29699: " Ricardo Wurmus
0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2017-12-15 22:41 UTC (permalink / raw)
To: Ricardo Wurmus; +Cc: 29699
Ricardo Wurmus <rekado@elephly.net> skribis:
> Ludovic Courtès <ludo@gnu.org> writes:
>
>> Ricardo Wurmus <rekado@elephly.net> skribis:
>>
>>> * guix/scripts/offload.scm (check-machine-load): New procedure.
>>> (guix-offload): Call it when the argument is "status".
>>> * doc/guix.texi (Daemon Offload Setup): Document it.
>>
>> Nice, LGTM!
>>
>>> +(define (check-machine-load machine-file pred)
>>> + "Print the load of each machine matching PRED in MACHINE-FILE."
>>> + (define (build-machine=? m1 m2)
>>> + (and (string=? (build-machine-name m1) (build-machine-name m2))
>>> + (= (build-machine-port m1) (build-machine-port m2))))
>>> +
>>> + ;; A given build machine may appear several times (e.g., once for
>>> + ;; "x86_64-linux" and a second time for "i686-linux"); test them only once.
>>> + (let ((machines (filter pred
>>> + (delete-duplicates (build-machines machine-file)
>>> + build-machine=?))))
>>> + (for-each machine-load machines)))
>>
>> Perhaps we could also display information from ‘uname’, as in
>> <https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/machine-status.scm#n118>?
>
> I didn’t even notice machine-status.scm! Should we just fold that into
> offload.scm instead of accepting my simplistic “check-machine-load”
> procedure?
Sure, I guess it’s just a matter of adding (node-eval node '(uname)) in
‘check-machine-load’ and printing that.
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#29699: [PATCH] guix: offload: Add "status" sub-command.
2017-12-15 22:41 ` Ludovic Courtès
@ 2017-12-16 20:52 ` Ricardo Wurmus
0 siblings, 0 replies; 5+ messages in thread
From: Ricardo Wurmus @ 2017-12-16 20:52 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 29699-done
Ludovic Courtès <ludo@gnu.org> writes:
> Ricardo Wurmus <rekado@elephly.net> skribis:
>
>> Ludovic Courtès <ludo@gnu.org> writes:
>>
>>> Ricardo Wurmus <rekado@elephly.net> skribis:
>>>
>>>> * guix/scripts/offload.scm (check-machine-load): New procedure.
>>>> (guix-offload): Call it when the argument is "status".
>>>> * doc/guix.texi (Daemon Offload Setup): Document it.
>>>
>>> Nice, LGTM!
>>>
>>>> +(define (check-machine-load machine-file pred)
>>>> + "Print the load of each machine matching PRED in MACHINE-FILE."
>>>> + (define (build-machine=? m1 m2)
>>>> + (and (string=? (build-machine-name m1) (build-machine-name m2))
>>>> + (= (build-machine-port m1) (build-machine-port m2))))
>>>> +
>>>> + ;; A given build machine may appear several times (e.g., once for
>>>> + ;; "x86_64-linux" and a second time for "i686-linux"); test them only once.
>>>> + (let ((machines (filter pred
>>>> + (delete-duplicates (build-machines machine-file)
>>>> + build-machine=?))))
>>>> + (for-each machine-load machines)))
>>>
>>> Perhaps we could also display information from ‘uname’, as in
>>> <https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/machine-status.scm#n118>?
>>
>> I didn’t even notice machine-status.scm! Should we just fold that into
>> offload.scm instead of accepting my simplistic “check-machine-load”
>> procedure?
>
> Sure, I guess it’s just a matter of adding (node-eval node '(uname)) in
> ‘check-machine-load’ and printing that.
Okay, pushed to master with commit dafc3dafe.
I renamed the procedure to “check-machine-status” because it does more
than just print the load.
--
Ricardo
GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC
https://elephly.net
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-12-16 20:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-13 22:44 [bug#29699] [PATCH] guix: offload: Add "status" sub-command Ricardo Wurmus
2017-12-15 10:42 ` Ludovic Courtès
2017-12-15 21:05 ` Ricardo Wurmus
2017-12-15 22:41 ` Ludovic Courtès
2017-12-16 20:52 ` bug#29699: " Ricardo Wurmus
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).