Changeset 38
Legend:
- Unmodified
- Added
- Removed
-
shepherd
r36 r38 23 23 # 0.2.7 : Changed online file structure 24 24 # 0.2.8 : Integrated reconciler 25 # 26 # have a type, and query_grabbers() and query_postprocessors() returning 27 # lists of each for easy iteration. 25 28 26 29 BEGIN { *CORE::GLOBAL::die = \&my_die; } … … 55 58 chdir($CWD); 56 59 57 my $GRABBER_DIR = "$CWD/grabbers";58 my $POSTPROCESSOR_DIR = "$CWD/postprocessors";59 60 my $ARCHIVE_DIR = "$CWD/archive"; 60 61 … … 112 113 my $debug = 1; 113 114 my $recdebug = 0; 114 my $ grabbers = { };115 my $components = { }; 115 116 my $gscore; 116 my $preferred; # obsolete but may still exist in shepherd.conf117 117 my $region; 118 118 my $channels; … … 122 122 123 123 # postprocessing 124 my $postprocessors = { };125 124 my $title_translation_table = { }; 126 125 my $langs = [ 'en' ]; … … 132 131 my $insufficient_grabber_data = 0; 133 132 133 # OBSOLETE: will be removed 134 my $grabbers; 135 my $postprocessors; 136 my $preferred; 137 134 138 # --------------------------------------------------------------------------- 135 139 # --- Setup … … 253 257 $used_grabbers++; 254 258 255 $ grabbers->{$grabber}->{lastdata} = time;256 $ grabbers->{$grabber}->{laststatus} = "unknown";259 $components->{$grabber}->{lastdata} = time; 260 $components->{$grabber}->{laststatus} = "unknown"; 257 261 258 262 printf "\nSHEPHERD: Using grabber: (%d) %s\n", $used_grabbers, $grabber; 259 263 260 my $output = "$ GRABBER_DIR/$grabber/output.xmltv";261 262 my $comm = "$ GRABBER_DIR/$grabber/$grabber " .264 my $output = "$CWD/grabbers/$grabber/output.xmltv"; 265 266 my $comm = "$CWD/grabbers/$grabber/$grabber " . 263 267 "--region $region " . 264 268 "--channels_file $channels_file " . … … 277 281 } else { 278 282 print "SHEPHERD: Excuting command: $comm\n"; 279 chdir "$ GRABBER_DIR/$grabber/";283 chdir "$CWD/grabbers/$grabber/"; 280 284 system($comm); 281 285 chdir $CWD; … … 284 288 # soak up the data we just collected 285 289 &soak_up_data($grabber, $output, "grabber"); 286 $ grabbers->{$grabber}->{laststatus} = $plugin_data->{$grabber}->{laststatus};290 $components->{$grabber}->{laststatus} = $plugin_data->{$grabber}->{laststatus}; 287 291 288 292 # check to see if we have all the data we want … … 311 315 unless (defined $gscore) 312 316 { 313 foreach ( keys %$grabbers)317 foreach (query_grabbers()) 314 318 { 315 unless ($ grabbers->{$_}->{disabled})319 unless ($components->{$_}->{disabled}) 316 320 { 317 321 $gscore->{$_} = 0; … … 375 379 # print "$grabber vs $ch:$day: " . ($result ? "OK" : "no") . "\n"; 376 380 } 377 $niceness = $ grabbers->{$grabber}->{config}->{niceness};381 $niceness = $components->{$grabber}->{config}->{niceness}; 378 382 unless ($niceness) 379 383 { … … 382 386 $niceness = 5; 383 387 } 384 $granularity = $ grabbers->{$grabber}->{config}->{granularity};388 $granularity = $components->{$grabber}->{config}->{granularity}; 385 389 unless (defined $granularity) 386 390 { … … 406 410 my ($grabber, $ch) = @_; 407 411 408 my $channels_supported = $ grabbers->{$grabber}->{config}->{channels};412 my $channels_supported = $components->{$grabber}->{config}->{channels}; 409 413 unless (defined $channels_supported) 410 414 { … … 430 434 my ($grabber, $day) = @_; 431 435 432 my $days_supported = $ grabbers->{$grabber}->{config}->{max_days};436 my $days_supported = $components->{$grabber}->{config}->{max_days}; 433 437 unless ($days_supported) 434 438 { … … 674 678 675 679 printf "Preference for whose data we prefer as follows:\n"; 676 foreach my $proggy (sort { $ grabbers->{$a}->{order} <=> $grabbers->{$b}->{order} } keys %$grabbers) {677 if ((!$ grabbers->{$proggy}->{disabled}) && ($plugin_data->{$proggy}) && ($plugin_data->{$proggy}->{valid})) {680 foreach my $proggy (sort { $components->{$a}->{order} <=> $components->{$b}->{order} } query_grabbers()) { 681 if ((!$components->{$proggy}->{disabled}) && ($plugin_data->{$proggy}) && ($plugin_data->{$proggy}->{valid})) { 678 682 $grabber_order[$num_grabbers] = $proggy; 679 683 my $orig_prog = $plugin_data->{$proggy}->{xmltv}->[3]; … … 1045 1049 printf "\nPostprocessing stage:\n"; 1046 1050 1047 foreach my $postprocessor (sort { $ postprocessors->{$a} <=> $postprocessors->{$b} } keys %$postprocessors) {1048 next if ($ postprocessors->{$postprocessor}->{disabled});1049 1050 $ postprocessors->{$postprocessor}->{lastdata} = time;1051 $ postprocessors->{$postprocessor}->{laststatus} = "unknown";1051 foreach my $postprocessor (sort { $components->{$a} <=> $components->{$b} } query_postprocessors()) { 1052 next if ($components->{$postprocessor}->{disabled}); 1053 1054 $components->{$postprocessor}->{lastdata} = time; 1055 $components->{$postprocessor}->{laststatus} = "unknown"; 1052 1056 1053 1057 printf "\nSHEPHERD: Using postprocessor: %s\n",$postprocessor; 1054 1058 1055 my $output = "$ POSTPROCESSOR_DIR/$postprocessor/output.xmltv";1056 my $comm = "$ POSTPROCESSOR_DIR/$postprocessor/$postprocessor " .1059 my $output = "$CWD/postprocessors/$postprocessor/output.xmltv"; 1060 my $comm = "$CWD/postprocessors/$postprocessor/$postprocessor " . 1057 1061 "--region $region " . 1058 1062 "--channels_file $channels_file " . … … 1065 1069 print "SHEPHERD: Excuting command: $comm\n"; 1066 1070 1067 chdir "$ POSTPROCESSOR_DIR/$postprocessor/";1071 chdir "$CWD/postprocessors/$postprocessor/"; 1068 1072 system($comm); 1069 1073 chdir $CWD; … … 1087 1091 $need_more_data = &analyze_plugin_data($postprocessor_ok_threshold_percent, "POSTPROCESSOR"); 1088 1092 1089 $ postprocessors->{$postprocessor}->{laststatus} = $plugin_data->{$postprocessor}->{laststatus};1093 $components->{$postprocessor}->{laststatus} = $plugin_data->{$postprocessor}->{laststatus}; 1090 1094 1091 1095 if (($need_more_data) && (!$insufficient_grabber_data)) { … … 1093 1097 printf "SHEPHERD: XML data from postprocessor %s rejected, using XML from previous stage\n",$postprocessor; 1094 1098 1095 if (defined $ postprocessors->{$postprocessor}->{conescutive_failures}) {1096 $ postprocessors->{$postprocessor}->{conescutive_failures}++;1099 if (defined $components->{$postprocessor}->{conescutive_failures}) { 1100 $components->{$postprocessor}->{conescutive_failures}++; 1097 1101 } else { 1098 $ postprocessors->{$postprocessor}->{conescutive_failures} = 1;1102 $components->{$postprocessor}->{conescutive_failures} = 1; 1099 1103 } 1100 1104 printf "SHEPHERD: Postprocessor \"%s\" has now failed %d times in a row. %d more and it will be automatically disabled.\n", 1101 1105 $postprocessor, 1102 $ postprocessors->{$postprocessor}->{conescutive_failures},1103 ($postprocessor_disable_failure_threshold - $ postprocessors->{$postprocessor}->{conescutive_failures});1104 1105 if ($ postprocessors->{$postprocessor}->{conescutive_failures} >= $postprocessor_disable_failure_threshold) {1106 $components->{$postprocessor}->{conescutive_failures}, 1107 ($postprocessor_disable_failure_threshold - $components->{$postprocessor}->{conescutive_failures}); 1108 1109 if ($components->{$postprocessor}->{conescutive_failures} >= $postprocessor_disable_failure_threshold) { 1106 1110 printf "SHEPHERD: Disabling Postprocessor \"%s\".\n",$postprocessor; 1107 $ postprocessors->{$postprocessor}->{disabled} = 1;1111 $components->{$postprocessor}->{disabled} = 1; 1108 1112 } 1109 1113 } else { … … 1111 1115 printf "SHEPHERD: accepting output from postprocessor %s, feeding it into next stage\n",$postprocessor; 1112 1116 $input_postprocess_file = $output; 1113 delete $ postprocessors->{$postprocessor}->{conescutive_failures} if (defined $postprocessors->{$postprocessor}->{conescutive_failures});1117 delete $components->{$postprocessor}->{conescutive_failures} if (defined $components->{$postprocessor}->{conescutive_failures}); 1114 1118 } 1115 1119 } … … 1164 1168 return if (!$data); 1165 1169 1166 my %glist = %$grabbers; 1167 my %plist = %$postprocessors; 1170 my %clist = %$components; 1168 1171 while ($data =~ /(.*):(.*):(.*)/g) 1169 1172 { 1170 1173 my ($proggy, $latestversion, $progtype) = ($1,$2,$3); 1171 1174 update_component($proggy, $latestversion, $progtype); 1172 delete $glist{$proggy} if ($progtype eq "grabber"); 1173 delete $plist{$proggy} if ($progtype eq "postprocessor"); 1174 } 1175 1176 # work out what grabbers disappeared (if any) 1177 foreach (keys %glist) { 1178 unless ($grabbers->{$_}->{disabled}) { 1179 print "\nDeleted grabber: $_.\n"; 1180 disable($_,"grabber"); 1175 delete $clist{$proggy}; 1176 } 1177 1178 # work out what components disappeared (if any) 1179 foreach (keys %clist) { 1180 unless ($components->{$_}->{disabled}) { 1181 print "\nDeleted component: $_.\n"; 1182 disable($_); 1181 1183 $made_changes = 1; 1182 1184 } 1183 1185 } 1184 1186 1185 # work out what postprocessors disappeared (if any)1186 foreach (keys %plist) {1187 unless ($postprocessors->{$_}->{disabled}) {1188 print "\nDeleted Postprocessor: $_.\n";1189 disable($_,"postprocessor");1190 $made_changes = 1;1191 }1192 }1193 1187 } 1194 1188 … … 1198 1192 1199 1193 # handle new installs.. 1200 if (($proggy eq $progname) && ($progtype eq "shepherd")) { 1201 # shepherd itself.. 1194 if ($progtype eq "shepherd") { 1202 1195 if(! -e "$CWD/$progname") { 1203 1196 print "Missing: $CWD/$progname\n"; … … 1205 1198 return; 1206 1199 } 1207 } els if ($progtype eq "grabber"){1208 if (!defined $ grabbers->{$proggy} or ! -e "$GRABBER_DIR/$proggy/$proggy") {1209 print "New grabber: $proggy.\n";1200 } else { 1201 if (!defined $components->{$proggy} or ! -e ($progtype . "s/$proggy/$proggy")) { 1202 print "New $progtype: $proggy.\n"; 1210 1203 install($proggy, $latestversion, $progtype); 1211 1204 return; 1212 1205 } 1213 print "Warning: grabber $proggy disabled by config file.\n" if ($grabbers->{$proggy}->{disabled}); 1214 } elsif ($progtype eq "postprocessor") { 1215 if (!defined $postprocessors->{$proggy} or ! -e "$POSTPROCESSOR_DIR/$proggy/$proggy") { 1216 print "New postprocessor: $proggy.\n"; 1217 install($proggy, $latestversion, $progtype); 1218 return; 1219 } 1220 print "Warning: postprocessor $proggy disabled by config file.\n" if ($postprocessors->{$proggy}->{disabled}); 1206 if ($components->{$proggy}->{disabled}) { 1207 print "Warning: grabber $proggy disabled by config file.\n"; 1208 } 1221 1209 } 1222 1210 1223 1211 # upgrade/downgrades 1224 1212 my $ver; 1225 if ($progtype eq "grabber") { 1226 $ver = ($proggy eq $progname ? $version : $grabbers->{$proggy}->{ver}); 1227 } elsif ($progtype eq "postprocessor") { 1228 $ver = ($proggy eq $progname ? $version : $postprocessors->{$proggy}->{ver}); 1229 } elsif (($proggy eq $progname) && ($progtype eq "shepherd")) { 1213 if ($progtype eq "shepherd") { 1230 1214 $ver = $version; 1231 } else {1232 print "Warning: unknown type of programme: prog '$proggy' progtype '$progtype' not installed.\n"; 1233 return;1234 } 1215 } 1216 else { 1217 $ver = $components->{$proggy}->{ver}; 1218 } 1235 1219 1236 1220 my $result = versioncmp($ver, $latestversion); … … 1260 1244 my $ver = "unknown"; 1261 1245 1262 if ( ($proggy eq $progname) && ($progtype eq "shepherd")) {1246 if ($progtype eq "shepherd") { 1263 1247 $ver = $version; 1264 } elsif ($progtype eq "grabber") {1265 $rdir = "grabbers";1266 $ldir = "$GRABBER_DIR/$proggy";1267 $ver = $grabbers->{$proggy}->{ver} if ((defined $grabbers->{$proggy}) && $grabbers->{$proggy}->{ver});1268 -d $GRABBER_DIR or mkdir $GRABBER_DIR or die "Cannot create directory $GRABBER_DIR: $!";1269 } elsif ($progtype eq "postprocessor") {1270 $rdir = "postprocessors";1271 $ldir = "$POSTPROCESSOR_DIR/$proggy";1272 $ver = $postprocessors->{$proggy}->{ver} if ((defined $postprocessors->{$proggy}) && $postprocessors->{$proggy}->{ver});1273 -d $POSTPROCESSOR_DIR or mkdir $POSTPROCESSOR_DIR or die "Cannot create directory $POSTPROCESSOR_DIR: $!";1274 1248 } else { 1275 print "Warning: unknown type of programme: prog '$proggy' progtype '$progtype' not installed.\n"; 1276 return; 1249 $rdir = $progtype . "s"; 1250 $ldir = "$CWD/$progtype" . "s/$proggy"; 1251 $ver = $components->{$proggy}->{ver} if ((defined $components->{$proggy}) && $components->{$proggy}->{ver}); 1252 -d ("$CWD/$progtype" . "s") or mkdir ("$CWD/$progtype" . "s") or die "Cannot create directory $CWD/$progtype" . "s: $!"; 1277 1253 } 1278 1254 -d $ldir or mkdir $ldir or die "Cannot create directory $ldir: $!"; … … 1304 1280 1305 1281 # if the update was for shepherd itself, restart it 1306 if ( ($proggy eq $progname) && ($progtype eq "shepherd")) {1282 if ($progtype eq "shepherd") { 1307 1283 print "\n*** Restarting ***\n\n"; 1308 1284 exec("$ldir/$proggy"); … … 1313 1289 my $result = test_proggy($ldir,"$ldir/$proggy"); 1314 1290 1315 if ($progtype eq "grabber") { 1316 $grabbers->{$proggy}->{ver} = $latestversion; 1317 $grabbers->{$proggy}->{ready} = $result; 1318 $grabbers->{$proggy}->{laststatus} = sprintf "updated to %s on %s", $latestversion, (strftime "%a%d%b%y",localtime(time)); 1319 } elsif ($progtype eq "postprocessor") { 1320 $postprocessors->{$proggy}->{ver} = $latestversion; 1321 $postprocessors->{$proggy}->{ready} = $result; 1322 $postprocessors->{$proggy}->{laststatus} = sprintf "updated to %s on %s", $latestversion, (strftime "%a%d%b%y",localtime(time)); 1323 } 1291 $components->{$proggy}->{ver} = $latestversion; 1292 $components->{$proggy}->{ready} = $result; 1293 $components->{$proggy}->{laststatus} = sprintf "updated to %s on %s", $latestversion, (strftime "%a%d%b%y",localtime(time)); 1324 1294 1325 1295 $made_changes = 1; … … 1347 1317 1348 1318 # confirm it exists first 1349 if ( (!$grabbers->{$proggy}) && (!$postprocessors->{$proggy})) {1350 printf "No such grabber/postprocessor: \"%s\".\n",$proggy;1319 if (!$components->{$proggy}) { 1320 printf "No such component: \"%s\".\n",$proggy; 1351 1321 return; 1352 1322 } 1353 1323 print "Enabling $proggy.\n"; 1354 1324 1355 if ($grabbers->{$proggy}) { 1356 delete $grabbers->{$proggy}->{disabled}; 1357 $grabbers->{$proggy}->{laststatus} = sprintf "enabled on %s, not run yet",(strftime "%a%d%b%y", localtime(time)); 1358 } elsif ($postprocessors->{$proggy}) { 1359 delete $postprocessors->{$proggy}->{disabled}; 1360 $postprocessors->{$proggy}->{laststatus} = sprintf "enabled on %s, not run yet",(strftime "%a%d%b%y", localtime(time)); 1361 } 1325 delete $components->{$proggy}->{disabled}; 1326 $components->{$proggy}->{laststatus} = sprintf "enabled on %s, not run yet",(strftime "%a%d%b%y", localtime(time)); 1362 1327 $made_changes = 1; 1363 1328 } … … 1368 1333 1369 1334 # confirm it exists first 1370 if ( (!$grabbers->{$proggy}) && (!$postprocessors->{$proggy})) {1371 printf "No such grabber/postprocessor: \"%s\".\n",$proggy;1335 if (!$components->{$proggy}) { 1336 printf "No such component: \"%s\".\n",$proggy; 1372 1337 return; 1373 1338 } 1374 1339 print "Disabling $proggy.\n"; 1375 1340 1376 if ($grabbers->{$proggy}) { 1377 $grabbers->{$proggy}->{disabled} = 1; 1378 $grabbers->{$proggy}->{laststatus} = sprintf "manually disabled on %s",(strftime "%a%d%b%y", localtime(time)); 1379 } elsif ($postprocessors->{$proggy}) { 1380 $postprocessors->{$proggy}->{disabled} = 1; 1381 $postprocessors->{$proggy}->{laststatus} = sprintf "manually disabled on %s",(strftime "%a%d%b%y", localtime(time)); 1382 } 1341 $components->{$proggy}->{disabled} = 1; 1342 $components->{$proggy}->{laststatus} = sprintf "manually disabled on %s",(strftime "%a%d%b%y", localtime(time)); 1383 1343 $made_changes = 1; 1384 1344 } … … 1390 1350 1391 1351 # reset current order to zero 1392 foreach my $proggy ( keys %$grabbers) {1393 $ grabbers->{$proggy}->{order} = 0;1352 foreach my $proggy (query_grabbers()) { 1353 $components->{$proggy}->{order} = 0; 1394 1354 } 1395 1355 … … 1398 1358 if ($pref_order) { 1399 1359 foreach my $proggy (split(/,/,$pref_order)) { 1400 if (defined $ grabbers->{$proggy}) {1401 $ grabbers->{$proggy}->{order} = $order_num;1360 if (defined $components->{$proggy} and $components->{$proggy}->{type} eq 'grabber') { 1361 $components->{$proggy}->{order} = $order_num; 1402 1362 $order_num++; 1403 1363 } … … 1406 1366 1407 1367 # set order of any grabbers not specified in a random manner 1408 foreach my $proggy (sort keys %$grabbers) {1409 if ((!defined $ grabbers->{$proggy}->{order}) || ($grabbers->{$proggy}->{order} == 0)) {1410 $ grabbers->{$proggy}->{order} = $order_num+int(rand(1000));1368 foreach my $proggy (sort query_grabbers()) { 1369 if ((!defined $components->{$proggy}->{order}) || ($components->{$proggy}->{order} == 0)) { 1370 $components->{$proggy}->{order} = $order_num+int(rand(1000)); 1411 1371 } 1412 1372 } … … 1415 1375 print "Grabber order set as follows:\n" unless $quiet; 1416 1376 $order_num = 0; 1417 foreach my $proggy (sort { $ grabbers->{$a}->{order} <=> $grabbers->{$b}->{order} } keys %$grabbers) {1377 foreach my $proggy (sort { $components->{$a}->{order} <=> $components->{$b}->{order} } query_grabbers()) { 1418 1378 $order_num++; 1419 $ grabbers->{$proggy}->{order} = $order_num;1420 printf " #%d. %s%s\n",$ grabbers->{$proggy}->{order},$proggy,($grabbers->{$proggy}->{disabled} ? " [disabled]" : "") unless $quiet;1379 $components->{$proggy}->{order} = $order_num; 1380 printf " #%d. %s%s\n",$components->{$proggy}->{order},$proggy,($components->{$proggy}->{disabled} ? " [disabled]" : "") unless $quiet; 1421 1381 } 1422 1382 … … 1427 1387 { 1428 1388 my $result; 1429 foreach my $proggy (keys %$grabbers) { 1430 $result = test_proggy("$GRABBER_DIR/$proggy","$GRABBER_DIR/$proggy/$proggy"); 1431 printf "Grabber %s: %s\n",$proggy,($result ? "OK" : "Failed"); 1432 if (!$result ne !$grabbers->{$proggy}->{ready}) { 1433 $grabbers->{$proggy}->{ready} = $result; 1389 foreach my $proggy (keys %$components) { 1390 my $progtype = $components->{$proggy}->{type}; 1391 $result = test_proggy("$CWD/$progtype" . "s/$proggy", "$CWD/$progtype" . "s/$proggy/$proggy"); 1392 printf "%s %s: %s\n",ucfirst($progtype), $proggy,($result ? "OK" : "Failed"); 1393 if (!$result ne !$components->{$proggy}->{ready}) { 1394 $components->{$proggy}->{ready} = $result; 1434 1395 $made_changes = 1; 1435 1396 } 1436 1397 } 1437 1438 foreach my $proggy (keys %$postprocessors) { 1439 $result = test_proggy("$POSTPROCESSOR_DIR/$proggy","$POSTPROCESSOR_DIR/$proggy/$proggy"); 1440 printf "Postprocessor %s: %s\n",$proggy,($result ? "OK" : "Failed"); 1441 if (!$result ne !$postprocessors->{$proggy}->{ready}) { 1442 $postprocessors->{$proggy}->{ready} = $result; 1443 $made_changes = 1; 1444 } 1445 } 1398 } 1399 # ----------------------------------------- 1400 # Subs: Utilities 1401 # ----------------------------------------- 1402 # 1403 1404 sub query_grabbers 1405 { 1406 return query_component_type('grabber'); 1407 } 1408 1409 sub query_postprocessors 1410 { 1411 return query_component_type('postprocessor'); 1412 } 1413 1414 sub query_component_type 1415 { 1416 my $progtype = shift; 1417 1418 my @ret = (); 1419 foreach (keys %$components) 1420 { 1421 push (@ret, $_) if ($components->{$_}->{type} eq $progtype); 1422 } 1423 return @ret; 1446 1424 } 1447 1425 … … 1454 1432 read_file($config_file, 'configuration'); 1455 1433 1434 # TEMPORARY! Convert old $grabbers/$postprocessors config file to 1435 # new $components format. 1436 if (defined $grabbers or defined $postprocessors) 1437 { 1438 foreach (keys %$grabbers) { 1439 $grabbers->{$_}->{type} = 'grabber'; 1440 } 1441 foreach (keys %$postprocessors) { 1442 $postprocessors->{$_}->{type} = 'postprocessor'; 1443 } 1444 $components = { %$grabbers, %$postprocessors }; 1445 $grabbers = undef; 1446 $postprocessors = undef; 1447 } 1448 1449 1456 1450 # if we are updating from a previous rev of shepherd.conf we may not 1457 1451 # have any 'order' fields set .. check here 1458 1452 my $found_order = 1; 1459 foreach ( keys %$grabbers)1460 { 1461 $found_order = 0 if (!defined $ grabbers->{$_}->{order});1453 foreach (query_grabbers()) 1454 { 1455 $found_order = 0 if (!defined $components->{$_}->{order}); 1462 1456 } 1463 1457 if (($found_order == 0) && (!$opt->{setorder})) … … 1511 1505 open(CONF, ">$config_file") or die "cannot write to $config_file: $!"; 1512 1506 print CONF Data::Dumper->Dump( 1513 [$region, $pref_order, $mirror_site, $ grabbers, $postprocessors,$title_translation_table ],1514 ["region", "pref_order", "mirror_site", " grabbers", "postprocessors", "title_translation_table" ]);1507 [$region, $pref_order, $mirror_site, $components, $title_translation_table ], 1508 ["region", "pref_order", "mirror_site", "components", "title_translation_table" ]); 1515 1509 close CONF; 1516 1510 print "\nUpdated configuration file $config_file.\n" if ($debug); … … 1706 1700 print " Grabber Version Enabled Ready Last Run Status\n" . 1707 1701 " ----------------- ------- ------- ----- ---------- ---------------------------\n"; 1708 foreach (sort { $ grabbers->{$a}->{order} <=> $grabbers->{$b}->{order} } keys %$grabbers) {1709 my $h = $ grabbers->{$_};1702 foreach (sort { $components->{$a}->{order} <=> $components->{$b}->{order} } query_grabbers()) { 1703 my $h = $components->{$_}; 1710 1704 printf " %-16s %8s %4s %6s %11s %s\n", 1711 1705 "$h->{order}. $_", … … 1720 1714 print " Postprocessor Version Enabled Ready Last Run Status\n" . 1721 1715 " ----------------- ------- ------- ----- ---------- ---------------------------\n"; 1722 foreach (sort { $ postprocessors->{$a} <=> $postprocessors->{$b} } keys %$postprocessors) {1723 my $h = $ postprocessors->{$_};1716 foreach (sort { $components->{$a} <=> $components->{$b} } query_postprocessors()) { 1717 my $h = $components->{$_}; 1724 1718 printf " %-16s %8s %4s %6s %11s %s\n", 1725 1719 $_,
