X-Git-Url: https://git.jankratochvil.net/?p=nethome.git;a=blobdiff_plain;f=bin%2Ffup;h=ec166d425628bbace3fbe45f384ee45df706476a;hp=a7fba952a55024c0946549f0757fa7829d62d609;hb=HEAD;hpb=8ebc8e58c1e6f75a005dd2498166be9f4ec93bad diff --git a/bin/fup b/bin/fup index a7fba95..ec166d4 100755 --- 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="eth0"; 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\": $!"; - or die "header \"$fname\"";; - my $r=0; - while () { - 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"} || "")."\", 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; ; + local $_; while () { /^(?:\S+\s+){6}(\d+)\s/ or die; $unix{$1}=1;