ppp0->eth1, also temporary.
authorlace <>
Sun, 15 Apr 2007 11:48:33 +0000 (11:48 +0000)
committerlace <>
Sun, 15 Apr 2007 11:48:33 +0000 (11:48 +0000)
$RX_THRESHOLD,$TX_THRESHOLD: update
&useridle: No longer depend on `/proc/interrupts', mouse is ignore now.
&mplayer_running: Fixed $_ scope.

bin/fup

diff --git a/bin/fup b/bin/fup
index a7fba95..4fe0978 100755 (executable)
--- a/bin/fup
+++ b/bin/fup
@@ -13,10 +13,10 @@ use Data::Dumper;
 my $USER="adsl_303141";
 my $USERNAME="Jan Kratochvil";
 my $PASSWORD=&_priv_postget("uzivatel.gtsnovera.cz.pwd");
-my $IFDEV="ppp0";
+my $IFDEV="eth1";
 my $SECS=4;
-my $RX_THRESHOLD=200000;       # 226085
-my $TX_THRESHOLD=200000;       # 291251
+my $RX_THRESHOLD=210000;       # 226085
+my $TX_THRESHOLD=210000;       # 291251
 my $STABILIZE_OFF=1;
 my $STABILIZE_ON=4*60;
 my $INPUT_IDLE=10*60;
@@ -117,46 +117,35 @@ my($what,$length)=@_;
        change($what);
 }
 
-#           CPU0              CPU1              
-#  1:     107040     111123        Phys-irq  i8042
-#  6:          3          0        Phys-irq  floppy
-sub input()
+use User::Utmp;
+
+# Users respected for the 'idle' state (see $IdleMax):
+my @ValidUsers=qw(root lace jkratoch);
+
+sub useridle()
 {
-       my $fname="/proc/interrupts";
-       local *F;
-       open F,$fname or die "open \"$fname\": $!";
-       <F> or die "header \"$fname\"";;
-       my $r=0;
-       while (<F>) {
-               chomp;
-               my @f=split;
-               last if $f[0]=~/^[A-Z]{3}:$/;   # NMI/LOC/ERR/MIS
-               $f[0]=~/^\s*\d+:$/ or die $f[0];
-               next if $f[$#f] ne "i8042";
-               for (1..$#f-2) {
-                       $_=$f[$_];
-                       /^\d+$/ or die $_;
-                       $r+=$_;
-                       }
+       my %valid_users=map(($_=>1),@ValidUsers);
+       my($idlebest,$linebest);
+       for my $utmp (User::Utmp::getut()) {
+               local $_;
+               next if defined($_=$utmp->{"ut_type"}) && $_!=&User::Utmp::USER_PROCESS();
+               next if defined($_=$utmp->{"ut_user"}) && !$valid_users{$_};
+               my $line="/dev/".$utmp->{"ut_line"};
+               my $atime=(stat $line)[8];
+               my $what="user \"".($utmp->{"ut_user"} || "<local>")."\", line \"$line\"";
+               warn "Unable to stat $what" and next if !$atime;
+               my $idle=time()-$atime;
+               warn "atime in future for $what" and next if $idle<0;
+               next if defined $idlebest && $idlebest<=$idle;
+               $idlebest=$idle;
+               $linebest=$line;
                }
-       close F or die "open \"$fname\": $!";
-       return $r;
+       return !wantarray() ? $idlebest : ($idlebest,$linebest);
 }
 
-my $input=input();
-my $input_last=time()+0;
 sub input_idle()
 {
-       my $input_now=input();
-       my $diff=$input_now-$input;
-       die $diff if $diff<0;
-       my $time_now=time()+0;
-       if ($diff) {
-               $input=$input_now;
-               $input_last=$time_now;
-               }
-       my $time_diff=$time_now-$input_last;
-       return $time_diff>$INPUT_IDLE;
+       return useridle() > $INPUT_IDLE;
 }
 
 sub mplayer_running()
@@ -165,6 +154,7 @@ sub mplayer_running()
        open F,"/proc/net/unix" or die;
        my %unix;
        <F>;
+       local $_;
        while (<F>) {
                /^(?:\S+\s+){6}(\d+)\s/ or die;
                $unix{$1}=1;