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_se­rial'});
>
>      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_p­eriod
>
>                        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/


Reply via email to