#!/usr/local/bin/perl use DBI; use Data::Dumper; use strict; use POSIX; my $USER = ''; my $PASS = ''; my $HOST = ''; my $SID = ''; my $PROCESS_STAGE = 'SNMP Collection'; my $PROCESS_ID = 'Test PID 2'; my $PROCESS_TS = '2006-03-28-09-38-59-161895'; my $dbh = DBI->connect("dbi:Oracle:host=$HOST;sid=$SID", $USER,$PASS); my $sth = $dbh->prepare("SELECT a.process_id,a.process_ts,a.process_stage,b.ekl_set,b.mapping FROM sys_ekl_ipt_001 a, cor_ekl_set_dfn b WHERE a.ekl_set = b.ekl_set"); $sth->execute; my ( $PATH_PREFIX, $PARENT_MAPPING, $PARENT_ELEMENT, $RULE, $DATA_NATURE, $TABLE_SUFFIX, $ELEMENT, $COLUMN_NAME, $PRIORITY_GLOBAL, $PRIORITY_LOCAL, $regex ); my ($PROCESS_ID,$PROCESS_TS,$EKL_SET,$MAPPING,$PROCESS_STAGE); my (%DATA,%OUTPUT,%TABLE,%leaves); #Data Structures my %REGEX; while (($PROCESS_ID,$PROCESS_TS,$PROCESS_STAGE,$EKL_SET,$MAPPING) = $sth->fetchrow_array) { my $sth2 = $dbh->prepare("SELECT a.mapping, a.path_prefix,a.parent_mapping, a.parent_element,a.rule,a.data_nature,a.table_suffix, b.element,b.column_name,b.priority_local,b.priority_global FROM cor_ekl_map a, cor_ekl_map_dfn b WHERE a.mapping = '$MAPPING' and a.mapping = b.mapping"); $sth2->execute; while ( ($MAPPING,$PATH_PREFIX,$PARENT_MAPPING,$PARENT_ELEMENT,$RULE,$DATA_NATURE,$TABLE_SUFFIX, $ELEMENT,$COLUMN_NAME,$PRIORITY_LOCAL,$PRIORITY_GLOBAL) = $sth2->fetchrow_array) { my $table_name = join '_',('dat',$DATA_NATURE,$TABLE_SUFFIX); my $dth = $dbh->prepare("SELECT regex FROM cor_ekl_rul WHERE rule = '$RULE'"); $dth->execute; $regex = $dth->fetchrow_array; open (OUTFILE,">REGEX/$RULE"); print OUTFILE $regex; close (OUTFILE); $DATA {$MAPPING}{path_prefix} = $PATH_PREFIX; $REGEX {$MAPPING} = $RULE; $DATA {$MAPPING}{parent_element} = $PARENT_ELEMENT if defined ($PARENT_ELEMENT); $DATA {$MAPPING}{parent_mapping} = $PARENT_MAPPING if defined ($PARENT_MAPPING); $DATA {$MAPPING}{process_id} = $PROCESS_ID if defined ($PROCESS_ID); $DATA {$MAPPING}{process_ts} = $PROCESS_TS if defined ($PROCESS_TS); $DATA {$MAPPING}{process_stage} = $PROCESS_STAGE if defined ($PROCESS_STAGE); $DATA {$MAPPING}{table_name}= $table_name; push @{$DATA {$MAPPING}{element}}, $ELEMENT if defined ($ELEMENT); push @{$DATA {$MAPPING}{priority_local}},$PRIORITY_LOCAL if defined ($PRIORITY_LOCAL); push @{$DATA {$MAPPING}{priority_global}},$PRIORITY_GLOBAL if defined ($PRIORITY_GLOBAL); push @{$DATA {$MAPPING}{column_name}},$COLUMN_NAME if defined ($COLUMN_NAME); my $primarykeys = $dbh->prepare ("SELECT column_name,column_type FROM cor_dat_col WHERE data_nature = '$DATA_NATURE' AND table_suffix = '$TABLE_SUFFIX'"); $primarykeys->execute; my @pks = ('process_id','process_ts','process_stage'); my @columns; my ($column,$type); while (($column,$type) = $primarykeys->fetchrow) { push (@pks ,$column) if $type eq 'pk'; push (@columns,$column); } $TABLE{$table_name}{numofkeys} = scalar(@pks); my $TEST = $DATA{$PARENT_MAPPING}; my $child_mapping = $MAPPING; if ($PARENT_MAPPING ne '{N/A}') { if (!defined($TEST)) { my $sth3 = $dbh->prepare("SELECT a.mapping, a.path_prefix,a.parent_mapping, a.parent_element,a.rule,a.data_nature,a.table_suffix, b.element,b.column_name,b.priority_local,b.priority_global FROM cor_ekl_map a, cor_ekl_map_dfn b WHERE a.mapping = '$PARENT_MAPPING' and a.mapping = b.mapping"); $sth3->execute; while(($MAPPING,$PATH_PREFIX,$PARENT_MAPPING,$PARENT_ELEMENT,$RULE,$DATA_NATURE,$TABLE_SUFFIX, $ELEMENT,$COLUMN_NAME,$PRIORITY_LOCAL,$PRIORITY_GLOBAL) = $sth3->fetchrow_array) { my $dth = $dbh->prepare("SELECT regex FROM cor_ekl_rul WHERE rule = '$RULE'"); $dth->execute; $regex = $dth->fetchrow_array; open (OUTFILE,">REGEX/$RULE"); print OUTFILE $regex; close (OUTFILE); $DATA {$MAPPING}{path_prefix} = $PATH_PREFIX; $REGEX{$MAPPING} = $RULE; $DATA {$MAPPING}{parent_element} = $PARENT_ELEMENT; $DATA {$MAPPING}{parent_mapping} = $PARENT_MAPPING; $DATA {$MAPPING}{process_id} = $PROCESS_ID; $DATA {$MAPPING}{process_ts} = $PROCESS_TS; $DATA{$MAPPING}{process_stage} = $PROCESS_STAGE; $DATA {$MAPPING}{table_name} = join '_',('dat',$DATA_NATURE,$TABLE_SUFFIX); push @{$DATA {$MAPPING}{element}}, $ELEMENT; push @{$DATA {$MAPPING}{priority_local}}, $PRIORITY_LOCAL; push @{$DATA {$MAPPING}{priority_global}},$PRIORITY_GLOBAL; push @{$DATA {$MAPPING}{column_name}},$COLUMN_NAME; push @{$DATA {$MAPPING}{child_mappings}},$child_mapping; } } else { my $is_there = 0; foreach my $c (@{$DATA{$PARENT_MAPPING}{child_mappings}}) { if ($c eq $child_mapping) { $is_there = 1; } } if ($is_there == 0) { push @{$DATA{$PARENT_MAPPING}{child_mappings}},$child_mapping; $is_there = 0;} } } undef($dth); } } undef($sth); $dbh->disconnect; undef ($dbh); print Dumper %DATA; foreach $MAPPING (keys %DATA) { my $one_fn = $DATA{$MAPPING}{path_prefix}; if ($one_fn ne '{N/A}') { $PROCESS_ID = $DATA{$MAPPING}{process_id}; $PROCESS_TS = $DATA{$MAPPING}{process_ts}; $PROCESS_STAGE = $DATA{$MAPPING}{process_stage}; opendir(TWO, "/shaw/data/link/$PROCESS_ID/$PROCESS_TS/$PROCESS_STAGE/$one_fn") || die "Cannot open /shaw/data/link/$PROCESS_ID/$PROCESS_TS/$PROCESS_STAGE/$one_fn: $!"; my @two = grep(!/^\.\.?$/, readdir TWO); foreach my $two_fn (@two) { opendir(THREE, "/shaw/data/link/$PROCESS_ID/$PROCESS_TS/$PROCESS_STAGE/$one_fn/$two_fn") || die "$!"; my @three = grep (!/^\.\.?$/, readdir THREE); my $three_fn = less(@three); my $TIMESTAMP = $three_fn; my $DEVICE = $two_fn; my $file = "/shaw/data/link/$PROCESS_ID/$PROCESS_TS/$PROCESS_STAGE/$one_fn/$DEVICE/$TIMESTAMP"; open (INFILE,"<$file") || die "Cannot open $file: $!"; print "\n $file \n"; my $input =(); read INFILE, my $input,-s $file; close(INFILE); my $pmap = $DATA{$MAPPING}{parent_mapping}; if ($pmap eq '{N/A}') { #print "starting regex\n"; print $REGEX{$MAPPING}; open reg,"