Login
Newsletter
So, 19. August 2001, 13:30

Online-Zeit in SQL-Datenbank speichern

Eigentlich möchte man schon gern wissen, wieviel Stunden im Monat man online verbracht hat, doch das ist unter Linux nicht so einfach in Erfahrung zu bringen.

Es gibt ein paar Tools, doch keines von denen, die ich auf die Schnelle gefunden habe, macht es so, wie ich will. isdnrep wäre noch der beste Kandidat, doch das stürzt bei mir ab.

An diesem Punkt fragte ich mich, ob ich nicht schneller eine eigene Lösung entwickelt hätte, als im Netz nach einer zu suchen, und fing an, zu überlegen, was man dafür wohl bräuchte. Man könnte die Online-Zeit durch Auswerten der Logdatei /var/log/messages ermitteln, doch da diese bei mir täglich gekürzt wird, müßte ich das Resultat in eine neue Datei schreiben und diese dann z.B. mit Perl auswerten. Da wäre es doch schlauer, gleich die Skripte /etc/ppp/ip-up und /etc/ppp/ip-down zu nutzen, um die Datei zu füllen. Besser noch, warum sollte es eine Datei sein, wenn auf dem Rechner sowieso die PostgreSQL-Datenbank läuft?

Mit der Datenbank-Idee konnte ich mich gleich anfreunden, und nach kurzem Überlegen startete ich das Programm psql und legte eine Tabelle mit den drei Spalten Provider, Starttime und Endtime an:

create table online (provider char(20), starttime time, endtime time);

In /etc/ppp/ip-down fügte ich folgende Zeile ein:

/usr/local/pgsql/bin/psql -d hans -U hans -c "update online set endtime = timeofday() where endtime is null;"

Es macht nichts, wenn die Query so wie oben in zwei Zeilen steht. Mit der Option -d übergibt man den Datenbanknamen, mit der Option -U den Benutzernamen. Die Query funktioniert, weil für User hans kein Paßwort notwendig ist. Ich weiß jetzt nicht auswendig, wie man das Paßwort mit angeben kann, falls es benötigt wird.

In /etc/ppp/ip-up fügte ich folgende Zeilen ein:

case $4 in
217.4.*)
 provider="'T-Online'"
 ;;
*)
 provider="'Unbekannt'"
 ;;
esac
/usr/local/pgsql/bin/psql -d hans -U hans -c "insert into online values ($provider, timeofday(), NULL);"

Die Umrechnung von IP-Adresse in Providername muß natürlich jeder an seine Gegebenheiten anpassen. Sie kann auch ganz wegfallen, wenn man nur einen Provider hat. Meine Annahme ist, daß man immer nur mit einem Provider verbunden ist und daher immer nur ein Datensatz mit einer NULL in der Spalte endtime existiert.

Das war's. Hat mich kaum eine Stunde gekostet. Die Abfragen zur Ermittlung der Online-Zeit muß ich allerdings noch schreiben. Eine gute Gelegenheit, mal etwas mehr mit pgaccess zu tun...

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten