menu.jpg  ::  Home ::  Computing ::  Downloads ::  Scooter ::  Links ::  Music ::  Nonsense ::  Mail :: 

Onlinekosten im Griff

Selbst in den heutigen Zeiten der TDSL-Flatrate gibt es noch ein paar Fossile wie mich, die sich per (i)ppp-Verbindung ins Internet einwählen und dafür eine von der Einwahldauer abhängige Gebühr an ihren Provider entrichten dürfen :-( Es ist deswegen hilfreich, seine Onlinekosten im Auge zu behalten zu können, um beim nächsten Abrechnungszeitpunkt keine böse[tm] Überraschung zu erleben.

Ich verwende hierzu schon seit Jahren folgendes immer mal wieder anzupassendes Bash-Script, welches von der Tatsache, das der pppd u. a. folgendes über eine PPP-Verbindung mitloggt, Gebrauch macht:

Ich habe hier ein Debian-System, das entsprechende Einträge in der "/var/log/messages" vornimmt. Die Log-Dateien wiederum werden wöchentlich rotiert, wobei das Log der Vorwoche im Klartext und drei weitere Logs in komprimierter Form vorliegen. Letzteres unterscheidet sich je nach verwendeter Distribution oder persönlichem Geschmack. Das Skript sah unter meinen früheren SuSE-Systemen deswegen deutlich anders aus, sollte aber relativ einfach anzupassen sein.

Des weiteren gehe ich, nachdem mein kleiner örtlicher Provider nicht mehr mag, über T-Online ins Netz. Als Tarif nutze ich "surftime30" (30 Online-Stunden für DM 29,00 - jede weitere Minute kostet DM 0,03). Die Abrechnungen erfolgen kalendermonatlich.

Das Script liest einige Ergebnisse seiner Ermittlungen in nicht unbedingt eleganter Form in Variablen ein, die es zum Ende wieder ausgibt.

1. Mein Skript 'ppp-counter'

1.1 Einige Variablen

Ich gebe jedem Script immer ein paar Variablen mit auf den Weg, die zum einen viel Tipperei sparen und zum anderen das Skript auf anderen Systemen leichter lauffähig machen (man muss hoffentlich nicht das ganze Skript nach zu ändernden Strings durchsuchen).

Here we go: Mit der Variablen "LOGS" definiere ich die zu durchsuchenden Dateien, die Variable "MONTH" gibt den laufenden Monat zurück.

   LOGS="/var/log/messages*"
   MONTH=$(date +%b)

1.2 Die erste Verbindung des Abrechnungszeitraumes

Hier fischt das Skript die erste Verbindung aus der Variable $LOGS heraus und verwirft dabei Einträge, die im Vormonat erfolgt sind. "head" gibt den ersten Eintrag zurück, die letzten drei Zeilen extrahieren das Datum.

   LAST=$(zgrep "Connect time" $LOGS | \
           grep $MONTH |\
           sort | \
           head -1 | \
           tr -s ' ' | \
           cut -d" " -f1-3 |\
           cut -d":" -f2-4)

1.3 Die letzte Verbindung des Abrechnungszeitraumes

Dito für die letzte Verbindung des Abrechnungszeitraumes. Im Grunde dieselbe Konstruktion wie oben, nur das von "tail" die letzte Zeile zurückgegeben wird.

   FIRST=$(zgrep "Connect time" $LOGS | \
           grep $MONTH |\
           sort | \
           tail -1 | \
           tr -s ' ' | \
           cut -d" " -f1-3 |\
           cut -d":" -f2-4)

1.4 Die Anzahl der Verbindungen

"grep" zählt mittels des Schalters "-c" die Anzahl der im laufenden Monat erfolgten PPP-Verbindungen.

   CONNECTS=$(zgrep "Connect time" $LOGS | grep -c $MONTH)

1.5 Die Gesamtdauer der Verbindungen

Jetzt kommt ein ganz schweres Kaliber namens "awk" zum Einsatz, das die Summen der Einwahlzeiten aus den PPP-Verbindungen des laufenden Monates aufaddiert.

   DAUER=$(zgrep "Connect time" $LOGS | grep $MONTH |\
           awk '{ t+=$8 } END { printf("%d\n", t) }')

1.6 Die Kosten

Aus der soeben ermittelten Gesamtdauer der Verbindungen kann nach meinem derzeitigen Tarif relativ einfach die Kostenermittlung erfolgen:

Die Berechnungen erfolgen wieder mittels "awk".

   if [ $DAUER -lt 1800 ]
   then
       KOSTEN="29.00"
       MESG_SUM=$(expr 1800 - $DAUER)
       MESG="Du hast $MESG_SUM Online-Minuten verschenkt!"
   else
       KOSTEN=$(zgrep "Connect time" $LOGS | grep $MONTH |\
               awk '{ t+=$8 } END { printf("%3.2f\n", (t-1800)*0.03+29) }')
       MESG_SUM=$(expr $DAUER - 1800)
       MESG="Du hast $MESG_SUM Online-Minuten ueberzogen!"
   fi

1.7 Die Ausgabe

Die in den vorangegangenen Variablen ermittelten Werte werden im folgenden Teil des Scripts - so augenfreundlich es auf der Konsole eben geht - ausgegeben.

   echo -e "\n---------------------------------------------------------------"
   echo "PPP-Verbindungstatistik vom $LAST bis $FIRST"
   echo "---------------------------------------------------------------"
   echo -e "Gesamtzzahl:\t$CONNECTS Stueck"
   echo -e "Gesamtdauer:\t$DAUER Minuten"
   echo -e "Gesamtkosten:\t$KOSTEN DM"
   echo -e "\n$MESG"

2. Einsatz des Skriptes

Ich lasse das Skript einmal täglich auf meinem Router von cron aufrufen, der wiederum die Ausgabe via eMail an mich weitergibt. So habe ich eine unmittelbare Kostenkontrolle. Wegen des bsonderen Leseschutzes von "$LOG" benötigt es SuperUser-Rechte.

Ich wollte das Ding immer schon einmal in Perl geschrieben haben, aber das zieht sich jetzt schon so lange hin...

Das Teil kann auf meiner Download-Site heruntergeladen werden.


Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU-Emacs on Wed Oct 3 15:04:25 CEST 2001

Valid CSS