IpppStatus
Zur Navigation springen
Zur Suche springen
Lizenz: Dieser Artikel wurde als problematisch in Bezug auf der Lizenz markiert, dafür kann es verschiedene Gründe geben:
Bitte hilf mit alle diese Fragen zunächst zu klären, danach kann dieser Hinweis entfernt werden. |
Scripting / Scripting Web / Netzwerk / IpppStatus
######################################################################### # # 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; }
Scripting / Scripting Web / Netzwerk / IpppStatus