#! /usr/bin/perl use strict; use warnings; use FindBin qw ($Bin); use Net::Ping; use CGI; use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use Time::HiRes; use Time::Piece; our $date = Time::Piece->new->strftime('%Y-%d-%m_%H-%M-%S'); #Aktuelles Datum open (STDERR, '>/home/deruytja/webserver/rifucgi/logs/'.$date.'multiping_error.log'); #Redirecting Standart Error to file my $cgi = new CGI; my $dateiname = $cgi->param('dateiname'); my ($data, $file, $out_file, $wfname, $wfile, $i, $dur,$age, $key, $typ, $val, $p1, $p2, $p3, $ip, $out, $anzahl, $start, $ende, @label, @dauer, %devices, @check); our (@graphdata); if (!length($dateiname) == 0) { $out_file = ("$dateiname\_$date.csv") or die 'Error processing file: ',$!; } else { $out_file = ("ping_$date.csv") or die 'Error processing file: ',$!; } my $ping1 = Net::Ping->new("tcp", 1); my $ping2 = Net::Ping->new("tcp", 1); my $ping3 = Net::Ping->new("tcp", 1); $ping1->port_number("80"); $ping2->port_number("5432"); $ping3->port_number("301"); $ping1->hires(); $ping2->hires(); $ping3->hires(); my $outpath = '/home/deruytja/webserver/output/multiping/'; open ($out, '>', $outpath.$out_file) or die 'Error processing file: ',$!; $out->autoflush(1); &UPLOAD; open (INPUT,"ping($devices{$_}); $typ='SIAE'; if (!$p1 == 1) { ($p2, $dur, $ip) = $ping2->ping($devices{$_}); $typ='Huawei'; if (!$p2 == 1) { ($p3, $dur, $ip) = $ping3->ping($devices{$_}); $typ='Siemens'; } if (!$p3 == 1){$typ='Unknown'} } if ($p1 == 1 or $p2 == 1 or $p3 == 1) { $dur = sprintf("%.2f", 1000 * $dur); push (@label,$_); #LinkID ins erste Array push (@dauer,$dur); #duration ins 2te Array $check[$i] = 'ACTIVE;'.$_.';'.$typ.';'.$devices{$_}.';'.$dur.'ms'."\n"; } else { push (@label,$_); #LinkID ins erste Array push (@dauer,'0'); #duration ins 2te Array $check[$i] = 'OFFLINE;'.$_.';'.$typ.';'.$devices{$_}."\n"; }; $ping1->close(); $ping2->close(); $ping3->close(); $i++; } $ende = Time::HiRes::time(); push @check, 'Ausführdauer: '.sprintf("%.2f",($ende-$start)).'s'; print $out 'Ping_result;Link_ID;Device_Type;IP;Ping_time'."\n"; foreach (@check) { print $out "$_"; }; close $out; @graphdata = ([@label],[@dauer]); ########################OUTPUT print $cgi->header, $cgi->start_html('Pingergebnis'), $cgi->h1('Ergebnis des Pings'), $cgi->br(); print "\n"; print $check[-1]; print "\n"; print $cgi->br(); print ""; print $cgi->br(), $cgi->br(), $cgi->a({-href => "/output/multiping/$out_file"},'Auswertung'), $cgi->br(), $cgi->a({-href => '../ping.html'},'Back to Paradise'), $cgi->end_html; ########################/OUTPUT sub READIN { while () #Schleifenstart zum Einlesen der Werte { for ( "\r\n") {$/="\r\n"} chomp; #Abschneiden des INPUT_RECORD_SEPARATORS ($val, $key) = split /;/; #Teilen der Werte nach $val(ue) und $key (BGTR ID) if (exists $devices{$key}) {next;} else {$devices{$key} = $val;} } } sub UPLOAD { $wfile = $cgi->param("toping"); $wfname = 'toping'; open (DAT,">/home/deruytja/webserver/rifucgi/temp_ul/$wfname") or die 'Error processing file INPUT: ',$!; binmode $wfile; binmode DAT; while (read $wfile, $data, 1024) { print DAT $data } #Upload Teil des Scripts close DAT; } #### #! /usr/bin/perl #use strict; use warnings; use GD::Graph::bars; require "multiping.pl"; our (@graphdata, $date); my ($mygraph,$graphimage); open (STDERR, '>/home/deruytja/webserver/rifucgi/logs/'.$date.'multipinggraph_error.log'); #Redirecting Standart Error to file $mygraph = GD::Graph::bars->new(500, 300); $mygraph->set( x_label => 'Link', y_label => 'Antwortzeit', title => 'Antwortzeiten der Links', ) or warn $mygraph->error; $graphimage = $mygraph->plot(\@graphdata); print "Content-type: image/png\n\n"; binmode STDOUT; print $graphimage->png;