Email versenden bei bestimmten Zahlen (Bandbreiten)!

Bash, Shell, PHP, Python, Perl, CGI
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

Hallo,
also etwas schwer zu Erklären, ich habe ein Script, welches mir die aktuelle Bandbreite meines Internet Zugangs ausgibt. Wenn ich es ausführe entstehen 2 Dateien in.txt und out.txt.

Der Inhalt sieht so aus

in.txt
Current bandwidth utilization 0.10 Mbit/s
out.txt
Current bandwidth utilization 0.08 Mbit/s

Nun möchte ich gerne ein Script so Programmieren, dass es mir, wenn die Bandbreite eine Gewisse Zahl erreicht, eine E-Mail sendet!

Denke das müsste irgendwie mit if und elseif zu machen sein, habe aber leider nicht sehr viel Ahnung von if elseif usw. Wäre für ein paar Tips sehr Dankbar!!

mfg
Andre
suntzu
Posts: 669
Joined: 2002-12-20 19:47
Location: Mönchengladbach

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by suntzu »

Hi,

das Skript muss die beiden Zahlen (im Bsp. 0.10 und 0.08) ja irgendwo herkriegen. Mach doch einfach eine Abfrage rein, in PHP in etwa so:

Code: Select all

if ($zahl > 0.5)
  mail('me@domain.de', 'Bandbreitenueberschreitungsbenachrichtigung', 'Die Bandbreitennutzung betraegt zur Zeit '.$zahl.' MBit pro Sekunde');
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

ja nur wie setz ich die Variable $zahl ?

Danke
darkspirit
Posts: 553
Joined: 2002-10-05 16:39
Location: D'dorf

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by darkspirit »

Welche Scriptsprache soll es denn werden? Shell-Script, Perl, PHP?
Wenn es bei PHP bleiben soll, dann schau dich im Manual mal nach "fopen", "fread" und "fclose" um..
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

also eigentlich soll es ein Shellscript werden, welches mit einem Cronjob zur überprüfung alles 30 min ausgeführt werden soll.

mfg
Andre
suntzu
Posts: 669
Joined: 2002-12-20 19:47
Location: Mönchengladbach

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by suntzu »

Hi,

ich dachte, du hast schon ein Skript? In welcher Sprache ist das denn geschreibselt?
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

ich hab bis jetzt
bwbar - http://www.kernel.org/pub/software/web/bwbar/
laufen welches die zwei dateien erstellt und mit dem oben beschriebenen Inhalt versieht.
valior
Posts: 5
Joined: 2003-12-21 22:52
Location: Oldenburg

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by valior »

du könntest die bwbar.c um schreiben das er nur die die zahl anzeigt =)
und dann per fopen ausliest !

bwbar.c auf machen und "...if ( ubar ) {..." suchen das dann ersetzen durch:
if ( ubar ) {
fprintf(ubar, "%sn", bwmea$
fclose(ubar);
rename(t_tmp, text_file);
<?PHP
$datei = "out.txt";
$fp = fopen($datei,"r");
$zahl = fgets($fp,"1024");
fclose($fp);
if ($zahl > 10)
mail('me@domain.de', 'Bandbreitenueberschreitungsbenachrichtigung', 'Die Bandbreitennutzung betraegt zur Zeit '.$zahl.' MBit/s pro Sekunde');
?>
denk ich mal :>
Last edited by valior on 2004-02-02 16:43, edited 1 time in total.
suntzu
Posts: 669
Joined: 2002-12-20 19:47
Location: Mönchengladbach

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by suntzu »

Hi,
dann empfehle ich dir eine Kombination aus
cat, grep, cut, awk, evtl. noch dc und mail

Um dir mal kurz zu zeigen, wie mächtig man damit Sachen machen kann:

Code: Select all

cat /var/log/mail.log |grep "delivery [[:digit:]]{3,}: success"|cut -d" " -f1,2,3 | date +"%s" -f - | gawk '$1 > (systime()-300){print $1}' |grep -c .
gibt die Anzahl der erfolgreich ausgelieferten Mails in den letzten 5 Minuten zurück, alles eine Zeile. Damit sollte auch dein Problem lösbar sein:
Hiermit kriegst du die reine Zahl:

Code: Select all

cat in.txt |cut -d" " -f4
Das kannst du weiterleiten nach awk oder direkt Mail oder so...
Sollte irgendwie machbar sein, die man-Seiten sind deine Freunde ;-)

Gruß,
Dominik
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

Hallo,
soweit geht es nun ich lese nun nur die Zahl mit dem Befehl
cat in.txt |cut -d " " -f5
aus. Habe ich allerdings eine Zahl unter 10 (10.00) beispielsweise 5 (ausgegeben als 5.00) liest er gar nichts aus, d.h. das ergebniss ist leer.

Hier nochmal die zwei Varianten mit 10 und 5

Code: Select all

Current bandwidth utilization   5.00 Mbit/s

Current bandwidth utilization   10.00 Mbit/s
Andere Frage:
Auschnitt aus der PHP Datei:

Code: Select all

$datei = 'out_traffic_email';
$fp = fopen($datei,'r');
$zahl = fgets($fp,'1024');
fclose($fp);
$to_email = 'user@domain.net';
$subject = 'subject';
$message = 'Die Bandbreitennutzung betraegt zur Zeit $zahl MBit/s';

if ($zahl > 1){
mail($to_email,$subject,$message);
Leider funktioniert es mit 'Die Bandbreitennutzung betraegt zur Zeit $zahl MBit/s' nicht.

Dort wird in der E-Mail nicht die Zahl, sondern einfach nur $zahl ausgegeben, woran liegt das?

Danke
mfg
Andre
suntzu
Posts: 669
Joined: 2002-12-20 19:47
Location: Mönchengladbach

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by suntzu »

Hi,

das ist richtiges PHP-Verhalten:
Variablen in "" werden ausgewertet, solche in '' nicht.
Also schreibst du entweder

Code: Select all

$message = "Die Bandbreitennutzung betraegt zur Zeit $zahl MBit/s";
oder

Code: Select all

$message = 'Die Bandbreitennutzung betraegt zur Zeit '.$zahl.' MBit/s';
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: Email versenden bei bestimmten Zahlen (Bandbreiten)!

Post by andre丨 »

HI,
das klappt schonmal ;). Danke!

Wie sieht es aus, wenn ich beim ersten Prüfen noch keine E-Mail erhalten will, sondern erst nach einem erneuten Prüfen nach ca. 10 Minuten. Das müsste ich dann irgendwie mit einer if schleife in der if schleifen machen?
Wäre schön wenn mir jmd ein Beispiel dazu geben könnte.

Vielen Dank
mfg
Andre