IpppStatus

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
LizenzOffen.png Lizenz: Dieser Artikel wurde als problematisch in Bezug auf der Lizenz markiert, dafür kann es verschiedene Gründe geben:
  • die Lizenz des Ursprünglichen Artikels ist unbekannt oder nicht kompatiblen mit der CC by SA
  • durch die Migration wurden der/die ursprüngliche(n) Autor(en) aus der History gelöscht
  • es wurden Inhalte ohne Zustimmung des ursprünglichen Autors übernommen
  • es gibt andere urheberrechtliche Bedenken gegen diesen Artikel.

Bitte hilf mit alle diese Fragen zunächst zu klären, danach kann dieser Hinweis entfernt werden.


Scripting / Scripting Web / Netzwerk / IpppStatus


Thread im Forum


######################################################################### 
# 
# 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