App-FQStat
view release on metacpan or search on metacpan
script/fqstat.pl view on Meta::CPAN
my $RedrawOffset = $DisplayOffset;
while (1) {
my $input = get_input_key();
if (defined $input) {
my ($KeysHash, $ControlKeysHash);
if ($MenuMode) {
$KeysHash = \%MenuKeys;
$ControlKeysHash = \%MenuControlKeys;
}
elsif ($SummaryMode) {
$KeysHash = \%SummaryKeys;
$ControlKeysHash = \%SummaryControlKeys;
}
else {
$KeysHash = \%Keys;
$ControlKeysHash = \%ControlKeys;
}
#warn "-I->$input<---->".ord($input);
if ($KeysHash->{$input}) {
my $redraw = $KeysHash->{$input}->($input);
$Redraw = 1 if $redraw;
}
elsif ($input eq '[') { # control-key!
my $key = get_input_key(0.001);
#warn "-K->$key<---->".ord($key);
if (defined $key and exists $ControlKeysHash->{$key}) {
my $redraw = $ControlKeysHash->{$key}->($key);
$Redraw = 1 if $redraw;
}
elsif ($key eq '1' or $key eq '2') { # F-keys
my $innerkey = get_input_key(0.001);
#warn "-IK->$innerkey<---->".ord($innerkey);
if (defined $innerkey and exists($ControlKeysHash->{"$key$innerkey"})) {
my $redraw = $ControlKeysHash->{"$key$innerkey"}->("$key$innerkey");
$Redraw = 1 if $redraw;
}
}
} # end control keys
} # end if defined input
# Fetch new scanner results if applicable
if (defined $ScannerThread and $ScannerThread->is_joinable()) {
warnline "Scanner thread joinable in main loop. Joining" if ::DEBUG;
my $return = $ScannerThread->join();
($Records, $NoActiveNodes) = @$return;
$Initialized = 1;
warnline "Scanner thread joined in main loop" if ::DEBUG;
lock($RecordsChanged);
$RecordsChanged = 1;
$Summary = [];
}
my $startRun;
{
lock($ScannerStartRun);
$startRun = $ScannerStartRun;
}
if ($startRun) {
App::FQStat::Scanner::run_qstat();
}
{
lock($RecordsChanged);
lock($DisplayOffset);
$Redraw = 1 if $RecordsChanged;
$Redraw = 1 if $DisplayOffset != $RedrawOffset;
}
GetTermSize();
$Redraw = 1 if !@OldTermSize or $OldTermSize[0] != $Termsize[0] or $OldTermSize[1] != $Termsize[1];
@OldTermSize = @Termsize;
$Redraw = 1 if time()-$RedrawTime > ($SlowRedraw ? 20.0 : 3.0);
if ($Redraw) {
App::FQStat::Drawing::update_display();
$RedrawOffset = $DisplayOffset;
$Redraw = 0;
lock($RecordsChanged);
$RecordsChanged = 0;
$RedrawTime = time();
restart() if $RedrawTime - STARTTIME() > 4*60*60; # restart every four hours (wallclock)
}
} # end while(1)
}
sub print_module_versions {
warnenter if ::DEBUG;
foreach my $file (sort keys %INC) {
my $path = $INC{$file};
my $module = $file;
$module =~ s/\.pm$//;
$module =~ s/\//::/g;
my $version;
eval "\$version = $module->VERSION;";
$version = 'undef' if not defined $version;
debug("$module ($version): $path\n");
}
}
sub restart {
warnenter if ::DEBUG;
my @args;
push @args, '-u', $User
if defined $User and $User ne '';
push @args, '-H', $HighlightUser
if defined $HighlightUser and $HighlightUser ne '';
push @args, '-i', $UserInterval
if defined $UserInterval and $UserInterval ne '';
push @args, '--slow' if $SlowRedraw;
push @args, '--ssh', $SSHCommand
if defined $SSHCommand and $SSHCommand ne '';
my @cmd;
if (exists $INC{"PAR.pm"}) {
@cmd = ($ENV{PAR_PROGNAME}, @args);
}
else {
my @inc = map {('-I', $_)} @INC;
( run in 1.583 second using v1.01-cache-2.11-cpan-39bf76dae61 )