Mir ist es zuviel Arbeit jede Zeile ins Wiki Format umzuwandeln, deswegen poste ich es hier rein.
FEEDBACK IST ERWÜNSCHT!!!
Code: Alles auswählen
#!/usr/bin/perl
#########################################################################
#
# ipppstatus.pl (2te Ausgabe)
#
# Zeigt Onlinezeit, Kosten und übertragene Bytes (im lesbaren Format) an
# 4.10.2003 - Mike Reiche (Rebell)
# veröffentlich für www.debianforum.de
#
# Verwendete Versionen:
# perl v5.6.1
# isdnrep 4.57
# auf Debian Woody
#
#########################################################################
# isdnrep, gibt detailierte Informationen über die ISDN Verbindung aus
# -s %X (nur Uhrzeiten ausgeben)
# -o (nur ausgehende Verbindungen)
# -t (Ausgabe auf ein Datum beschränkt)
$timereport = "isdnrep -s %X -o -t ";
# Maximale Onlinezeit im Monat Tag (HH:MM:SS)
# Wenn hier kein Wert angeben wird, gibts ein "Illegal division by zero"
$max_month_time = "60:00:00"; # 60 Stunden (T-Online surftime 60)
if ($ARGV[0] eq "info") {
if ($ARGV[1] eq "monat") {
$showme = 2;
} elsif ($ARGV[1] eq "verbindungen") {
$showme = 3;
} else {
$showme = 1;
}
showOnlineTime($showme);
} else {
showHelp();
}
exit;
sub showHelp {
print "usage:\tipppstatus.pl info [INFO]\n\n";
print "INFO:\n";
print "\tmonat\t\tzeigt Verbindungsinformationen für diesen Monat an\n";
print "\ttag\t\tzeigt Verbindungsinformationen für heute an\n";
print "\tverbindungen\tzeigt die Zeiten der Verbindungsaufbauten an\n";
print "\n";
}
# Zeigt die Online-Verbindungen an
sub showOnlineTime {
# Kann sein 1,2 oder 3
my ($showme) = @_;
my ($sek, $min, $std, $mtag, $mon, $jahr, $wtag, $stag, $isstd)=localtime();
$jahr += 1900;
$mon += 1;
my $connections_only = 0;
my $month_only = 0;
my $have_found = 0;
my $next_site = 0;
# Verbindungen für den Monat
if ($showme == 2) {
print "\nVerbindungsinformationen für diesen Monat ($mon/$jahr)\n\n";
$month_only = 1;
$timereport_string = "$mon/$jahr";
# Ansonsten Verbindungen für den Tag
} else {
if ($showme == 3) {
print "\nVerbindungsaufbauten Heute ($mtag.$mon.$jahr)\n\n";
$connections_only = 1;
} else {
print "\nVerbindungsinformationen Heute ($mtag.$mon.$jahr)\n\n";
}
$timereport_string = "$mtag/$mon/$jahr";
}
# Folgende Pipe funktioniert nicht unter Verwendung von Sudo
my $cmd = "$timereport $timereport_string";
open TIMEREPORT, "$cmd |";
while (<TIMEREPORT>) {
chomp;
$zeile = $_;
# Die Information wurde gefunden, wir brauchen aber erst die übernächste Zeile
if ($have_found) {
$next_site++;
}
if ($next_site == 2) {
# Alle Leerzeichen in ":" umwandeln
$zeile =~ s/\s+/:/ig;
@daten = split(":",$zeile);
$provider = $daten[0];
$rufe = $daten[1];
$stunden = int($daten[3]);
$minuten = int($daten[4]);
$sekunden = int($daten[5]);
$kosten = $daten[6];
$waehrung = $daten[7];
$bytes_in = $daten[9];
$bytes_in_unit = $daten[10];
$bytes_out = $daten[11];
$bytes_out =~ s/O=//ig;
$bytes_out_unit = $daten[12];
$max_zeiten_sekunden = getSeconds($max_month_time);
if ($month_only) {
$date_string = "im Monat";
$divisor = 1;
# String der Onlinzeit
$zeiten_string = $stunden . ":" . $minuten . ":" . $sekunden;
$zeiten_sekunden = getSeconds($zeiten_string);
$zeiten_prozent = int(($zeiten_sekunden * 100) / $max_zeiten_sekunden);
} else {
$date_string = "am Tag";
$divisor = 30;
}
$max_zeiten_sekunden = $max_zeiten_sekunden / $divisor;
$max_zeiten_string = getTimeString($max_zeiten_sekunden);
@max_zeiten = split(":",$max_zeiten_string,3);
$max_stunden = int($max_zeiten[0]);
$max_minuten = int($max_zeiten[1]);
$max_sekunden = int($max_zeiten[2]);
if ($stunden >= $max_stunden) {
$diff_stunden = $stunden - $max_stunden;
if ($minuten >= $max_minuten) {
$diff_minuten = $minuten - $max_minuten;
if ($sekunden >= $max_sekunden) {
$diff_sekunden = $sekunden - $max_sekunden;
}
}
}
# Zeiten in lesbares Format umwandeln
$stunden = makeDigit($stunden);
$minuten = makeDigit($minuten);
$sekunden = makeDigit($sekunden);
$max_stunden = makeDigit($max_stunden);
$max_minuten = makeDigit($max_minuten);
$max_sekunden = makeDigit($max_sekunden);
# Ausgabe Zeichenketten zusammenstellen
print "Provider: $provider ($rufe ausgehende Anrufe)\n";
$online_string = "$stunden\:$minuten\:$sekunden von maximal $max_stunden\:$max_minuten\:$max_sekunden $date_string";
# Falls ein Überlauf vorhanden ist
$to_much = "";
if ($diff_stunden > 0 || $diff_minuten > 0 || $diff_sekunden > 0) {
$diff_stunden = makeDigit($diff_stunden);
$diff_minuten = makeDigit($diff_minuten);
$diff_sekunden = makeDigit($diff_sekunden);
$to_much = " (zu $diff_stunden\:$diff_minuten\:$diff_sekunden überschritten)";
} elsif ($month_only) {
$to_much = " ($zeiten_prozent\% verbraucht)";
}
$online_string .= $to_much;
print "Onlinezeit: $online_string\n";
print "Verursachte Kosten: $kosten $waehrung\n";
print "Empfangende Daten: $bytes_in $bytes_in_unit\n";
print "Gesendete Daten: $bytes_out $bytes_out_unit\n";
last;
}
# Finde die erste Verbindungszeit in der Liste
if ($zeile =~ /^\d{2}\:\d{2}\:\d{2}/ && $connections_only) {
print "$zeile\n";
# Liste ist zu Ende
} elsif ($zeile =~ /^----/ && $connections_only) {
$connections_only = 0;
last;
# Finde die Zeit der ausgehenden Anrufe beim Provider
} elsif ($zeile =~ /Outgoing calls \(calling\:\)/ig) {
$have_found = 1;
}
}
close TIMEREPORT;
}
sub makeDigit {
my ($digit) = @_;
if (int($digit) < 9) {
$digit = "0" . $digit;
}
return $digit;
}
sub getSeconds {
my ($time_string) = @_;
my @zeiten = split(":",$time_string,3);
my $stunden = $zeiten[0];
my $minuten = $zeiten[1];
my $sekunden = $zeiten[2];
my $sekunden_gesamt = ($stunden * 3600) + ($minuten * 60) + $sekunden;
return $sekunden_gesamt;
}
sub getTimeString {
my ($seconds) = @_;
my $stunden = int($seconds/3600);
my $rest_zeit = $seconds % 3600;
my $minuten = int($rest_zeit/60);
my $rest_zeit = $seconds % 60;
my $sekunden = $rest_zeit;
my $time_string = makeDigit($stunden) . ":" . makeDigit($minuten) . ":" . makeDigit($sekunden);
return $time_string;
}