in reply to Re: update the hash element in side the thread loop
in thread update the hash element in side the thread loop
#! /usr/bin/perl #use strict; use threads; #use threads ( 'stack_size' => 64*4096 ); use threads::shared; use Net::Ping; use Data::Dumper; use DBD::Sybase; use Mail::Sendmail; use Net::SNMP; use DBI; require "./../routine/Vectr_Param.pl"; require "./../routine/Sql_Notify.pl"; require "./../routine/Log_Notify.pl"; ####################### # Retriving data using hash my %hash=(); my $dbh = DBI->connect("dbi:$Db_Product:$Db_Name","$Db_UserNam +e","$Db_Password"); my $show_select = "select * from ESX_INFO"; my $db_query1 = $dbh->prepare($show_select); $db_query1->execute(); my @hst_s=(); my @guest_s=(); my @get_svalues12=(); my ($hst,$guest,$server); while(@get_svalues12 = $db_query1->fetchrow_array()) { $server="@get_svalues12"; ($hst,$guest)= split(/\s/,$server); push(@hst_s,$hst); push(@guest_s,$guest); } for(my $i=0;$i<=$#hst_s;$i++) { my $m =0; if($hash{$hst_s[$i]} ne "") { $server=$hst_s[$i]; $m=$hash{$hst_s[$i]}; } if($m ne "0") { my $guest="$guest_s[$i]"." "."$m"; $hash{$hst_s[$i]}=$guest; } else { $hash{$hst_s[$i]}=$guest_s[$i]; } } #-----------------------USE of thread my $Main_Thread=1; my $Guest_Thread=1; $first=0; my ($k,$v,$l_href); my @arr_href=(); my @threads; while(1) { my $Main_Thread=1; my $Guest_Thread=1; foreach $ESX (keys %hash) { $date=`date +'%F:%R:%S:%N'`; $Guests = $hash{$ESX}; print "Key $ESX--->>> Values --->>>$Guests\n\n"; $Server_Ping=&Main_Pinging($ESX,$Main_Thread,"ESX_SERVER"); ($server_ip,$server_status)=split(/\-/,$Server_Ping); if($server_status eq "UP") { my @guest_server=split(/\s/,$Guests); foreach $guest (@guest_server) { $ESX_Guest_Thread="$Main_Thread"."-"."$Guest_T +hread"; $Guest_Ping=&Main_Pinging($guest,$ESX_Guest_Th +read,$ESX); $Guest_Thread++; } } $Main_Thread++; } $date1=`date +'%F:%R:%S:%N'`; ### print " Before time is --->$date After Time is ---> $date1\n"; sleep(10); $first++; } sub Main_Pinging() { $ESX_Guest_Server=shift; $ESX_Guest_Comb=shift; $ESX_Server=shift; my $p = Net::Ping->new(); if ($p->ping($ESX_Guest_Server,1)) { $p->close(); $Up="$ESX_Guest_Server"."-"."UP"; return $Up; } else { $Down="$ESX_Guest_Server"."-"."DOWN"."-"."$ESX +_Server"; print "Thread Opened -- $ESX_Guest_Server\n\n" +; $hash_hash=&Remove_Hash_Element(\%hash,$Down," +DS"); ### print "--REMOVE key and values --->$hash_hash\ +n\n"; push @thre,threads->new(\&pinging,$ESX_Guest_S +erver,$ESX_Server,$ESX_Guest_Comb); return $DOWN; } while($thread = shift (@thre)) { $res_close=$thread->join(); push(@res_c,$res_close); } print "--RES-->> @res_c\n\n"; } sub pinging() { $ESX_Guest=shift; $ESX_Ser=shift; $Thread_Count=shift; my $p = Net::Ping->new(); if ($p->ping($ESX_Guest,1)) { return "UP"; } else { while(1) { print "DOWN STATE\n\n"; sleep(10); $val=&pinging1($ESX_Guest,$ESX_Ser,$Th +read_Count); if($val eq "UP") { print "------------>>>>>>>Thre +ad goes to upstate--$ESX_Guest \n\n"; $UP="$ESX_Guest"."-"."UP"."-"."$ESX_Ser"; $add_hash=&Add_Hash_Element(\%hash,$UP,"US" +); return "UP"; } } } $p->close(); } sub pinging1() { $ESX_Guest1=shift; $ESX_Ser1=shift; $Thread_Count1=shift; my $p = Net::Ping->new(); if ($p->ping($ESX_Guest1,1)) { return "UP"; } else { return "DOWN"; } $p->close(); } sub Remove_Hash_Element() { $hash=shift; $down=shift; $status_value=shift; @res_m=(); @remove_g=(); @add_g=(); while(my( $ESX,$Guest) = each %{$hash} ) { #print "-->>SERVER IS $ESX-->>$Guest\n\n"; ### print "-->>>$down---$status_value\n"; ($Gue_ser_ip,$Status_ip,$Esx_S)=split(/\-/,$down); #### print "-->>SERVER IS $ESX-->>$Esx_S\n\n"; if($ESX eq "$Esx_S") { $res=$hash{$ESX}; @remove_g=split(/\s/,$res); foreach (@remove_g) { if($_ ne "$Gue_ser_ip") { push(@res_m,$_);} } $SERVER_GUEST=join(' ',@res_m); $$hash{$ESX} = $SERVER_GUEST; print "--->>REMOVING ELEMENT IS $Gue_ser_ip--$ +SERVER_GUEST-->>>@res_m\n"; } } }sub Add_Hash_Element() { $hash=shift; $down1=shift; $status_value1=shift; @res_m1=(); @add_g1=(); while(my( $ESX1,$Guest1) = each %{$hash} ) { #print "-->>SERVER IS $ESX-->>$Guest\n\n"; ### print "-->>>$down1---$status_value1\n"; ($Gue_ser_ip1,$Status_ip1,$Esx_S1)=split(/\-/,$down1); #### print "-->>SERVER IS $ESX-->>$Esx_S\n\n"; if($ESX1 eq "$Esx_S1") { $res1=$hash{$ESX1}; @add_g1=split(/\s/,$res1); push(@add_g1,$Gue_ser_ip1); ### print "NAGI--->>ADDING ELEMENT-----is ---$res1 +->@add_g1\n"; $SERVER_GUEST1=join(' ',@add_g1); ### $$hash{$ESX1} = $SERVER_GUEST1; &test_to_add($ESX1,$SERVER_GUEST1); print "-FFFFFFFF->ALLL-->>@add_g1\n---ALL1>>>$SERVER_GUEST1>>\nRES-->> +>$$hash{$ESX1}\n\n"; } } } sub test_to_add() { $v=shift; $g=shift; $hash{$v}=$g; print "--->>>MVOING --$hash{$v}\n"; return; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: update the hash element in side the thread loop
by BrowserUk (Patriarch) on Nov 30, 2009 at 14:09 UTC | |
by nagivreddy93 (Novice) on Nov 30, 2009 at 15:19 UTC |