Online-Zeiten aufsummieren

Datum: 2001-05-15
Quelle: suse-linux

Worum ging es?

Zu Zeiten von Modem- und ISDN-Internetzugängen gab es noch keine Flatrates oder Volumentarife. Umso wichtiger war es, seine Online-Zeiten im Blick zu behalten. Es gab zwar isdnrep, aber dessen Ausgabe sagte nicht jedermann zu. Hier ist ein Beispiel, wie man diese Zeiten mit Shell-Mitteln aufsummieren kann.

Zuerst muss dafür gesorgt werden, dass die Online-Zeiten in einem brauchbaren Format gespeichert werden (die folgenden Kommandozeilen legt man in die Scripts zum Auf- und Abbau der Verbindung ip-up und ip-down):
echo -n `date +"%Y-%m %s"` >>/var/log/online.log beim Aufbau der Verbindung und
echo " `date +%s`" >>/var/log/online.log beim Abbau.
Damit haben wir zum einen den Monat zum Auswerten und die Sekunden für die Berechnung. Das nachfolgende Script befasst sich mit der Auswertung der erzeugten Protokolldatei.

Code
# Funktion: Sekunden umrechnen / function to convert seconds
calc_times () {
  tm=$1
  min=`expr $tm / 60`
  sec=`expr $tm - $min \* 60`
  if [ $min -gt 59 ]; then
    hr=`expr $min / 60`
    min=`expr $min - $hr \* 60`
  else
    hr=0
  fi
  if [ $hr -gt 23 ]; then
    day=`expr $hr / 24`
    hr=`expr $hr - $day \* 24`
  else
    day=0
  fi
  # Fertig: Ausgabe / finished: output
  echo -n "Month: $2 Online time $day days, $hr hours, "
  echo "$min minutes, $sec seconds"
}
### main
c_month=  # Vergleichsmonat fuer Ausgabe / month to compare with for output
sum_tm=0  # aufsummierte Online-Zeit / summarized time
while read month online offline; do
  seconds=`expr $offline - $online`
  # Monatswechsel: Ausgabe / new month: output
  if [ -n "$c_month" -a ! \( "$month" = "$c_month" \) ]; then
    calc_times $sum_tm $c_month
    # zuruecksetzen / reset
    sum_tm=0
  fi
  c_month=$month
  sum_tm=`expr $sum_tm + $seconds`
done <online.log
calc_times $sum_tm $c_month
Beschreibung

In der Funktion calc_times werden die aufsummierten Onlinezeiten in Tage, Stunden, Minuten und Sekunden umgerechnet und ausgegeben. Die Schleife im Hauptprogramm arbeitet die Protokolldatei zeilenweise ab und summiert jeweils die Online-Zeiten. Bei einem Monatswechsel und am Schluss der Schleife wird die Funktion calc_times aufgerufen.