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

Legend:
Removed from v.509  
changed lines
  Added in v.731

  ViewVC Help
Powered by ViewVC 1.1.26