#!/local/bin/perl -w # Dette skriptet går loggene som PPP oppkoblingene gir på Linux boksen # min og beregner telefonutgiftene og hvor mye tid som jeg har brukt # online. Hvis du ikke har ppp/chat som er satt opp helt slik som meg # (det har du sikkert ikke!) så vil tilpasse litt etter hva som havner # i din log. # # Skrevet av: Gisle Aas use HTTP::Date qw(str2time); use No::Telenor qw(samtale_pris); use No::KontoNr qw(nok_f); # In order to calculate prices $LOKAL_PREFIKS = 55; # siden jeg bor i Bergen $LOKAL_TAKST = "LFV"; # jeg har Familie&Venner my $log = shift || "/var/log/messages"; if ($log =~ /\.gz$/) { $log = "gunzip -c $log|"; } open(LOG, $log) or die; my $tot_dur = 0; my $tot_local = 0; my $tot_riks = 0; my $tot_price = 0; while () { if (/kernel: ippp0: dialing [01] (\d+)/) { #print; $phone = $1; $connect = undef; } elsif (/kernel: isdn_net: ippp0 connected/) { #print; $connect = extract_time($_); $ppp_up = undef; } elsif (/kernel: isdn_net: local hangup ippp0/) { if ($connect) { my $dur = extract_time($_) - $connect; $tot_dur += $dur; if (local_phone($phone)) { $tot_local += $dur; } else { $tot_riks += $dur; } my $price = samtale_pris($connect, $dur, takst($phone)); $tot_price += $price; $ppp_up ||= "-"; printf "%s %s %s %2d %9s", time2iso($connect), $phone, dur2str($dur), $ppp_up, nok_f($price); print "\n"; } else { print STDERR "NO CONNECT FOR: $_"; } } elsif (/remote IP address/) { if ($connect) { $ppp_up = extract_time($_) - $connect; } #print; } elsif (/BUSY -- failed/) { my $t = time2iso(extract_time($_)); print "$t $phone BUSY\n"; $connect = $ppp_up = undef; } else { # ignore } } print "-" x 52, "\n"; print "\t\t Lokal: ", dur2str($tot_local), "\n"; print "\t\t Riks: ", dur2str($tot_riks), "\n"; printf "\t\t TOTAL: %s %12s\n", dur2str($tot_dur), nok_f($tot_price); sub local_phone { my $phone = shift; return 1 if $phone =~ /^$LOKAL_PREFIKS/o; return 1 if $phone eq "81007007"; return 0; } sub takst { # jeg bor i Bergen return $LOKAL_TAKST if local_phone(shift); return "R"; } sub extract_time { str2time(substr($_[0], 0, 15) . " " . ((localtime)[5]+1900)); } sub time2iso { my($sec,$min,$hour,$mday,$mon,$year) = localtime(shift); sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec); } sub dur2str { my $hour = 0; my $min = 0; my $sec = shift; $min = int($sec/60); $sec = $sec%60; $hour = int($min/60); $min = $min%60; sprintf "%2d:%02d:%02d", $hour, $min, $sec; }