]> mj.ucw.cz Git - bex.git/commitdiff
bprun: Attaching to specific screen session; colors
authorMartin Mares <mj@ucw.cz>
Mon, 31 Oct 2011 16:33:09 +0000 (17:33 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 31 Oct 2011 16:33:09 +0000 (17:33 +0100)
TODO
bprun

diff --git a/TODO b/TODO
index e6fca02d2e93777661a3479c72b2cadfdb49e3f8..b1ed35ce5bdb961c139ad9c6619d533a631d6306 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,5 +1,6 @@
 - bprun: option for setting max # of running jobs
 - bprun --job
-- bprun --curses
+- bprun: keyboard controls
+- bprun: wait for a key before exit
 - Terminology: machine vs. host
 - Detector of orphans (unused queue dirs, jobs on non-existent machines, non-queued jobs)
diff --git a/bprun b/bprun
index 94adb7891eb1fb7e24bce294bc241b7509a86463..966111aec441352958827b0d2874f31bc4a11949 100755 (executable)
--- a/bprun
+++ b/bprun
@@ -11,20 +11,26 @@ use lib 'lib';
 use BEX;
 
 my $queue_name;
+my $screen_session = 'BEX';
 my $text_mode;
 
 GetOptions(
        "q|queue=s" => \$queue_name,
+       "session=s" => \$screen_session,
        "text!" => \$text_mode,
 ) or die <<AMEN ;
 Usage: bprun [<options>] [[!]<machine-or-class> ...]
 
 Options:
 -q, --queue=<name>     Run jobs in the given queue
+    --session=<name>   Job windows should be opened within the given screen
+                       session (default: BEX)
     --text             Use textual user interface instead of curses
 AMEN
 
-$ENV{'STY'} or die "Please run me under Screen\n";
+system 'screen', '-S', $screen_session, '-X', 'select', '.';
+!$? or die "Screen session $screen_session not found\n";
+
 my @machines = BEX::Config::parse_machine_list(@ARGV ? @ARGV : '*');
 my $queue = BEX::Queue->new($queue_name);
 
@@ -44,7 +50,10 @@ while (keys %running || @machines) {
                my @jobs = $queue->scan($mach);
                @jobs or next;
                $ui->update($mach, undef, 'START');
-               system 'screen', '-t', $mach, './brun', "--status-fifo=$fifo_name", $mach;
+               my @scr = ('screen', '-t', $mach);
+               push @scr, '-S', $screen_session if defined $screen_session;
+               push @scr, '-X', 'screen', './brun', "--status-fifo=$fifo_name", $mach;
+               system @scr;
                !$? or $ui->update($mach, undef, 'INTERR');
                $running{$mach} = 'START';
                next;
@@ -109,6 +118,7 @@ sub new($) {
        $C->keypad(1);
        $C->meta(1);
        $C->clear;
+       init_pair(1, COLOR_YELLOW, COLOR_BLUE);
        $nrows = $C->getmaxy - 2;
        if ($BEX::Config::max_parallel_jobs > $nrows) {
                $BEX::Config::max_parallel_jobs = $nrows;
@@ -163,6 +173,11 @@ sub redraw_slot($) {
        my $jid = $s->{'Job'} // "";
        my $jname = ($jid eq "" ? "" : $queue->job_name($jid));
        my $text = sprintf("%-20s %-10s %s", $mach, $stat, $jname);
+       if ($stat eq 'DONE') {
+               $C->bkgdset(0);
+       } else {
+               $C->bkgdset(COLOR_PAIR(1) | A_BOLD);
+       }
        $C->addnstr($s->{'Row'}, 0, $text, $C->getmaxx);
        $C->clrtoeol;
        $C->refresh;