my $USER="adsl_303141";
my $USERNAME="Jan Kratochvil";
my $PASSWORD=&_priv_postget("uzivatel.gtsnovera.cz.pwd");
-my $IFDEV="eth0";
-my $SECS=8;
+my $IFDEV="ppp0";
+my $SECS=4;
my $RX_THRESHOLD=200000; # 226085
my $TX_THRESHOLD=200000; # 291251
-my $STABILIZE_OFF=2;
-my $STABILIZE_ON=10;
-
+my $STABILIZE_OFF=1;
+my $STABILIZE_ON=4*60;
+my $INPUT_IDLE=10*60;
+
+$RX_THRESHOLD=$RX_THRESHOLD*$SECS/8;
+$TX_THRESHOLD=$TX_THRESHOLD*$SECS/8;
+$STABILIZE_OFF/=$SECS;
+$STABILIZE_ON /=$SECS;
$|=1;
my $ua=LWP::UserAgent->new();
#$ua->timeout(60);
$login=~m{<span class="textTitle1">\Q$USERNAME\E,</span>} or die $login."\nNo name found";
}
+my $on=-1;
+my($ignore_read,$ignore_write);
sub change($)
{
-my($on)=@_;
+my($new)=@_;
- $on=($on ? 1 : 0);
+ $new=($new ? 1 : 0);
+ return if $on==$new;
+ return if $ignore_read;
my $try=0;
my $change;
do {
die "Looping to login" if $try++>0x10;
login() if $try;
$change=simple("https://uzivatel.gtsnovera.cz/cgi-bin/fup.pl",
- 'action.'.($on ? 'setManual' : 'unsetManual').'=1',
- )->decoded_content() or die "change: ".$on;
+ 'action.'.($new ? 'setManual' : 'unsetManual').'=1',
+ )->decoded_content() or die "change: ".$new;
} while $change=~m{No authentication cookie was sent.};
my $is_on =($change=~m{\bFUP active\b});
my $is_off=($change=~m{\bFUP not active\b});
$is_on==!$is_off or die $change."\nInvalid change state";
- $on==$is_on or die $change."\nChange not changed, wanted: ".$on;
- print "<$on>";
- return $on;
+ $new==$is_on or die $change."\nChange not changed, wanted: ".$new;
+ print "<$new>";
+ $ignore_write=1;
+ $on=$new;
}
if (defined(my $change=$ARGV[0])) {
}
my($rx_last,$tx_last);
-my $on=0;
-change($on);
+change(0);
my @history;
sub history($$)
{
my($what,$length)=@_;
+ return if $what==$on;
my $idx=@history;
while ($length-->0) {
return if --$idx<0;
return if $what!=$history[$idx];
}
- return 1;
+ change($what);
+}
+
+# CPU0 CPU1
+# 1: 107040 111123 Phys-irq i8042
+# 6: 3 0 Phys-irq floppy
+sub input()
+{
+ 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+=$_;
+ }
+ }
+ close F or die "open \"$fname\": $!";
+ return $r;
+}
+
+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;
}
for (;;) {
$on_now=0 if ($rx-$rx_last) > $RX_THRESHOLD;
$on_now=0 if ($tx-$tx_last) > $TX_THRESHOLD;
}
+ $on_now=1 if my $input_idle=input_idle();
$rx_last=$rx;
$tx_last=$tx;
push @history,$on_now;
- print $on_now;
- $on=change(1) if $on==0 && history(1,$STABILIZE_ON);
- $on=change(0) if $on==1 && history(0,$STABILIZE_OFF);
+ my $print=$on_now;
+ $print="." if $input_idle;
+ $print="*" if $ignore_read;
+ print($print);
+ history(1,($input_idle ? 0 : $STABILIZE_ON));
+ history(0,$STABILIZE_OFF);
+ $ignore_read=$ignore_write;
+ $ignore_write=0;
sleep $SECS;
}