Saturday, 1 March 2014

HTTP server parameters update using perl

use Net::SNMP;
use DBI;
use Net::Ping;
use Socket;
use Time::Local;

for (;;) {
    my $start = time;
   my $start_new = [ Time::HiRes::gettimeofday( ) ];

##############################################STATUS
my $timeout = 3;
my $hostname = "localhost";
my $portnumber = "80";
my $host = shift || $hostname;
my $port = shift || $portnumber;# know abt it
my $proto = getprotobyname('tcp');
my $iaddr = inet_aton($host);#to convert dot quad Ip address into ipv4 address format
my $paddr = sockaddr_in($port, $iaddr);# unpacks its SOCKADDR_IN argument and returns an array consisting of (PORT, ADDRESS).


$count="0";
$ip_address="127.0.0.1";    #  To connect to NET SNMP
$community_string="public";
$user = "root";   # My SQL user name
$pw = "http";     #  database password
$database = "httpmonitor";   # Database nmae
$tablename = "sample";   # table name
$host = "localhost";  # To connect to Database
$mydbh = DBI->connect('DBI:mysql:database=httpmonitor:localhost',$user,$pw) or die "Cannot connect:". $DBI::errstr;

$upDownFlag="0";

socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; #Opens a socket of the specified kind and attaches it to filehandle SOCKET. DOMAIN, TYPE, and PROTOCOL are specified the same as for the syscall of the same name.

eval {
  local $SIG{ALRM} = sub { die "timeout" };
  alarm($timeout);
  connect(SOCKET, $paddr) || error();
  alarm(0);
};

if ($@) {
  close SOCKET || die "close: $!";
  print "$hostname is NOT listening on tcp port $portnumber.\n";
  #exit 1;
  # Insert into DB with  Status = "DOWN" and other values as "0"
  $upDownFlag="0";
}
else {
  close SOCKET || die "close: $!";
  print "$hostname is listening on tcp port $portnumber.\n";
  #exit 0;
  $upDownFlag="1";
}



######################################REsponse time
#$rtt=0.0000;
my ($host,$rtt,$ip);
#my @host_array = ("localhost", "", "127.0.0.1");
my @host_array = ("OSSTNGMCN01", "OSSTNGMCN04", "PROJECTX99");
my $p = Net::Ping->new("syn");

$p->{port_num} = getservbyname("http", "tcp");
foreach $host (@host_array) {
 $p->ping("localhost");
}
while (($host,$rtt_org,$ip) = $p->ack) {
 print "HOST: $host [$ip] ACKed in %.2f ms $rtt_org seconds.\n";
}

# this block is to get some valid response time ( later can be removed )
# ********************************************************

# High precision syntax (requires Time::HiRes)
$p = Net::Ping->new();
$p->hires();
($ret, $duration, $ip) = $p->ping("localhost", 5.5);
printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration);
$rtt = 1000 * $duration;
print "\n\nnew res time: ".$rtt;
print "\n";

#******************************************************************




#$dsn="dbi:mysql:$database:localhost:3306";
#$connect=DBI->connect($localhost,$user,$pw)or die "Unable to connect: $DBI::errstr\n";
#$connect->selectdb($httpmonitor);
print $ip_address."\n";
$session = Net::SNMP->session(hostname =>$ip_address,Community =>$community_string,timeout =>1);

$result = $session->get_request(".1.3.6.1.2.1.1.3.0");
print "SysUpTime:";
$result1= $result->{".1.3.6.1.2.1.1.3.0"}."\n";
print $result1;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.11.0");
print "Maximum Annonymous users:";
$result2=$result->{".1.3.6.1.4.1.311.1.7.3.1.11.0"}."\n";
print $result2;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.12.0");
print "Maximum Non-Annonymous users :";
$result3=$result->{".1.3.6.1.4.1.311.1.7.3.1.12.0"}."\n";
print $result3;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.9.0");
print "Total no of annonymous users: ";
$result4= $result->{".1.3.6.1.4.1.311.1.7.3.1.9.0"}."\n";
print $result4;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.10.0");
print "Total no of non-annonymous users: ";
$result5=$result->{".1.3.6.1.4.1.311.1.7.3.1.10.0"}."\n";
print $result5;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.14.0");
print "Maximum no of Connections: ";
$result6=$result->{".1.3.6.1.4.1.311.1.7.3.1.14.0"}."\n";
print $result6;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.13.0");
print "No of Active Connections: ";
$result7=$result->{".1.3.6.1.4.1.311.1.7.3.1.13.0"}."\n";
print $result7;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.13.0");
print "Total no of connection Attempts: ";
$result8=$result->{".1.3.6.1.4.1.311.1.7.3.1.13.0"}."\n";
print $result8;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.16.0");
print "Total no logon Attempts: ";
$result9=$result->{".1.3.6.1.4.1.311.1.7.3.1.16.0"}."\n";
print $result9;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.18.0");
print "Total no of get requests: ";
$result10= $result->{".1.3.6.1.4.1.311.1.7.3.1.18.0"}."\n";
print $result10;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.19.0");
print "Total no of Post requests: ";
$result11=$result->{".1.3.6.1.4.1.311.1.7.3.1.19.0"}."\n";
print $result11;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.20.0");
print "Total no of Head requests: ";
$result12= $result->{".1.3.6.1.4.1.311.1.7.3.1.20.0"}."\n";
print $result12;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.21.0");
print "Total no of put requests: ";
$result13=$result->{".1.3.6.1.4.1.311.1.7.3.1.21.0"}."\n";
print $result13;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.22.0");
print "Total no of Delete requests: ";
$result14=$result->{".1.3.6.1.4.1.311.1.7.3.1.22.0"}."\n";
print $result14;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.35.0");
print "Total no of CGI requests: ";
$result15=$result->{".1.3.6.1.4.1.311.1.7.3.1.35.0"}."\n";
print $result15;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.36.0");
print "Total no of BGI requests: ";
$result16=$result->{".1.3.6.1.4.1.311.1.7.3.1.36.0"}."\n";
print $result16;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.40.0");
print "Total no of Blocked requests: ";
$result17= $result->{".1.3.6.1.4.1.311.1.7.3.1.40.0"}."\n";
print $result17;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.44.0");
print "Total no of Locked: ";
$result18= $result->{".1.3.6.1.4.1.311.1.7.3.1.44.0"}."\n";
print $result18;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.5.0");
print "TotalFilesSent: ";
$result19= $result->{".1.3.6.1.4.1.311.1.7.3.1.5.0"}."\n";
print $result19;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.43.0");
print "TotalNotFoundErrors: ";
$result20= $result->{".1.3.6.1.4.1.311.1.7.3.1.43.0"}."\n";
print $result20;

$result = $session->get_request(".1.3.6.1.4.1.311.1.7.3.1.44.0");
print "TotalLockedErrors: ";
$result21= $result->{".1.3.6.1.4.1.311.1.7.3.1.44.0"}."\n";
print $result21;

$ttl_errs= $result20 + $result21;
print "Totalerrors: $ttl_errs";


@months = qw(01 02 03 04 05 06 07 08 09 10 11 12);
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
$year = 1900 + $yearOffset;
$theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
@array_dt=split(',',$theTime);

$year=@array_dt[2];
@array_md=split(' ',@array_dt[1]);
#print "\nMonth and Day:  ".@array_md[1]."   ".@array_md[2];
$date = $year."-".@array_md[1]."-".@array_md[2];
$time = @array_dt[0];
$date_time_0 = $date." ".$time;
print  "\n\n\nFinal Date and Time:  ".$date_time_0."\n";
$month_num=@array_md[1];
print "Testing 3 variables(hour, month, year):".$hour."  ".$month_num. "  ".$year."\n";




#$result = $session->get_request(".1.3.6.1.2.1.1.3");
#print "System Uptime: ";
#$result19= $result->{".1.3.6.1.2.1.1.3"}."\n";
#print $result19;

#$query = "INSERT INTO table2 (id, name, age) VALUES ('1', '$usn', '22')";
##$myquery = "INSERT INTO $tablename VALUES ('$ip_address','$result1','$result2','$result3','$result4','$result5','$result6','$result7','$result8','$result9','$result10','$result11','$result12','$result13','$result14','$result15','$result16','$result17','$result18','$result19','$result20','$result21')";
#if($count=="1")
#{
# $ip_address="192.168.1.10";
#}
@ips = ("127.0.0.1","192.168.1.5","192.168.1.10");

#sleep 5;
 my $end_run = time();
 $end_new =[ Time::HiRes::gettimeofday( ) ];
#my $run_time = ($end_new - $start_new)*1000;
my $elapsed = Time::HiRes::tv_interval( $start_new );
print "Elapsed time: $elapsed seconds!\n";
$run_time = $elapsed *1000;
print "Execution Time: $run_time milli seconds\n";
#print "Start time: $start\n";
#print "End time: $end_run\n";

#print "exec in milli secs:  ".to_milli($end_run) - to_milli($start);
for($i=0;$i<3; $i++)
{
$ip_address = $ips[$i];
$query = "INSERT INTO $tablename(server_ip,resp_time,exe_time,date, time, date_time, sysuptime, MaxAnonmususers, Maxnonannonusrs, totlannnusr,
Totalnonannonusr, maxconn, Activeconn, connattem, logonatt , Totlget, Totlpost , Head, put,
totldelete, CGI, BGI, blocked, locked,ttlfile_sent,err_notfound,err_locked,ttl_errs, status,hour,month,year) VALUES ('$ip_address','$rtt','$run_time','$date','$time','$date_time_0','$result1','$result2','$result3','$result4','$result5','$result6','$result7','$result8','$result9','$result10','$result11','$result12','$result13','$result14','$result15','$result16','$result17','$result18','$result19','$result20','$result21','$ttl_errs','$upDownFlag','$hour','$month_num','$year')";
##$execute=$mydbh->query($myquery);
$query_handle=$mydbh->prepare($query);
##$affectedrows=$execute->affectedrows($myquery);
$query_handle->execute();
print " inserting for $i host.......\n";
##$lastid = $execute->insertid($myquery);
}

print "   Insertion of all IPs completed \n";
$del_qry = "delete from hour_mean where hour='$hour' and date='$date'";
$query_handle=$mydbh->prepare($del_qry);
$query_handle->execute();

$ins_query_1 = "insert into hour_mean( `server_ip`,  `date`, `status_avg`, `resp_time_avg`, `exe_time_avg`,`sysuptime_avg`, `MaxAnonmususers_avg`, `Maxnonannonusrs_avg`, `totlannnusr_avg`, `Totalnonannonusr_avg`, `maxconn_avg`, `Activeconn_avg`, `connattem_avg`, `logonatt_avg`, `Totlget_avg`, `Totlpost_avg`, `Head_avg`, `put_avg`, `totldelete_avg`, `CGI_avg`, `BGI_avg`, `blocked_avg`, `locked_avg`, `ttlfile_sent_avg`, `err_notfound_avg`, `err_locked_avg`, `ttl_errs_avg`,`hour`,`month`,`year`) (select server_ip, date, round(avg(status),2), round(avg(resp_time), 2) as resptime_avg, round(avg(exe_time),2) as exetime_avg, round(avg(sysuptime),2) as sysuptime_avg, round(avg(MaxAnonmususers),2) as Maxanusers_avg, round(avg(Maxnonannonusrs),2) as Maxnonannuser_avg, round(avg(totlannnusr),2) as ttlanuser_avg, round(avg(Totalnonannonusr),2),round(avg(maxconn),2),round(avg(Activeconn),2), round(avg(connattem),2), round(avg(logonatt),2), round(avg(Totlget),2), round(avg(Totlpost),2), round(avg(Head),2), round(avg(put),2), round(avg(totldelete),2), round(avg(CGI),2), round(avg(BGI),2), round(avg(blocked),2), round(avg(locked),2), round(avg(ttlfile_sent),2), round(avg(err_notfound),2), round(avg(err_locked),2), round(avg(ttl_errs),2),hour,month,year FROM sample where hour='$hour' and date='$date' group by hour, date, server_ip, month, year order by date, hour);";
$query_handle=$mydbh->prepare($ins_query_1);
$query_handle->execute();

print " Hour Insertion completed \n";
$del_qry = "delete from daily_mean where date='$date'";
$query_handle=$mydbh->prepare($del_qry);
$query_handle->execute();

#`server_ip`,  `date`, `status_avg`, `resp_time_avg`, `exe_time_avg`,`sysuptime_avg`, `MaxAnonmususers_avg`, `Maxnonannonusrs_avg`, `totlannnusr_avg`, `Totalnonannonusr_avg`, `maxconn_avg`, `Activeconn_avg`, `connattem_avg`, `logonatt_avg`, `Totlget_avg`, `Totlpost_avg`, `Head_avg`, `put_avg`, `totldelete_avg`, `CGI_avg`, `BGI_avg`, `blocked_avg`, `locked_avg`, `ttlfile_sent_avg`, `err_notfound_avg`, `err_locked_avg`, `ttl_errs_avg`,`hour`,`month`,`year`
$ins_query_2 = "insert into daily_mean( `server_ip`,  `date`, `status_avg`, `resp_time_avg`, `exe_time_avg`,`sysuptime_avg`, `MaxAnonmususers_avg`, `Maxnonannonusrs_avg`, `totlannnusr_avg`, `Totalnonannonusr_avg`, `maxconn_avg`, `Activeconn_avg`, `connattem_avg`, `logonatt_avg`, `Totlget_avg`, `Totlpost_avg`, `Head_avg`, `put_avg`, `totldelete_avg`, `CGI_avg`, `BGI_avg`, `blocked_avg`, `locked_avg`, `ttlfile_sent_avg`, `err_notfound_avg`, `err_locked_avg`, `ttl_errs_avg`,`month`,`year`) (select server_ip, date, round(avg(status_avg),2), round(avg(resp_time_avg), 2) as resptime_avg, round(avg(exe_time_avg),2) as exetime_avg, round(avg(sysuptime_avg),2) as sysuptime_avg, round(avg(MaxAnonmususers_avg),2) as Maxanusers_avg, round(avg(Maxnonannonusrs_avg),2) as Maxnonannuser_avg, round(avg(totlannnusr_avg),2) as ttlanuser_avg, round(avg(Totalnonannonusr_avg),2),round(avg(maxconn_avg),2),round(avg(Activeconn_avg),2), round(avg(connattem_avg),2), round(avg(logonatt_avg),2), round(avg(Totlget_avg),2), round(avg(Totlpost_avg),2), round(avg(Head_avg),2), round(avg(put_avg),2), round(avg(totldelete_avg),2), round(avg(CGI_avg),2), round(avg(BGI_avg),2), round(avg(blocked_avg),2), round(avg(locked_avg),2), round(avg(ttlfile_sent_avg),2), round(avg(err_notfound_avg),2), round(avg(err_locked_avg),2), round(avg(ttl_errs_avg),2),month,year FROM hour_mean where date='$date' group by date,server_ip order by date);";
#print "$ins_query_2";
$query_handle=$mydbh->prepare($ins_query_2);
$query_handle->execute();

print " Day Insertion completed \n";


$del_qry = "delete from month_mean where month='$month_num' and year='$year'";
$query_handle=$mydbh->prepare($del_qry);
$query_handle->execute();


$ins_query_3 = "insert into month_mean( `server_ip`,  `date`, `status_avg`, `resp_time_avg`, `exe_time_avg`,`sysuptime_avg`, `MaxAnonmususers_avg`, `Maxnonannonusrs_avg`, `totlannnusr_avg`, `Totalnonannonusr_avg`, `maxconn_avg`, `Activeconn_avg`, `connattem_avg`, `logonatt_avg`, `Totlget_avg`, `Totlpost_avg`, `Head_avg`, `put_avg`, `totldelete_avg`, `CGI_avg`, `BGI_avg`, `blocked_avg`, `locked_avg`, `ttlfile_sent_avg`, `err_notfound_avg`, `err_locked_avg`, `ttl_errs_avg`, `month`, `year`) (select server_ip, date, round(avg(status),2), round(avg(resp_time), 2) as resptime_avg, round(avg(exe_time),2) as exetime_avg, round(avg(sysuptime),2) as sysuptime_avg, round(avg(MaxAnonmususers),2) as Maxanusers_avg, round(avg(Maxnonannonusrs),2) as Maxnonannuser_avg, round(avg(totlannnusr),2) as ttlanuser_avg, round(avg(Totalnonannonusr),2),round(avg(maxconn),2),round(avg(Activeconn),2), round(avg(connattem),2), round(avg(logonatt),2), round(avg(Totlget),2), round(avg(Totlpost),2), round(avg(Head),2), round(avg(put),2), round(avg(totldelete),2), round(avg(CGI),2), round(avg(BGI),2), round(avg(blocked),2), round(avg(locked),2), round(avg(ttlfile_sent),2), round(avg(err_notfound),2), round(avg(err_locked),2), round(avg(ttl_errs),2), month, year FROM sample where month='$month_num' and year='$year' group by  month, year,server_ip order by month, year);";
$query_handle=$mydbh->prepare($ins_query_3);
$query_handle->execute();

print " Month Insertion completed \n";

$del_qry = "delete from year_mean where  year='$year'";
$query_handle=$mydbh->prepare($del_qry);
$query_handle->execute();

$ins_query_4 = "insert into year_mean( `server_ip`, `date`, `status_avg`, `resp_time_avg`, `exe_time_avg`,`sysuptime_avg`, `MaxAnonmususers_avg`, `Maxnonannonusrs_avg`, `totlannnusr_avg`, `Totalnonannonusr_avg`, `maxconn_avg`, `Activeconn_avg`, `connattem_avg`, `logonatt_avg`, `Totlget_avg`, `Totlpost_avg`, `Head_avg`, `put_avg`, `totldelete_avg`, `CGI_avg`, `BGI_avg`, `blocked_avg`, `locked_avg`, `ttlfile_sent_avg`, `err_notfound_avg`, `err_locked_avg`, `ttl_errs_avg`, `year`) (select server_ip, date, round(avg(status),2), round(avg(resp_time), 2) as resptime_avg, round(avg(exe_time),2) as exetime_avg, round(avg(sysuptime),2) as sysuptime_avg, round(avg(MaxAnonmususers),2) as Maxanusers_avg, round(avg(Maxnonannonusrs),2) as Maxnonannuser_avg, round(avg(totlannnusr),2) as ttlanuser_avg, round(avg(Totalnonannonusr),2),round(avg(maxconn),2),round(avg(Activeconn),2), round(avg(connattem),2), round(avg(logonatt),2), round(avg(Totlget),2), round(avg(Totlpost),2), round(avg(Head),2), round(avg(put),2), round(avg(totldelete),2), round(avg(CGI),2), round(avg(BGI),2), round(avg(blocked),2), round(avg(locked),2), round(avg(ttlfile_sent),2), round(avg(err_notfound),2), round(avg(err_locked),2), round(avg(ttl_errs),2), year FROM sample where year='$year'  group by  year,server_ip order by  year);";
$query_handle=$mydbh->prepare($ins_query_4);
$query_handle->execute();
print " Year Insertion completed \n";
print "  .....One Iteration Completed..... \n";

if ((my $remaining = 300 - (time - $start)) > 0) {
   #print "**********One Iteration Complted**********";
  sleep $remaining;
  }
}




$session->close;
##print $affectedrows."<br />";
##perlprint $lastid."<br />";

#print end_html;

No comments:

Post a Comment