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 )