From: Martin Mares Date: Mon, 31 Oct 2011 16:33:09 +0000 (+0100) Subject: bprun: Attaching to specific screen session; colors X-Git-Tag: v3.0~29 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=b32a4c7aae11d72acea341275050d008e42af169;p=bex.git bprun: Attaching to specific screen session; colors --- diff --git a/TODO b/TODO index e6fca02..b1ed35c 100644 --- 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 94adb78..966111a 100755 --- 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 <] [[!] ...] Options: -q, --queue= Run jobs in the given queue + --session= 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;