#!/usr/bin/perl # Asterisk Rescue Server Console # (c) 2006 by Nikolaus Hammler # Licensed under GNU GPL use Asterisk::AGI; use File::Temp qw/ tempfile /; $AGI = new Asterisk::AGI; my %input = $AGI->ReadParse(); my $arg = $ARGV[0]; if($arg == 0) { speak('Eins: Gibt die IP Adressen aus'); speak('Zwei: Startet den Server neu'); speak('Drei: Netzwerkstatus'); speak('Vier: Prüfe ob Rechner online ist'); speak('Fünf: Starte den ianus neu'); } elsif($arg == 1) { my $ip1 = ""; my $ip2 = ""; my @servers = ( 'http://mwburden.com/cgi-bin/getipaddr', 'http://www.scc.co.at/~nhammler/ip.php', 'http://www.sbox.tugraz.at/home/n/nobaq/ip.php'); for(my $i = 0; $i < 3; $i++) { if($i) { speak("Ich wiederhole: "); } if(!$ip1) { $AGI->exec('StartMusicOnHold'); foreach my $srv (@servers) { my $res = `http_proxy=http://192.168.0.1:8080 curl -s '$srv'`; $res =~ /([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/; $ip1 = $1; if($ip1) { last; } } $AGI->exec('StopMusicOnHold'); } speak("Philipp: $ip1\n"); if(!$ip2) { $AGI->exec('StartMusicOnHold'); foreach my $srv (@servers) { my $res = `curl -s '$srv'`; $res =~ /([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/; $ip2 = $1; if($ip2) { last; } } $AGI->exec('StopMusicOnHold'); } speak("Zu Hause: $ip2\n"); } } elsif($arg == 2) { speak('Der Computer soll neu gestartet werden. Bist du sicher? Drücke Eins für Ja'); if(chr($AGI->wait_for_digit('5000')) == 1) { speak('Der Computer wird jetzt neu gestartet'); system("sudo /sbin/reboot"); } } elsif($arg == 5) { speak('Janus soll neu gestartet werden. Bist du sicher? Drücke Eins für Ja'); if(chr($AGI->wait_for_digit('5000')) == 1) { speak('Janus wird jetzt neu gestartet'); system("ssh -l niki ianus.intern.stiftingtal.net -i /var/lib/asterisk/restart_ianus.ppk"); } } elsif($arg == 3) { speak('Bitte warten'); $AGI->exec('StartMusicOnHold'); my $outp = `netzwerkstatus.sh`; my @lines = split(/\n/, $outp); $AGI->exec('StopMusicOnHold'); foreach $line (@lines) { speak($line); } } elsif($arg == 4) { # parts from James Golovich speak('Bitte die Ei Pie Adresse eingeben'); my $finished = 0; my $ipaddr = ""; my $x = 0; while(!$finished) { my $inp = chr($AGI->wait_for_digit('5000')); if($inp =~ /^[0-9\*\#]$/) { if($inp =~ /^[\*\#]$/) { $x++; if($x > 3) { $finished = 1; } else { $ipaddr .= '.'; } } else { $ipaddr .= $inp; } } else { # timeout ? $finished = 1; } if(length($ipaddr) > 14) { $finished = 1; } } if($ipaddr =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) { my $ret = `ping -w 10 -c 4 -i 0.2 $ipaddr >/dev/null 2>&1 && echo yes || echo no`; if(substr($ret, 0, 3) eq 'yes') { speak("Der Computer $ipaddr ist eingeschaltet!"); } else { speak("Achtung! Der Computer $ipaddr ist ausgeschaltet!"); } } else { speak("Ungültige Ei Pie Adresse: $ipaddr"); } } sub speak() { my($text) = @_; my ($df,$file) = tempfile(); system("echo '$text' | preproc /usr/local/txt2pho/preproc/Rules.lst /usr/local/txt2pho/preproc/Hadifix.abk | txt2pho -m | mbrola -f0.9 -t1 -l 15000 /usr/local/txt2pho/voices/de2 - $file.wav"); system("sox $file.wav -r 8000 $file.gsm resample -ql"); unlink($file); unlink("$file.wav"); $AGI->stream_file($file); unlink("$file.gsm"); }