On Oct 31, 8:53 am, [EMAIL PROTECTED] (Praveena Vittal) wrote: > Hi All, > > I have writen a library for a particular function.I could not written > the hash reference fron the subroutine "process_files".Can any one > please help in this regard? > > Also i have pasted the file below > package Filter_Rule; > > use StorADE::Tele_Decoder; > use database_common_function; > use DBI; > use Audit; > use TutorialConfig; > #use tools; > > if(!open(LOG,">>/var/opt/SUNWTeleAlarm/LOG/Filter_Rule.log")){ > print "Unable to open Log files :: > /var/opt/SUNWTeleAlarm/LOG/Filter_Rule.log "; > > } > > ## Database Connection > > $dbh = DBI->connect( > 'DBI:mysql:telealarm:localhost;mysql_socket=/tmp/telealarm.sock', > 'telealarm', > 'telealarm', > ) || die "Database connection not made: $DBI::errstr"; > if($DBI::errstr){ > $audit->warning("mysql error",data=>$dbh); > print LOG "MySQL database connection error \n"; > print "Database connection error \n";}else{ > > print LOG "Successfully connected database [MySQL] \n"; > # print "Sucessfully connect Database of telealarm \n"; > > } > > my $audit = new Audit; > my %hash_event_list1; > > sub main_validation > { > our $filter = shift; > our $rule = shift; > %hash_event_list1 =(); > > ## get Test Event Directory details from conf file > > my $RSconf = new TutorialConfig; > $RSconf->read('/opt/SUNWTeleAlarm/conf/Telealarm.conf'); > my $test_event_dir = $RSconf->get('TeleAlarm.Test_event_directory'); > > print LOG "Test Event Directory :: $test_event_dir \n"; > print "Filter :: $filter \n"; > print "Rule :: $rule \n"; > print LOG "Filter :: $filter \n"; > print LOG "Rule :: $rule \n"; > $filter = parser($filter); > $rule = parser($rule); > print LOG "Parser Rule :: $rule \n"; > print LOG "Parser filter :: $filter \n"; > > if($filter && $rule){ > > #my $test_event_dir = "/var/opt/SUNWTeleAlarm/Test_event_directory"; > my $match_flt1 = process_files($test_event_dir); > print LOG eval $match_flt1; > print LOG "Return value from :: $match_flt1 \n"; > print LOG %match_flt1; > > foreach my $item (keys %$match_flt1){ > print LOG "Hash :: $match_flt1{$item} \n"; > } > return $match_flt; > > } > > # return($filter,$rule);} > > sub parser > { > my $arg = shift(); > if($arg =~ /_/){ > # print $' ; > return $'; > }else{ > return 0; > } > > } > > sub process_files { > my($FILE) = @_; > print LOG "file & PAth :: $FILE \n"; > $extension = "email"; > if (-d $FILE) { > opendir(O, $FILE); > my @L = readdir(O); closedir(O); > foreach my $f (sort @L) { > next if ($f !~ /\.$extension$/); > # print "\nMESSAGE '$f'\n\n"; > my $f2 = $f; > $f2 = substr($f2,2) if (substr($f2,0,2) eq "./"); > my $test = process_file("$FILE/$f2"); > #return @rs_flt; > # print LOG "test print \n"; > # foreach my $k1 (keys %$test){ > # print LOG "hash keys :: $test->{$k1} \n"; > # } > } > return $test; > # return "true"; > } elsif (-f $FILE) { > #print "MESSAGE $FILE\n"; > #print "Inside process_files ::\MESSAGE \$FILE :: $FILE \n"; > #my @rs_flt = process_file($FILE); > &process_file($FILE); > #return @rs_flt; > #return @rs_flt; > > } else { > my $ERR = "Invalid file $FILE \n"; > return $ERR; > } > # return $test; > > } > > sub process_file{ > my @event_text; > my($file) = @_; > print LOG "File list :: $file \n"; > %hash_event_list1 = (); > $hash_event_list1{'file_name'} = $file; > my @event_rs = StorADE::Tele_Decoder::open_event_file($file); > if([EMAIL PROTECTED]){ > print "No content found, Empty file for :$file \n"; > }else{ > > ## Search subject location from email event > my ($match,$address) = StorADE::Tele_Decoder::subject_event(@event_rs); > print "Match :: $match Address :: $address \n"; > my ($match_count,$address_count); > > undef $match_count; > undef $address_count; > $match_count = length($match); > $address_count = length($address); > > if($match_count == 0 && $address_count == 0){ > print "Error : Subject missin in the email event \n"; > }else{ > > ## find the locationis and evenr serial in the email subject > my ($location_id,$event_serial) = > verify_locationid_email_event($address); > > ## Remove the space from locationid and event serial > $location_id =~ s/^\s+|\s+$//g; > $event_serial =~ s/^\s+|\s+$//g; > print "Locationid :: $location_id \n"; > print "Event Serial :: $event_serial \n"; > $hash_event_list1{'location_id'} = $location_id; > $hash_event_list1{'event_serial'} = $event_serial; > > ## Locationid and event seiral verify in deviceinfo table > > my $result = > check_locationid_deviceinfo($location_id,$event_serial); > if($result eq "true"){ > > ### DB in deviceinfo table verification for product,serial and > managedOps > > my($product,$serial,$managedOps) = > search_product($hash_event_list1{'location_id'},$hash_event_list1{'event_serial'}); > > print LOG "\$product :: $product \n"; > print LOG "\$serial :: $serial \n"; > print LOG "\$managedOps :: $managedOps \n"; > # hash values > $hash_event_list1{'deviceinfo'} = "Yes"; > $hash_event_list1{'product'} = $product; > $hash_event_list1{'serial'} = $serial; > $hash_event_list1{'managedOps'} = $managedOps; > > # search event text > @event_text = StorADE::Tele_Decoder::event_text(@event_rs); > # print LOG "Event Text :: @event_text \n"; > > if([EMAIL PROTECTED]){ > print LOG "Bad email event,event text missing \n"; > }else{ > > ## hash values > $hash_event_list1{'event_text'} = @event_text; > > my @match = filter_process(@event_text); > print LOG "Matched filter reult :: @match \n"; > if(@match[0] == 0){ > print LOG " No filter matched \n"; > }else{ > print LOG "Filter matched \n"; > ## Rules verification > ## hash values for filter > $hash_event_list1{'filter'}= @match[0]; > # my @dbrule_match = > database_common_function::select_local_rule(@match); > my %dbrule_results = rule_process($rule); > ## hash value entery for > run_position,filters_matched,actionable,severity,fault_group,continuation_period > > print LOG " Local results table filters matched : > $dbrule_results{filters_matched} \n"; > my @split_rules_filter = split(/\+/, > $dbrule_results{filters_matched}); > my $flag = 0; > foreach my $item (@split_rules_filter){ > if($hash_event_list1{'filter'} == $item){ > print LOG " Matched filter in split rule > table. :; $item \n"; > $flag = 1; > $hash_event_list1{'filters_matched'} = $item; > } > print LOG "Split rules :: $item \n"; > } > > if($flag == 1){ > $hash_event_list1{'rule_number'} = $rule; > $hash_event_list1{'run_position'} = > $dbrule_results{run_position}; > # $hash_event_list1{'filters_matched'} = > $dbrule_results{filters_matched}; > $hash_event_list1{'actionable'} = $dbrule_results{actionable}; > $hash_event_list1{'severity'} = $dbrule_results{severity}; > $hash_event_list1{'fault_group'} = $dbrule_results{fault_group}; > $hash_event_list1{'continuation_period'} = > $dbrule_results{continuation_period}; > } > return \%hash_event_list1; > } > } > > }else{ > > print LOG " LocationID and Event serial missed into > deviceinfo table \n"; > } > } > } > # return @match; > #exit;} > > sub search_product > { > my $Loc_id = shift; > my $event_ser = shift; > chomp($Loc_id); > chomp($event_ser); > my $sql_dev = qq{ SELECT product,serial,managedOps FROM > deviceinfo where ((locationID = "$Loc_id") and (eventSerial > ="$event_ser"))}; > my $sth_dev = $dbh->prepare( $sql_dev ); > sleep 1; > $sth_dev->execute(); > if($DBI::errstr){ > $audit->warning("mysql error",data=>$dbh); > } > > my ($v1,$v2,$v3); > $sth_dev->bind_columns( undef, \$v1, \$v2, \$v3); > > while($sth_dev->fetch()){ > delete $hash_event_list1{'product'}; > $hash_event_list1{'product'} = $v1; > $hash_event_list1{'serial'} = $v2; > $hash_event_list1{'managedOps'} = $v3; > print LOG "Device Info Table => product :: $v1 \n serial :: > $v2 \n managedOps :: $v3 \n"; > > } > > return($v1,$v2,$v3); > > } > > sub check_locationid_deviceinfo > { > > my $location_id = shift; > my $event_serial = shift; > > if(($location_id) && ($event_serial)){ > > my $sql = qq{ select locationID,eventSerial from deviceinfo where > (locationID="$location_id") && (eventSerial="$event_serial")}; > my $sth1 = $dbh->prepare( $sql ); > $sth1->execute(); > > if($DBI::errstr){ > # $audit->warning("mysql error",data=>$dbh); > print LOG "DB ERROR : $DBI::errstr \n"; > print "DB ERROR : $DBI::errstr \n"; > } > my ($lid,$lid1); > $sth1->bind_columns( undef, \$lid,\$lid1); > > while( my $ref=$sth1->fetch() ) { > $lid = $lid; > $lid1 = $lid1; > } > # print LOG "Db Location id :: $lid \n DB Serial :: > $lid1 \n"; > > if((!$location_id eq $lid) && (!$event_serial eq $lid1)) > { > print LOG "locationid and event serial not matched > in deviceinfo \n"; > return false; > > }else{ > print LOG "DB Location id :: $lid \n DB Serial :: > $lid1 \n"; > print "DB Location id :: $lid \n DB Serial :: $lid1 > \n"; > return true; > > } > }else{ > > print LOG "LocationID and event serial missing for > deviceinfo Verification \n"; > } > > } > > sub verify_locationid_email_event > { > my $address = shift; > my ($location_id,$event_serial) = > StorADE::Tele_Decoder::Split_locationid($address); > return($location_id,$event_serial); > > } > > sub filter_process > { > print LOG "Filter Process :: $filter \n"; > print LOG "Rule Process :: $rule \n"; > my @event_text = @_; > # print LOG "Event Text test :: @event_text \n"; > > @dbreturn = database_common_function::select_local_filter($filter); > print LOG "Test return values \n"; > print LOG "Return filter :: @dbreturn \n"; > %filter = @dbreturn; > my @match_flt = (); > > for my $key1 (sort keys %filter){ > > my $ser = $filter{$key1}; > print LOG "Pass search filter :: $ser \n key :: $key1 > \n";#exit; > my $rs = > database_common_function::search_filter($ser,@event_text); > > if($rs == 1) > { > push(@match_flt,$key1) > } > #print "Matched Filters :: @match_flt \n"; > } > print LOG "Matched Filters :: @match_flt \n"; > if(@match_flt){ > return @match_flt; > }else{ > return 0; > } > > } > > sub rule_process > { > > ## select value from local_rules tables based on the rule number > > my $rule_no = shift; > # print "Rule number : $rule_no \n"; > > my %rule_rs = database_common_function::select_local_rule($rule_no); > > print LOG "Run Position :: $rule_rs{run_position} \n "; > print LOG "Filter Matched :: $rule_rs{filters_matched} \n"; > print LOG "Actionable :: $rule_rs{actionable} \n"; > print LOG "Severity :: $rule_rs{severity} \n"; > print LOG "Fault Group :: $rule_rs{fault_group} \n"; > print LOG " continuation_period ::$rule_rs{continuation_period} \n"; > > return %rule_rs; > #return %dbreturn; > > } > > 1; > > Regards, > Praveena
Very long code .... did't had time to go through it. But looking at your last return statment ( return %rule_rs ) ... instead of that " return \%rule_rs " -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/