/[webpac2]/trunk/run.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/run.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 977 by dpavlin, Sat Nov 3 12:34:26 2007 UTC revision 1160 by dpavlin, Sat Apr 25 14:17:27 2009 UTC
# Line 23  use Data::Dump qw/dump/; Line 23  use Data::Dump qw/dump/;
23  use Storable qw/dclone/;  use Storable qw/dclone/;
24  use Pod::Usage qw/pod2usage/;  use Pod::Usage qw/pod2usage/;
25    
 use Proc::Queue size => 1;  
26  use POSIX ":sys_wait_h"; # imports WNOHANG  use POSIX ":sys_wait_h"; # imports WNOHANG
27    
28  =head1 NAME  =head1 NAME
# Line 153  pod2usage(-verbose => 2) if ($help); Line 152  pod2usage(-verbose => 2) if ($help);
152    
153  my $config = new WebPAC::Config( path => $config_path );  my $config = new WebPAC::Config( path => $config_path );
154    
155    WebPAC::Normalize::_debug( $debug - 1 ) if $debug > 1;
156    
157  #print "config = ",dump($config) if ($debug);  #print "config = ",dump($config) if ($debug);
158    
159  die "no databases in config file!\n" unless ($config->databases);  die "no databases in config file!\n" unless ($config->databases);
# Line 205  my $start_t = time(); Line 206  my $start_t = time();
206  my @links;  my @links;
207    
208  if ($parallel) {  if ($parallel) {
209            eval 'use Proc::Queue size => 1;';
210            die $@ if $@;
211          $log->info("Using $parallel processes for speedup");          $log->info("Using $parallel processes for speedup");
212          Proc::Queue::size($parallel);          Proc::Queue::size($parallel);
213  }  }
# Line 326  foreach my $database ( sort keys %{ $con Line 329  foreach my $database ( sort keys %{ $con
329    
330                  # add database to arugemnts for output filter                  # add database to arugemnts for output filter
331                  $output->{database} = $database;                  $output->{database} = $database;
332                    $output->{clean} = $clean;
333    
334                  $log->debug("calling $module->new(",dump( $output ),")");                  $log->debug("calling $module->new(",dump( $output ),")");
335                  my $out = new $module->new( $output );                  my $out = new $module->new( $output );
336                  $out->init;                  if ( $out->init ) {
337                            push @output_modules, $out;
338                  push @output_modules, $out;                  } else {
339                            $log->warn("SKIPPED $module");
340                    }
341          }          }
342    
343    
# Line 344  foreach my $database ( sort keys %{ $con Line 350  foreach my $database ( sort keys %{ $con
350                  $log->info("database $database doesn't have inputs defined");                  $log->info("database $database doesn't have inputs defined");
351          } );          } );
352    
353            if ( -e 'out/debug' ) { # FIXME flag?
354                    my $out;
355                    foreach my $i ( @inputs ) {
356                            warn dump( $i );
357                            next unless defined $i->{normalize};
358                            warn dump( $i->{normalize} );
359                            foreach my $normalize ( @{ $i->{normalize} } ) {
360                                    my $path = $normalize->{path};
361                                    $out .= qq/\n##\n## $path\n##\n\n/;
362                                    $out .= read_file( $path );
363                            }
364                    }
365                    my $all = "out/debug/all-normalize.pl";
366                    write_file( $all, $out );
367                    warn "### all normalize for this input saved to: $all";
368            };
369    
370          foreach my $input (@inputs) {          foreach my $input (@inputs) {
371    
372                  my $input_name = $input->{name} || $log->logdie("input without a name isn't valid: ",dump($input));                  my $input_name = $input->{name} || $log->logdie("input without a name isn't valid: ",dump($input));
373    
374                    if ( $input->{skip} ) {
375                            $log->info("skip $input_name");
376                            next;
377                    }
378    
379                  next if ($only_input && ($input_name !~ m#$only_input#i && $input->{type} !~ m#$only_input#i));                  next if ($only_input && ($input_name !~ m#$only_input#i && $input->{type} !~ m#$only_input#i));
380    
381                  my $type = lc($input->{type});                  my $type = lc($input->{type});
# Line 365  foreach my $database ( sort keys %{ $con Line 393  foreach my $database ( sort keys %{ $con
393    
394                  my @lookups = $parser->have_lookup_create($database, $input);                  my @lookups = $parser->have_lookup_create($database, $input);
395    
396                  $log->info("working on input '$input_name' in $input->{path} [type: $input->{type}] using $input_module",                  $log->info("working on $database/$input_name with $input_module on $input->{path}",
397                          @lookups ? " creating lookups: ".join(", ", @lookups) : ""                          @lookups ? " creating lookups: ".join(", ", @lookups) : ""
398                  );                  );
399    
# Line 377  foreach my $database ( sort keys %{ $con Line 405  foreach my $database ( sort keys %{ $con
405    
406                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
407                          module => $input_module,                          module => $input_module,
                         encoding => $config->webpac('webpac_encoding'),  
408                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
409                          offset => $offset,                          offset => $offset,
410                          recode => $input->{recode},                          recode => $input->{recode},
# Line 422  foreach my $database ( sort keys %{ $con Line 449  foreach my $database ( sort keys %{ $con
449    
450                  my $maxmfn = $input_db->open(                  my $maxmfn = $input_db->open(
451                          path => $input->{path},                          path => $input->{path},
452                          code_page => $input->{encoding},        # database encoding                          input_encoding => $input->{encoding},   # database encoding
453                          lookup_coderef => $lookup_coderef,                          lookup_coderef => $lookup_coderef,
454                          lookup => $lookup_jar,                          lookup => $lookup_jar,
455                          %{ $input },                          %{ $input },
# Line 485  foreach my $database ( sort keys %{ $con Line 512  foreach my $database ( sort keys %{ $con
512                          );                          );
513                  }                  }
514    
515                  my $rules = $parser->normalize_rules($database,$input_name) || $log->logdie("no normalize rules found for $database/$input_name");                  my $rules = $parser->normalize_rules($database,$input_name);
516                    $log->logwarn("no normalize rules for $database/$input_name") unless $rules;
517    
518                  $log->debug("parsed normalize rules:\n$rules");                  $log->debug("parsed normalize rules:\n$rules");
519    
520                  # reset position in database                  # reset position in database
# Line 555  foreach my $database ( sort keys %{ $con Line 584  foreach my $database ( sort keys %{ $con
584                                  next;   # validation doesn't create any output                                  next;   # validation doesn't create any output
585                          }                          }
586    
587                          my $ds = WebPAC::Normalize::data_structure(                          if ($rules) {
588                                  row => $row,  
589                                  rules => $rules,                                  my $ds = WebPAC::Normalize::data_structure(
590                                  lookup => $lookup_hash,                                          row => $row,
591                                  config => create_ds_config( $db_config, $database, $input, $mfn ),                                          rules => $rules,
592                                  marc_encoding => 'utf-8',                                          lookup => $lookup_hash,
593                                  load_row_coderef => sub {                                          config => create_ds_config( $db_config, $database, $input, $mfn ),
594                                          my ($database,$input,$mfn) = @_;                                          marc_encoding => 'utf-8',
595  warn "### load_row($database,$input,$mfn) from data_structure\n";                                          load_row_coderef => sub {
596                                          return $store->load_row(                                                  my ($database,$input,$mfn) = @_;
597    #warn "### load_row($database,$input,$mfn) from data_structure\n";
598                                                    return $store->load_row(
599                                                            database => $database,
600                                                            input => $input,
601                                                            id => $mfn,
602                                                    );
603                                            },
604                                    );
605    
606                                    $log->debug("ds = ", sub { dump($ds) });
607    
608                                    if ( $ds ) {
609    
610                                            $store->save_ds(
611                                                  database => $database,                                                  database => $database,
612                                                  input => $input,                                                  input => $input_name,
613                                                  id => $mfn,                                                  id => $mfn,
614                                          );                                                  ds => $ds,
615                                  },                                          ) if !$stats;
                         );  
   
                         $log->debug("ds = ", sub { dump($ds) });  
616    
617                          if ( $ds ) {                                          $indexer->add(
618                                                    id => "${input_name}/${mfn}",
619                                                    ds => $ds,
620                                                    type => $config->get($indexer_config)->{type},
621                                            ) if $indexer;
622    
623                                  $store->save_ds(                                          foreach my $out ( @output_modules ) {
624                                          database => $database,                                                  $out->add( $mfn, $ds ) if $out->can('add');
625                                          input => $input_name,                                          }
                                         id => $mfn,  
                                         ds => $ds,  
                                 ) if !$stats;  
   
                                 $indexer->add(  
                                         id => "${input_name}/${mfn}",  
                                         ds => $ds,  
                                         type => $config->get($indexer_config)->{type},  
                                 ) if $indexer;  
626    
627                                  foreach my $out ( @output_modules ) {                                  } else {
628                                          $out->add( $mfn, $ds ) if $out->can('add');                                          $log->warn("record $pos didn't produce any output after normalization rules!") unless $marc;
629                                  }                                  }
   
                         } else {  
                                 $log->warn("record $pos didn't produce any output after normalization rules!") unless $marc;  
630                          }                          }
631    
632                          if ($marc) {                          if ($marc) {
633                                  my $i = 0;                                  my $i = 0;
634    
635                                  while (my $fields = WebPAC::Normalize::_get_marc_fields( fetch_next => 1 ) ) {                                  while (my $fields = WebPAC::Normalize::MARC::_get_marc_fields( fetch_next => 1 ) ) {
636                                          $marc->add(                                          $marc->add(
637                                                  id => $mfn . ( $i ? "/$i" : '' ),                                                  id => $mfn . ( $i ? "/$i" : '' ),
638                                                  fields => $fields,                                                  fields => $fields,
639                                                  leader => WebPAC::Normalize::_get_marc_leader(),                                                  leader => WebPAC::Normalize::MARC::_get_marc_leader(),
640                                                  row => $row,                                                  row => $row,
641                                          );                                          );
642                                          $i++;                                          $i++;
# Line 641  warn "### load_row($database,$input,$mfn Line 673  warn "### load_row($database,$input,$mfn
673                  close($report_fh) if ($report_fh);                  close($report_fh) if ($report_fh);
674          }          }
675    
676          eval { $indexer->finish } if ($indexer && $indexer->can('finish'));          $indexer->finish if $indexer && $indexer->can('finish');
677    
678          foreach my $out ( @output_modules ) {          foreach my $out ( @output_modules ) {
679                  $out->finish if $out->can('finish');                  $out->finish if $out->can('finish');

Legend:
Removed from v.977  
changed lines
  Added in v.1160

  ViewVC Help
Powered by ViewVC 1.1.26