#!/usr/bin/perl # Version 2.0 - 07-03-2002 # # Salidas Errorlevel # 0: OK # 1: ALERTA # 2: CRITICAL # 3: APERTURA DE ARCHIVOS # 4: FUERA DE RANGO HORARIO # 9: HELP ###################################################################### +########### # Definicion de Librerias + # ###################################################################### +########### #use strict; #use warnings; #use diagnostic; use File::Copy; use LWP::UserAgent; require HTTP::Headers::Util; require HTTP::Message; ###################################################################### +########### # Definicion de variables + # ###################################################################### +########### my %param = (); my $flag; my ($hour,$min,$seg)=&local_hour; my ($ano,$mes,$dia)=&local_date; $param{debug}=0; ###################################################################### +########### # Main + # ###################################################################### +########### if (uc($ARGV[0]) eq "DEBUG") { $param{debug}=1; }elsif ((uc($ARGV[0]) eq "HELP") || ($ARGV[0] eq "?")) { &ayuda; } $param{flag}="UP"; (%param)=&read_paramini(%param); &prt_param(%param) if ($param{debug} eq 1); print "1 ______________________\n" if ($param{debug} eq 1); my $FileList = $param{workdir}."\\".$param{logs_arch_path_name}; if ($hour < $param{horaini} or $hour > $param{horafin}) { # No ejecuta ... fuera de rango exit 4; } print "LOG : $FileList\n" if ($param{debug} eq 1); if ($param{logs_verificat} > 0) { $hora1=$hour.$min; $dif=($param{delay}/60)-1; $hora2=$param{horaini}.$dif; if ( $hora1 <= $hora2 ) { my $in = $FileList; my $out = $FileList."\.bak"; copy($in, $out); open LOG, ">$FileList" or exit 3 ; }else{ open LOG, ">>$FileList" or exit 3 ; } } (%param)=&read_flag(%param); print "2 ______________________\n" if ($param{debug} eq 1); (%param)=&processes(%param); &prt_param(%param) if ($param{debug} eq 1); print "3 ______________________\n" if ($param{debug} eq 1); (%param)=&alerta(%param); (%param)=&processes(%param); print "4 ______________________\n" if ($param{debug} eq 1); (%param)=&write_flag(%param); print "5 ______________________\n" if ($param{debug} eq 1); close LOG; if ($param{flag} eq "UP") { exit; }elsif ($param{flag} eq "ALERTA") { exit 1; }if ($param{flag} eq "CRITICAL") { exit 2; } ###################################################################### +########### # Help + # ###################################################################### +########### sub ayuda { system(cls); print "ProxyCheck.exe - Version 2.0 - 08-03-2002 \n"; print "Opciones \[DEBUG\]: muestra por pantalla el proceso\n"; print " \[HELP\]: muestra por pantalla esta ayuda\n\n"; print "# Salidas Errorlevel\n"; print "# 0: OK\n"; print "# 1: ALERTA\n"; print "# 2: CRITICAL\n"; print "# 3: APERTURA DE ARCHIVOS\n"; print "# 4: FUERA DE RANGO HORARIO\n"; print "# 9: HELP || ?\n"; exit 9; } ###################################################################### +########### # Lectura de Parametros => proxycheck.ini + # ###################################################################### +########### sub read_paramini { (%param)=@_; my $FileList = "proxycheck.ini"; if (!-e $FileList) { $param{logs_verificat}=1; $param{workdir}="c:\proxyckeck"; $param{logs_arch_path_name}= "proxycheck.log"; $param{server}= "localhost"; $param{port}= "8080"; $param{url1}= "http://foo.com.ar"; $param{url2}= "http://refoo.com.ar"; $param{horaini}=0; $param{horafin}=21; $param{delay}=180; } if (open INI, "<$FileList") { print "Abro archivo $FileList para lectura\n " if ($param{debu +g} eq 1) ; my @lectura_param=<INI>; close INI; my $urlcount=0; foreach my $linea_param (@lectura_param){ chomp ($linea_param); if ($linea_param =~ /#/) { # linea de comentario }elsif (!$linea_param) { # lineas en blanco }else{ $linea_param =~ tr / //; $linea_param =~ s/ //eg; ($variable, $valor) = split (/=/, $linea_param); if ($variable =~ /url/) { $urlcount= ++ $urlcount; } $param{$variable} = $valor; } } $param{urlcount}=$urlcount; }else{ print ":::::::::: Tomo parametros de default ...\n " if ($para +m{debug} eq 1); print "\n$param{logs_verificat},$param{workdir},$param{logs_ar +ch_path_name},$param{server},$param{port},$param{url1},$param{horaini +},$param{horafin},$param{delay}\n" if ($param{debug} eq 1) ; $param{urlcount}=1; } return(%param); } ###################################################################### +########### # Lectura de FLAG => FLAG.dat + # ###################################################################### +########### sub read_flag { (%param)=@_; my $FileList = "flag.dat"; if (open FLAG, "<$FileList") { print "Abro archivo $FileList para lectura\n " if ($param{debu +g} eq 1); while (<FLAG>){ $param{flag}=$_; print "FLAG : $param{flag}\n" if ($param{debug} eq 1); close FLAG; } }else{ open FLAG, ">$FileList"; print FLAG "UP"; close FLAG; } return(%param); } ###################################################################### +########### # write de FLAG => FLAG.dat + # ###################################################################### +########### sub write_flag { (%param)=@_; my $FileList = "flag.dat"; open FLAG, ">$FileList" or exit 3; print FLAG "$param{flag}"; close FLAG; return(%param); } ###################################################################### +########### # Procesos + # ###################################################################### +########### sub processes { (%param) = @_; $urlcuenta = $param{urlcount}; $param{active}="Ok"; while ($urlcuenta >0) { $temp="url".$urlcuenta; chomp ($temp); $url_data = $param{$temp}; $url_data =~ tr / //; $url_data =~ s/ //eg; $param{data}=$url_data; if ($url_data =~ m/^http:\/\/.*/) { (%param) = &HTTpConn(%param); my ($year,$month,$day)=&local_date($year,$month,$d +ay); my $date=$year."-".$month."-".$day; my ($hour,$min,$sec)=&local_hour($hour,$min,$sec); my $time=$hour.":".$min; my $temp = "url".$param{urlcount}; my $valores = $date.",".$time.",".$param{active}." +,".$param{server}.",".$param{data}.",".$param{errormsg}; print LOG "$valores\n"; $status{$temp} = $valores; $param{$temp}= $valores; } $urlcuenta=--$urlcuenta; $param{urlcount}=$urlcuenta; } return(%param); } ###################################################################### +########### # Conexion contra URL + # ###################################################################### +########### sub HTTpConn { (%param) = @_; my $ua = LWP::UserAgent->new; my $server = $param{server}; my $port = $param{port}; my $ErrorMsg = "200 - Ok"; my $url = $param{data}; my $temporal_con = "http://".$server.":".$port; chomp ($temporal_con); print "\n$temporal_con with $url\n" if ($param{debug} eq 1); $ua->proxy(['http', 'ftp'] , $temporal_con); $req = new HTTP::Request 'GET' => $url; # $res = $ua->request($req); $res = $ua->request($req, \&callback, 4096); if ($res->is_success) { $param{active}="Ok"; print "$url -> Connect OK\n" if ($param{debug} eq +1); } else { $ErrorMsg=$res->as_string; ($ErrorMsg,my $trash)=split(/\n/,$ErrorMsg); if ($ErrorMsg =~ /4\d\d/) { $param{active}="NOk"; print "$url -> Connect NOk \n" if ($param{debug} e +q 1); }else{ $param{active}="Err"; # $_=$res->error_as_HTML; print "$url -> Connect Err \n" if ($param{debug} e +q 1); } } $param{errormsg}=$ErrorMsg; return(%param); } ############################################################## # Genera alertas en Tivoli ############################################################## sub alerta { (%param) = @_; my $icuenta=0; my $flag = $param{flag}; foreach $linea (sort keys %param) { if ($linea =~ /url/) { print "$linea: $status{$linea}\n" if ($param{debug} eq 1); my ($date,$time,$estado,$server_nam,$url,$ErrorMsg)=split( +/,/,$status{$linea}); if ($estado =~ /Err/) { $icuenta=$icuenta+1; $ErrorMsg = $linea; } } } my $tivolicmd=$param{workdir}."\\".$param{tivoli}; my $ErrorMsg=sprintf "\"%s\"",$ErrorMsg; if ($icuenta > 0) { if ($flag =~ /ALERTA/) { #si existe genero critical $flag = "CRITICAL"; system "$alertacmd CRITICAL $ErrorMsg"; print ">>>>>>>>>>>>>> Alerta -> CRITICAL \n" if ($param{de +bug} eq 1); }elsif ($flag =~ /UP/){ #si no existe genero alerta $flag = "ALERTA"; system "$alertacmd DOWN $ErrorMsg"; print ">>>>>>>>>>>>>> Alerta -> DOWN \n" if ($param{debug +} eq 1); } }else{ if ($flag =~ /CRITICAL/ || $flag =~ /ALERTA/){ #si existe alerta o critical - borro flags $flag = "UP"; system "$alertacmd UP Service_proxy_server"; print ">>>>>>>>>>>>>> Alerta -> UP Service_proxy_server\n +" if ($param{debug} eq 1); } } $param{flag} = $flag; return(%param); } ###################################################################### +########### # Dia formato + # ###################################################################### +########### sub local_date { ($day, $mes, $ano) = (localtime)[3..5]; $month = $mes+1; $year = $ano+1900; return($year,$month,$day); } ###################################################################### +########### # Dia formato + # ###################################################################### +########### sub local_hour { ($sec, $min, $hour) = (localtime)[0..2]; return($hour,$min, $sec); } ###################################################################### +########### # Funcion print param + # ###################################################################### +########### sub prt_param { (%ini)=@_; my $icuenta=1; print "\nLista Hash ...\n" ; foreach $linea (sort keys %ini) { print "$icuenta .- $linea: $ini{$linea}\n"; $icuenta=$icuenta+1; } print "Fin Hash ...\n\n"; return; } ###################################################################### +########### # Funcion Callback + # ###################################################################### +########### sub callback { my ($data, $response, $protocol) = @_; return; } ###################################### # NOTA # INI externo: alerta.cmd # Todas las variables deben ser ingresadas en minusculas y # para come +ntarios # Tiempo loop (en seg) entre llamados, las horas de 0 .. 21 #horaini = 0 #horafin = 21 # Directorio de trabajo #workdir = c:\proxycheck # Generacion de logs y archivo de logs #logs_verificat = 1 #logs_arch_path_name = proxycheck.log # Datos del proxy server #server = localhost #port = 8080 # Archivos Tivoli #alerta = alerta.cmd # URLs a controlar #url1 = http://foo.com.ar #url2 = http://refoo.com.ar #url3 = .... ###################################### # NOTA # CMD externo: alerta.cmd #@echo off #set MSG=%2 #goto %1 #:up #set a=HARMLESS #set b=web_proxy_up #set MSG=%2_UP #goto fin #:down #set a=WARNING #set b=web_proxy_down #net stop proxy_xxxx >NUL #c:\proxycheck\sleep 30 #c:\proxycheck\kill -f ns-proxy.exe #c:\proxycheck\kill -f proxy.exe #c:\proxycheck\kill -f bupdate.exe #net start proxy_xxxx >NUL #goto fin #:critical #set a=CRITICAL #set b=web_proxy_down #goto fin #:fin # use tool ext. of mail or tivoli postmsg with parameters (%a%,%MSG%,% +computername%,%b%)
In reply to ProxyCheck by ZinMostaccho
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |