/[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 606 by dpavlin, Tue Aug 1 13:59:47 2006 UTC revision 738 by dpavlin, Thu Oct 5 14:46:38 2006 UTC
# Line 7  use File::Temp qw/tempdir/; Line 7  use File::Temp qw/tempdir/;
7  use lib './lib';  use lib './lib';
8    
9  use WebPAC::Common 0.02;  use WebPAC::Common 0.02;
10  use WebPAC::Lookup 0.03;  use WebPAC::Parser 0.07;
11  use WebPAC::Input 0.07;  use WebPAC::Input 0.13;
12  use WebPAC::Store 0.03;  use WebPAC::Store 0.11;
13  use WebPAC::Normalize 0.11;  use WebPAC::Normalize 0.22;
14  use WebPAC::Output::TT;  use WebPAC::Output::TT;
15  use WebPAC::Validate;  use WebPAC::Validate 0.06;
16  use WebPAC::Output::MARC;  use WebPAC::Output::MARC;
17  use YAML qw/LoadFile/;  use WebPAC::Config;
18  use Getopt::Long;  use Getopt::Long;
19  use File::Path;  use File::Path;
20  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
# Line 60  path to YAML configuration file Line 60  path to YAML configuration file
60    
61  =item --stats  =item --stats
62    
63  disable indexing and dump statistics about field and subfield  disable indexing, modify_* in configuration and dump statistics about field
64  usage for each input  and subfield usage for each input
65    
66  =item --validate path/to/validation_file  =item --validate path/to/validation_file
67    
68  turn on extra validation of imput records, see L<WebPAC::Validation>  turn on extra validation of imput records, see L<WebPAC::Validation>
69    
 =item --marc-normalize conf/normalize/mapping.pl  
   
 This option specifies normalisation file for MARC creation  
   
 =item --marc-output out/marc/test.marc  
   
 Optional path to output file  
   
70  =item --marc-lint  =item --marc-lint
71    
72  By default turned on if C<--marc-normalize> is used. You can disable lint  By default turned on if normalisation file has C<marc*> directives. You can disable lint
73  messages with C<--no-marc-lint>.  messages with C<--no-marc-lint>.
74    
75  =item --marc-dump  =item --marc-dump
# Line 89  Force dump or input and marc record for Line 81  Force dump or input and marc record for
81  Run databases in parallel (aproximatly same as number of processors in  Run databases in parallel (aproximatly same as number of processors in
82  machine if you want to use full load)  machine if you want to use full load)
83    
84    =item --only-links
85    
86    Create just links
87    
88    =item --merge
89    
90    Create merged index of databases which have links
91    
92  =back  =back
93    
94  =cut  =cut
# Line 97  my $offset; Line 97  my $offset;
97  my $limit;  my $limit;
98    
99  my $clean = 0;  my $clean = 0;
100  my $config = 'conf/config.yml';  my $config_path;
101  my $debug = 0;  my $debug = 0;
102  my $only_filter;  my $only_filter;
103  my $stats = 0;  my $stats = 0;
104  my $validate_path;  my $validate_path;
 my ($marc_normalize, $marc_output);  
105  my $marc_lint = 1;  my $marc_lint = 1;
106  my $marc_dump = 0;  my $marc_dump = 0;
   
107  my $parallel = 0;  my $parallel = 0;
108    my $only_links = 0;
109    my $merge = 0;
110    
111    my $log = _new WebPAC::Common()->_get_logger();
112    
113  GetOptions(  GetOptions(
114          "limit=i" => \$limit,          "limit=i" => \$limit,
# Line 114  GetOptions( Line 116  GetOptions(
116          "clean" => \$clean,          "clean" => \$clean,
117          "one=s" => \$only_filter,          "one=s" => \$only_filter,
118          "only=s" => \$only_filter,          "only=s" => \$only_filter,
119          "config" => \$config,          "config" => \$config_path,
120          "debug+" => \$debug,          "debug+" => \$debug,
121          "stats" => \$stats,          "stats" => \$stats,
122          "validate=s" => \$validate_path,          "validate=s" => \$validate_path,
         "marc-normalize=s" => \$marc_normalize,  
         "marc-output=s" => \$marc_output,  
123          "marc-lint!" => \$marc_lint,          "marc-lint!" => \$marc_lint,
124          "marc-dump!" => \$marc_dump,          "marc-dump!" => \$marc_dump,
125          "parallel=i" => \$parallel,          "parallel=i" => \$parallel,
126            "only-links!" => \$only_links,
127            "merge" => \$merge,
128  );  );
129    
130  $config = LoadFile($config);  my $config = new WebPAC::Config( path => $config_path );
131    
132  print "config = ",dump($config) if ($debug);  #print "config = ",dump($config) if ($debug);
133    
134  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->databases);
135    
 my $log = _new WebPAC::Common()->_get_logger();  
136  $log->info( "-" x 79 );  $log->info( "-" x 79 );
137    
138    
139    my $estcmd_fh;
140    my $estcmd_path = './estcmd-merge.sh';
141    if ($merge) {
142            open($estcmd_fh, '>', $estcmd_path) || $log->logdie("can't open $estcmd_path: $!");
143            print $estcmd_fh 'cd /data/estraier/_node/ || exit 1',$/;
144            print $estcmd_fh 'sudo /etc/init.d/hyperestraier stop',$/;
145            $log->info("created merge batch file $estcmd_path");
146    }
147    
148    
149  my $validate;  my $validate;
150  $validate = new WebPAC::Validate(  $validate = new WebPAC::Validate(
151          path => $validate_path,          path => $validate_path,
152  ) if ($validate_path);  ) if ($validate_path);
153    
154  my $use_indexer = $config->{use_indexer} || 'hyperestraier';  
155    my $use_indexer = $config->use_indexer;
156  if ($stats) {  if ($stats) {
157          $log->debug("option --stats disables update of indexing engine...");          $log->debug("option --stats disables update of indexing engine...");
158          $use_indexer = undef;          $use_indexer = undef;
# Line 147  if ($stats) { Line 160  if ($stats) {
160          $log->info("using $use_indexer indexing engine...");          $log->info("using $use_indexer indexing engine...");
161  }  }
162    
163  # disable indexing when creating marc  # parse normalize files and create source files for lookup and normalization
164  $use_indexer = undef if ($marc_normalize);  
165    my $parser = new WebPAC::Parser( config => $config );
166    
167  my $total_rows = 0;  my $total_rows = 0;
168  my $start_t = time();  my $start_t = time();
169    
170  my @links;  my @links;
 my $indexer;  
171    
172  if ($parallel) {  if ($parallel) {
173          $log->info("Using $parallel processes for speedup");          $log->info("Using $parallel processes for speedup");
174          Proc::Queue::size($parallel);          Proc::Queue::size($parallel);
175  }  }
176    
177  while (my ($database, $db_config) = each %{ $config->{databases} }) {  sub create_ds_config {
178            my ($db_config, $database, $input, $mfn) = @_;
179            my $c = dclone( $db_config );
180            $c->{_} = $database || $log->logconfess("need database");
181            $c->{_mfn} = $mfn || $log->logconfess("need mfn");
182            $c->{input} = $input || $log->logconfess("need input");
183            return $c;
184    }
185    
186    while (my ($database, $db_config) = each %{ $config->databases }) {
187    
188          my ($only_database,$only_input) = split(m#/#, $only_filter) if ($only_filter);          my ($only_database,$only_input) = split(m#/#, $only_filter) if ($only_filter);
189          next if ($only_database && $database !~ m/$only_database/i);          next if ($only_database && $database !~ m/$only_database/i);
# Line 175  while (my ($database, $db_config) = each Line 197  while (my ($database, $db_config) = each
197                  }                  }
198          }          }
199    
200            my $indexer;
201          if ($use_indexer) {          if ($use_indexer) {
202                  my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");  
203                    my $cfg_name = $use_indexer;
204                    $cfg_name =~ s/\-.*$//;
205    
206                    my $indexer_config = $config->get( $cfg_name ) || $log->logdie("can't find '$cfg_name' part in confguration");
207                  $indexer_config->{database} = $database;                  $indexer_config->{database} = $database;
208                  $indexer_config->{clean} = $clean;                  $indexer_config->{clean} = $clean;
209                  $indexer_config->{label} = $db_config->{name};                  $indexer_config->{label} = $db_config->{name};
210    
211                    # force clean if database has links
212                    $indexer_config->{clean} = 1 if ($db_config->{links});
213    
214                  if ($use_indexer eq 'hyperestraier') {                  if ($use_indexer eq 'hyperestraier') {
215    
216                          # open Hyper Estraier database                          # open Hyper Estraier database
217                          use WebPAC::Output::Estraier '0.10';                          use WebPAC::Output::Estraier '0.10';
218                          $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );                          $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
219                                    
220                    } elsif ($use_indexer eq 'hyperestraier-native') {
221    
222                            # open Hyper Estraier database
223                            use WebPAC::Output::EstraierNative;
224                            $indexer = new WebPAC::Output::EstraierNative( %{ $indexer_config } );
225    
226                  } elsif ($use_indexer eq 'kinosearch') {                  } elsif ($use_indexer eq 'kinosearch') {
227    
228                          # open KinoSearch                          # open KinoSearch
# Line 203  while (my ($database, $db_config) = each Line 239  while (my ($database, $db_config) = each
239    
240    
241          #          #
242            # store Hyper Estraier links to other databases
243            #
244            if (ref($db_config->{links}) eq 'ARRAY' && $use_indexer) {
245                    foreach my $link (@{ $db_config->{links} }) {
246                            if ($use_indexer eq 'hyperestraier') {
247                                    if ($merge) {
248                                            print $estcmd_fh 'sudo -u www-data estcmd merge ' . $database . ' ' . $link->{to},$/;
249                                    } else {
250                                            $log->info("saving link $database -> $link->{to} [$link->{credit}]");
251                                            push @links, sub {
252                                                    $log->info("adding link $database -> $link->{to} [$link->{credit}]");
253                                                    $indexer->add_link(
254                                                            from => $database,
255                                                            to => $link->{to},
256                                                            credit => $link->{credit},
257                                                    );
258                                            };
259                                    }
260                            } else {
261                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
262                            }
263                    }
264            }
265            next if ($only_links);
266    
267    
268            #
269          # now WebPAC::Store          # now WebPAC::Store
270          #          #
271          my $abs_path = abs_path($0);          my $abs_path = abs_path($0);
272          $abs_path =~ s#/[^/]*$#/#;          $abs_path =~ s#/[^/]*$#/#;
273    
274          my $db_path = $config->{webpac}->{db_path} . '/' . $database;          my $db_path = $config->webpac('db_path');
275    
276          if ($clean) {          if ($clean) {
277                  $log->info("creating new database '$database' in $db_path");                  $log->info("creating new database '$database' in $db_path");
# Line 217  while (my ($database, $db_config) = each Line 280  while (my ($database, $db_config) = each
280                  $log->info("working on database '$database' in $db_path");                  $log->info("working on database '$database' in $db_path");
281          }          }
282    
283          my $db = new WebPAC::Store(          my $store = new WebPAC::Store(
284                  path => $db_path,                  path => $db_path,
                 database => $database,  
285                  debug => $debug,                  debug => $debug,
286          );          );
287    
# Line 237  while (my ($database, $db_config) = each Line 299  while (my ($database, $db_config) = each
299                  $log->info("database $database doesn't have inputs defined");                  $log->info("database $database doesn't have inputs defined");
300          }          }
301    
         my @supported_inputs = keys %{ $config->{webpac}->{inputs} };  
   
302          foreach my $input (@inputs) {          foreach my $input (@inputs) {
303    
304                  next if ($only_input && ($input->{name} !~ m#$only_input#i && $input->{type} !~ m#$only_input#i));                  my $input_name = $input->{name} || $log->logdie("input without a name isn't valid: ",dump($input));
305    
306                    next if ($only_input && ($input_name !~ m#$only_input#i && $input->{type} !~ m#$only_input#i));
307    
308                  my $type = lc($input->{type});                  my $type = lc($input->{type});
309    
310                  die "I know only how to handle input types ", join(",", @supported_inputs), " not '$type'!\n" unless (grep(/$type/, @supported_inputs));                  die "I know only how to handle input types ", join(",", $config->webpac('inputs') ), " not '$type'!\n" unless (grep(/$type/, $config->webpac('inputs')));
311    
312                  my $lookup;                  my $input_module = $config->webpac('inputs')->{$type};
                 if ($input->{lookup}) {  
                         $lookup = new WebPAC::Lookup(  
                                 lookup_file => $input->{lookup},  
                         );  
                         delete( $input->{lookup} );  
                 }  
313    
314                  my $input_module = $config->{webpac}->{inputs}->{$type};                  my @lookups = $parser->have_lookup_create($database, $input);
315    
316                  $log->info("working on input '$input->{name}' in $input->{path} [type: $input->{type}] using $input_module",                  $log->info("working on input '$input_name' in $input->{path} [type: $input->{type}] using $input_module",
317                          $input->{lookup} ? "lookup '$input->{lookup}'" : ""                          @lookups ? " creating lookups: ".join(", ", @lookups) : ""
318                  );                  );
319    
320                    if ($stats) {
321                            # disable modification of records if --stats is in use
322                            delete($input->{modify_records});
323                            delete($input->{modify_file});
324                    }
325    
326                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
327                          module => $input_module,                          module => $input_module,
328                          encoding => $config->{webpac}->{webpac_encoding},                          encoding => $config->webpac('webpac_encoding'),
329                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
330                          offset => $offset,                          offset => $offset,
                         lookup_coderef => sub {  
                                 my $rec = shift || return;  
                                 $lookup->add( $rec );  
                         },  
331                          recode => $input->{recode},                          recode => $input->{recode},
332                          stats => $stats,                          stats => $stats,
333                          modify_records => $input->{modify_records},                          modify_records => $input->{modify_records},
334                            modify_file => $input->{modify_file},
335                  );                  );
336                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
337    
338                    if (defined( $input->{lookup} )) {
339                            $log->warn("$database/$input_name has depriciated lookup definition, removing it...");
340                            delete( $input->{lookup} );
341                    }
342    
343                    my $lookup_coderef;
344    
345                    if (@lookups) {
346    
347                            my $rules = $parser->lookup_create_rules($database, $input) || $log->logdie("no rules found for $database/$input");
348    
349                            $lookup_coderef = sub {
350                                    my $rec = shift || die "need rec!";
351                                    my $mfn = $rec->{'000'}->[0] || die "need mfn in 000";
352    
353                                    $store->save_row(
354                                            database => $database,
355                                            input => $input_name,
356                                            id => $mfn,
357                                            row => $rec,
358                                    );
359    
360                                    WebPAC::Normalize::data_structure(
361                                            row => $rec,
362                                            rules => $rules,
363                                            config => create_ds_config( $db_config, $database, $input, $mfn ),
364                                    );
365    
366                                    #warn "current lookup: ", dump(WebPAC::Normalize::_get_lookup());
367                            };
368    
369                            WebPAC::Normalize::_set_lookup( undef );
370    
371                            $log->debug("created lookup_coderef using:\n$rules");
372    
373                    };
374    
375                    my $lookup_jar;
376    
377                  my $maxmfn = $input_db->open(                  my $maxmfn = $input_db->open(
378                          path => $input->{path},                          path => $input->{path},
379                          code_page => $input->{encoding},        # database encoding                          code_page => $input->{encoding},        # database encoding
380                            lookup_coderef => $lookup_coderef,
381                            lookup => $lookup_jar,
382                          %{ $input },                          %{ $input },
383                  );                  );
384    
385                  my @norm_array = ref($input->{normalize}) eq 'ARRAY' ?                  my $lookup_data = WebPAC::Normalize::_get_lookup();
                         @{ $input->{normalize} } : ( $input->{normalize} );  
   
                 if ($marc_normalize) {  
                         @norm_array = ( {  
                                 path => $marc_normalize,  
                                 output => $marc_output || 'out/marc/' . $database . '-' . $input->{name} . '.marc',  
                         } );  
                 }  
   
                 foreach my $normalize (@norm_array) {  
   
                         my $normalize_path = $normalize->{path} || $log->logdie("can't find normalize path in config");  
386    
387                          $log->logdie("Found '$normalize_path' as normalization file which isn't supported any more!") unless ( $normalize_path =~ m!\.pl$!i );                  if (defined( $lookup_data->{$database}->{$input_name} )) {
388                            $log->debug("created following lookups: ", dump( $lookup_data ));
389    
390                          my $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";                          foreach my $key (keys %{ $lookup_data->{$database}->{$input_name} }) {
391                                    $store->save_lookup(
392                                            database => $database,
393                                            input => $input_name,
394                                            key => $key,
395                                            data => $lookup_data->{$database}->{$input_name}->{$key},
396                                    );
397                            }
398                    }
399    
400                          $log->info("Using $normalize_path for normalization...");                  my $report_fh;
401                    if ($stats || $validate) {
402                            my $path = "out/report/${database}-${input_name}.txt";
403                            open($report_fh, '>', $path) || $log->logdie("can't open $path: $!");
404    
405                            print $report_fh "Report for database '$database' input '$input_name' records ",
406                                    $offset || 1, "-", $limit || $input->{limit} || $maxmfn, "\n\n";
407                            $log->info("Generating report file $path");
408                    }
409    
410                          my $marc = new WebPAC::Output::MARC(                  my $marc;
411                                  path => $normalize->{output},                  if ($parser->generate_marc( $database, $input_name )) {
412                            $marc = new WebPAC::Output::MARC(
413                                    path => "out/marc/${database}-${input_name}.marc",
414                                  lint => $marc_lint,                                  lint => $marc_lint,
415                                  dump => $marc_dump,                                  dump => $marc_dump,
416                          ) if ($normalize->{output});                          );
417                    }
418    
419                          # reset position in database                  my $rules = $parser->normalize_rules($database,$input_name) || $log->logdie("no normalize rules found for $database/$input_name");
420                          $input_db->seek(1);                  $log->debug("parsed normalize rules:\n$rules");
421    
422                          foreach my $pos ( 0 ... $input_db->size ) {                  # reset position in database
423                    $input_db->seek(1);
424    
425                                  my $row = $input_db->fetch || next;                  # generate name of config key for indexer (strip everything after -)
426                    my $indexer_config = $use_indexer;
427                    $indexer_config =~ s/^(\w+)-?.*$/$1/g if ($indexer_config);
428    
429                    my $lookup_hash;
430                    my $depends = $parser->depends($database,$input_name);
431            
432                    if ($depends) {
433                            $log->debug("$database/$input_name depends on: ", dump($depends)) if ($depends);
434                            $log->logdie("parser->depends didn't return HASH") unless (ref($depends) eq 'HASH');
435    
436                            foreach my $db (keys %$depends) {
437                                    foreach my $i (keys %{$depends->{$db}}) {
438                                            foreach my $k (keys %{$depends->{$db}->{$i}}) {
439                                                    $log->debug("loading lookup $db/$i");
440                                                    $lookup_hash->{$db}->{$i}->{$k} = $store->load_lookup(
441                                                            database => $db,
442                                                            input => $i,
443                                                            key => $k,
444                                                    );
445                                            }
446                                    }
447                            }
448    
449                                  my $mfn = $row->{'000'}->[0];                          $log->debug("lookup_hash = ", dump( $lookup_hash ));
450                    }
451    
                                 if (! $mfn || $mfn !~ m#^\d+$#) {  
                                         $log->warn("record $pos doesn't have valid MFN but '$mfn', using $pos");  
                                         $mfn = $pos;  
                                         push @{ $row->{'000'} }, $pos;  
                                 }  
452    
453                    foreach my $pos ( 0 ... $input_db->size ) {
454    
455                                  if ($validate) {                          my $row = $input_db->fetch || next;
                                         my @errors = $validate->validate_errors( $row );  
                                         $log->error( "MFN $mfn validation errors:\n", join("\n", @errors) ) if (@errors);  
                                 }  
456    
457                                  my $ds_config = dclone($db_config);                          my $mfn = $row->{'000'}->[0];
458    
459                                  # default values -> database key                          if (! $mfn || $mfn !~ m#^\d+$#) {
460                                  $ds_config->{_} = $database;                                  $log->warn("record $pos doesn't have valid MFN but '$mfn', using $pos");
461                                    $mfn = $pos;
462                                    push @{ $row->{'000'} }, $pos;
463                            }
464    
                                 # current mfn  
                                 $ds_config->{_mfn} = $mfn;  
465    
466                                  # attach current input                          if ($validate) {
467                                  $ds_config->{input} = $input;                                  if ( my $errors = $validate->validate_errors( $row, $input_db->dump ) ) {
468                                            $log->error( "MFN $mfn validation error:\n",
469                                                    $validate->report_error( $errors )
470                                            );
471                                    }
472                            }
473    
474                                  my $ds = WebPAC::Normalize::data_structure(                          my $ds = WebPAC::Normalize::data_structure(
475                                          row => $row,                                  row => $row,
476                                          rules => $rules,                                  rules => $rules,
477                                          lookup => $lookup ? $lookup->lookup_hash : undef,                                  lookup => $lookup_hash,
478                                          config => $ds_config,                                  config => create_ds_config( $db_config, $database, $input, $mfn ),
479                                          marc_encoding => 'utf-8',                                  marc_encoding => 'utf-8',
480                                  );                                  load_row_coderef => sub {
481                                            my ($database,$input,$mfn) = @_;
482                                            return $store->load_row(
483                                                    database => $database,
484                                                    input => $input,
485                                                    id => $mfn,
486                                            );
487                                    },
488                            );
489    
490                                  $db->save_ds(                          $log->debug("ds = ",dump($ds));
                                         id => $mfn,  
                                         ds => $ds,  
                                         prefix => $input->{name},  
                                 ) if ($ds && !$stats);  
   
                                 $indexer->add(  
                                         id => $input->{name} . "/" . $mfn,  
                                         ds => $ds,  
                                         type => $config->{$use_indexer}->{type},  
                                 ) if ($indexer && $ds);  
   
                                 if ($marc) {  
                                         my $i = 0;  
   
                                         while (my $fields = WebPAC::Normalize::_get_marc_fields( fetch_next => 1 ) ) {  
                                                 $marc->add(  
                                                         id => $mfn . ( $i ? "/$i" : '' ),  
                                                         fields => $fields,  
                                                         leader => WebPAC::Normalize::marc_leader(),  
                                                         row => $row,  
                                                 );  
                                                 $i++;  
                                         }  
491    
492                                          $log->info("Created $i instances of MFN $mfn\n") if ($i > 1);                          $store->save_ds(
493                                    database => $database,
494                                    input => $input_name,
495                                    id => $mfn,
496                                    ds => $ds,
497                            ) if ($ds && !$stats);
498    
499                            $indexer->add(
500                                    id => "${input_name}/${mfn}",
501                                    ds => $ds,
502                                    type => $config->get($indexer_config)->{type},
503                            ) if ($indexer && $ds);
504    
505                            if ($marc) {
506                                    my $i = 0;
507    
508                                    while (my $fields = WebPAC::Normalize::_get_marc_fields( fetch_next => 1 ) ) {
509                                            $marc->add(
510                                                    id => $mfn . ( $i ? "/$i" : '' ),
511                                                    fields => $fields,
512                                                    leader => WebPAC::Normalize::marc_leader(),
513                                                    row => $row,
514                                            );
515                                            $i++;
516                                  }                                  }
517    
518                                  $total_rows++;                                  $log->info("Created $i instances of MFN $mfn\n") if ($i > 1);
519                          }                          }
520    
521                          $log->info("statistics of fields usage:\n", $input_db->stats) if ($stats);                          $total_rows++;
522                    }
523    
524                          # close MARC file                  if ($validate) {
525                          $marc->finish if ($marc);                          my $errors = $validate->report;
526                            if ($errors) {
527                                    $log->info("validation errors:\n$errors\n" );
528                                    print $report_fh "$errors\n" if ($report_fh);
529                            }
530                    }
531    
532                    if ($stats) {
533                            my $s = $input_db->stats;
534                            $log->info("statistics of fields usage:\n$s");
535                            print $report_fh "Statistics of fields usage:\n$s" if ($report_fh);
536                  }                  }
537    
538                    # close MARC file
539                    $marc->finish if ($marc);
540    
541                    # close report
542                    close($report_fh) if ($report_fh)
543    
544          }          }
545    
546          eval { $indexer->finish } if ($indexer && $indexer->can('finish'));          eval { $indexer->finish } if ($indexer && $indexer->can('finish'));
# Line 397  while (my ($database, $db_config) = each Line 552  while (my ($database, $db_config) = each
552                  )                  )
553          );          );
554    
         #  
         # add Hyper Estraier links to other databases  
         #  
         if (ref($db_config->{links}) eq 'ARRAY' && $use_indexer) {  
                 foreach my $link (@{ $db_config->{links} }) {  
                         if ($use_indexer eq 'hyperestraier') {  
                                 $log->info("saving link $database -> $link->{to} [$link->{credit}]");  
                                 push @links, {  
                                         from => $database,  
                                         to => $link->{to},  
                                         credit => $link->{credit},  
                                 };  
                         } else {  
                                 $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");  
                         }  
                 }  
         }  
555    
556          # end forked process          # end forked process
557          if ($parallel) {          if ($parallel) {
# Line 429  if ($parallel) { Line 567  if ($parallel) {
567          $log->info("all parallel processes finished");          $log->info("all parallel processes finished");
568  }  }
569    
570  foreach my $link (@links) {  #
571          $log->info("adding link $link->{from} -> $link->{to} [$link->{credit}]");  # handle links or merge after indexing
572          $indexer->add_link( %{ $link } );  #
573    
574    if ($merge) {
575            print $estcmd_fh 'sudo /etc/init.d/hyperestraier start',$/;
576            close($estcmd_fh);
577            chmod 0700, $estcmd_path || $log->warn("can't chmod 0700 $estcmd_path: $!");
578            system $estcmd_path;
579    } else {
580            foreach my $link (@links) {
581                    $log->logdie("coderef in link ", Dumper($link), " is ", ref($link), " and not CODE") unless (ref($link) eq 'CODE');
582                    $link->();
583            }
584  }  }
   

Legend:
Removed from v.606  
changed lines
  Added in v.738

  ViewVC Help
Powered by ViewVC 1.1.26