diff --git a/engine/src/main/java/org/archive/crawler/migrate/H1toH3.map b/engine/src/main/java/org/archive/crawler/migrate/H1toH3.map index 915fc746..373b907e 100644 --- a/engine/src/main/java/org/archive/crawler/migrate/H1toH3.map +++ b/engine/src/main/java/org/archive/crawler/migrate/H1toH3.map @@ -1,121 +1,121 @@ -metadata.jobName //meta/name default -metadata.description //meta/description Default Profile -metadata.operator //meta/operator Admin -# //meta/date 20091006215050 -# //controller/*[@name="settings-directory"] settings -loggerModule.path //controller/*[@name="logs-path"] logs -crawlController.checkpointsDir //controller/*[@name="checkpoints-path"] checkpoints -bdb.dir //controller/*[@name="state-path"] state -crawlController.scratchDir //controller/*[@name="scratch-path"] scratch -crawlLimiter.maxBytesDownload //controller/*[@name="max-bytes-download"] 0 -crawlLimiter.maxDocumentsDownload //controller/*[@name="max-document-download"] 0 -crawlLimiter.maxTimeSeconds //controller/*[@name="max-time-sec"] 0 -crawlController.maxToeThreads //controller/*[@name="max-toe-threads"] 50 -crawlController.recorderOutBufferBytes //controller/*[@name="recorder-out-buffer-bytes"] 4096 -crawlController.recorderInBufferBytes //controller/*[@name="recorder-in-buffer-bytes"] 65536 -bdb.cachePercent //controller/*[@name="bdb-cache-percent"] 0 -! //controller/*[@name="scope"]/*[@name="enabled"] true -seeds.textSource.path //controller/*[@name="scope"]/*[@name="seedsfile"] seeds.txt -# //controller/*[@name="scope"]/*[@name="reread-seeds-on-config"] true -?scope.rules[1].decision //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="decision"] ACCEPT -?scope.rules[1].seedsAsSurtPrefixes //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="seeds-as-surt-prefixes"] true -?scope.rules[1].alsoCheckVia //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="also-check-via"] false -# //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="rebuild-on-reconfig"] true -?scope.rules[2].maxHops //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfTooManyHops"]/*[@name="max-hops"] 20 -?scope.rules[3].maxTransHops //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfTranscluded"]/*[@name="max-trans-hops"] 3 -?scope.rules[3].maxSpeculativeHops //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfTranscluded"]/*[@name="max-speculative-hops"] 1 -?scope.rules[6].maxRepetitions //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfPathological"]/*[@name="max-repetitions"] 2 -?scope.rules[7].maxPathDepth //controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfTooManyPathSegs"]/*[@name="max-path-depth"] 20 -*metadata.userAgentTemplate //controller/*[@name="http-headers"]/*[@name="user-agent"] Mozilla/5.0 (compatible; heritrix/@VERSION@ +PROJECT_URL_HERE) -metadata.operatorFrom //controller/*[@name="http-headers"]/*[@name="from"] CONTACT_EMAIL_ADDRESS_HERE - //controller/*[@name="robots-honoring-policy"]/*[@name="type"] classic -//controller/*[@name="robots-honoring-policy"]/*[@name="masquerade"] false -//controller/*[@name="frontier"]/*[@name="delay-factor"] 4.0 -//controller/*[@name="frontier"]/*[@name="max-delay-ms"] 20000 -//controller/*[@name="frontier"]/*[@name="min-delay-ms"] 2000 -//controller/*[@name="frontier"]/*[@name="respect-crawl-delay-up-to-secs"] 300 -//controller/*[@name="frontier"]/*[@name="max-retries"] 30 -//controller/*[@name="frontier"]/*[@name="retry-delay-seconds"] 900 -//controller/*[@name="frontier"]/*[@name="preference-embed-hops"] 1 -//controller/*[@name="frontier"]/*[@name="total-bandwidth-usage-KB-sec"] 0 -//controller/*[@name="frontier"]/*[@name="max-per-host-bandwidth-usage-KB-sec"] 0 -//controller/*[@name="frontier"]/*[@name="queue-assignment-policy"] org.archive.crawler.frontier.HostnameQueueAssignmentPolicy -//controller/*[@name="frontier"]/*[@name="pause-at-start"] false -//controller/*[@name="frontier"]/*[@name="pause-at-finish"] false -//controller/*[@name="frontier"]/*[@name="source-tag-seeds"] false -//controller/*[@name="frontier"]/*[@name="recovery-log-enabled"] true -//controller/*[@name="frontier"]/*[@name="hold-queues"] true -//controller/*[@name="frontier"]/*[@name="balance-replenish-amount"] 3000 -//controller/*[@name="frontier"]/*[@name="error-penalty-amount"] 100 -//controller/*[@name="frontier"]/*[@name="queue-total-budget"] -1 -//controller/*[@name="frontier"]/*[@name="cost-policy"] org.archive.crawler.frontier.ZeroCostAssignmentPolicy -//controller/*[@name="frontier"]/*[@name="snooze-deactivate-ms"] 300000 -//controller/*[@name="frontier"]/*[@name="target-ready-backlog"] 50 -//controller/*[@name="frontier"]/*[@name="uri-included-structure"] org.archive.crawler.util.BdbUriUniqFilter -//controller/*[@name="frontier"]/*[@name="dump-pending-at-close"] false -//controller/*[@name="uri-canonicalization-rules"]/*[@name="Lowercase"]/*[@name="enabled"] true -//controller/*[@name="uri-canonicalization-rules"]/*[@name="Userinfo"]/*[@name="enabled"] true -//controller/*[@name="uri-canonicalization-rules"]/*[@name="WWW[0-9]*"]/*[@name="enabled"] true -//controller/*[@name="uri-canonicalization-rules"]/*[@name="SessionIDs"]/*[@name="enabled"] true -//controller/*[@name="uri-canonicalization-rules"]/*[@name="SessionCFIDs"]/*[@name="enabled"] true -//controller/*[@name="uri-canonicalization-rules"]/*[@name="QueryStrPrefix"]/*[@name="enabled"] true -//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="enabled"] true -//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="override-logger"] false -//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="recheck-scope"] true -//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="block-all"] false -//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="enabled"] true -//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="ip-validity-duration-seconds"] 21600 -//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="robot-validity-duration-seconds"] 86400 -//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="calculate-robots-only"] false -//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="enabled"] true -//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="accept-non-dns-resolves"] false -//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="digest-content"] true -//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="digest-algorithm"] sha1 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="enabled"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="timeout-seconds"] 1200 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="sotimeout-ms"] 20000 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="fetch-bandwidth"] 0 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="max-length-bytes"] 0 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="ignore-cookies"] false -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="use-bdb-for-cookies"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="trust-level"] open -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="default-encoding"] ISO-8859-1 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="digest-content"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="digest-algorithm"] sha1 -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-if-modified-since"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-if-none-match"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-connection-close"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-referer"] true -//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-range"] false -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTTP"]/*[@name="enabled"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="enabled"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-javascript"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="treat-frames-as-embed-links"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="ignore-form-action-urls"] false -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-only-form-gets"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-value-attributes"] true -//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="ignore-unexpected-html"] true -? //controller/*[@name="extract-processors"]/*[@name="ExtractorCSS"]/*[@name="enabled"] true -? //controller/*[@name="extract-processors"]/*[@name="ExtractorJS"]/*[@name="enabled"] true -? //controller/*[@name="extract-processors"]/*[@name="ExtractorSWF"]/*[@name="enabled"] true -? //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="enabled"] true -warcWriter.compress //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="compress"] true -warcWriter.prefix //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="prefix"] IAH -warcWriter.suffix //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="suffix"] ${HOSTNAME} -warcWriter.maxFileSizeBytes //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="max-size-bytes"] 100000000 -? warcWriter.storePaths.(list) //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="path"]/string arcs -warcWriter.poolMaxActive //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="pool-max-active"] 5 -warcWriter.poolMaxWaitMs //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="pool-max-wait"] 300000 -warcWriter.maxTotalBytesToWrite //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="total-bytes-to-write"] 0 -warcWriter.skipIdenticalDigests //controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="skip-identical-digests"] false -? //controller/*[@name="post-processors"]/*[@name="Updater"]/*[@name="enabled"] true -+ //controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="enabled"] true -+ linkScoper //controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="override-logger"] false -candidates.seedsRedirectNewSeeds //controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="seed-redirects-new-seed"] true -preparer.preferenceDepthHops //controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="preference-depth-hops"] -1 -? //controller/*[@name="post-processors"]/*[@name="Scheduler"]/*[@name="enabled"] true -statisticsTracker.intervalSeconds //controller/*[@name="loggers"]/*[@name="crawl-statistics"]/*[@name="interval-seconds"] 20 -? //controller/*[@name="checkpoint-copy-bdbje-logs"] true -? //controller/*[@name="recover-retain-failures"] false -? //controller/*[@name="recover-scope-includes"] true -? //controller/*[@name="recover-scope-enqueues"] true \ No newline at end of file +metadata.jobName|//meta/name|default +metadata.description|//meta/description|Default Profile +metadata.operator|//meta/operator|Admin +$na|//meta/date|20091006215050 +$na|//controller/*[@name="settings-directory"]|settings +loggerModule.path|//controller/*[@name="logs-path"]|logs +crawlController.checkpointsDir|//controller/*[@name="checkpoints-path"]|checkpoints +bdb.dir|//controller/*[@name="state-path"]|state +crawlController.scratchDir|//controller/*[@name="scratch-path"]|scratch +crawlLimiter.maxBytesDownload|//controller/*[@name="max-bytes-download"]|0 +crawlLimiter.maxDocumentsDownload|//controller/*[@name="max-document-download"]|0 +crawlLimiter.maxTimeSeconds|//controller/*[@name="max-time-sec"]|0 +crawlController.maxToeThreads|//controller/*[@name="max-toe-threads"]|50 +crawlController.recorderOutBufferBytes|//controller/*[@name="recorder-out-buffer-bytes"]|4096 +crawlController.recorderInBufferBytes|//controller/*[@name="recorder-in-buffer-bytes"]|65536 +bdb.cachePercent|//controller/*[@name="bdb-cache-percent"]|0 +$na|//controller/*[@name="scope"]/*[@name="enabled"]|true +seeds.textSource.path|//controller/*[@name="scope"]/*[@name="seedsfile"]|seeds.txt +$na|//controller/*[@name="scope"]/*[@name="reread-seeds-on-config"]|true +scope.rules[1].decision|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="decision"]|ACCEPT +scope.rules[1].seedsAsSurtPrefixes|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="seeds-as-surt-prefixes"]|true +scope.rules[1].alsoCheckVia|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="also-check-via"]|false +$na|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfSurtPrefixed"]/*[@name="rebuild-on-reconfig"]|true +scope.rules[2].maxHops|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfTooManyHops"]/*[@name="max-hops"]|20 +scope.rules[3].maxTransHops|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfTranscluded"]/*[@name="max-trans-hops"]|3 +scope.rules[3].maxSpeculativeHops|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="acceptIfTranscluded"]/*[@name="max-speculative-hops"]|1 +scope.rules[6].maxRepetitions|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfPathological"]/*[@name="max-repetitions"]|2 +scope.rules[7].maxPathDepth|//controller/*[@name="scope"]/*[@name="decide-rules"]/*[@name="rules"]/*[@name="rejectIfTooManyPathSegs"]/*[@name="max-path-depth"]|20 +*metadata.userAgentTemplate|//controller/*[@name="http-headers"]/*[@name="user-agent"]|Mozilla/5.0|(compatible;|heritrix/@VERSION@|+PROJECT_URL_HERE) +metadata.operatorFrom|//controller/*[@name="http-headers"]/*[@name="from"]|CONTACT_EMAIL_ADDRESS_HERE +*metadata.robotsHonoringPolicy.type|//controller/*[@name="robots-honoring-policy"]/*[@name="type"]|classic +metadata.robotsHonoringPolicy.masquerade|//controller/*[@name="robots-honoring-policy"]/*[@name="masquerade"]|false +disposition.delayFactor|//controller/*[@name="frontier"]/*[@name="delay-factor"]|4.0 +disposition.maxDelayMs|//controller/*[@name="frontier"]/*[@name="max-delay-ms"]|20000 +disposition.minDelayMs|//controller/*[@name="frontier"]/*[@name="min-delay-ms"]|2000 +disposition.respectCrawlDelayUpToSeconds|//controller/*[@name="frontier"]/*[@name="respect-crawl-delay-up-to-secs"]|300 +frontier.maxRetries|//controller/*[@name="frontier"]/*[@name="max-retries"]|30 +frontier.retryDelaySeconds|//controller/*[@name="frontier"]/*[@name="retry-delay-seconds"]|900 +preparer.preferenceEmbedHops|//controller/*[@name="frontier"]/*[@name="preference-embed-hops"]|1 +$na|//controller/*[@name="frontier"]/*[@name="total-bandwidth-usage-KB-sec"]|0 +disposition.maxPerHostBandwidthUsageKbSec|//controller/*[@name="frontier"]/*[@name="max-per-host-bandwidth-usage-KB-sec"]|0 +*preparer.queueAssignmentPolicy|//controller/*[@name="frontier"]/*[@name="queue-assignment-policy"]|org.archive.crawler.frontier.HostnameQueueAssignmentPolicy +crawlController.pauseAtStart|//controller/*[@name="frontier"]/*[@name="pause-at-start"]|false +crawlController.pauseAtFinish|//controller/*[@name="frontier"]/*[@name="pause-at-finish"]|false +seeds.sourceTagSeeds|//controller/*[@name="frontier"]/*[@name="source-tag-seeds"]|false +frontier.recoveryLogEnabled|//controller/*[@name="frontier"]/*[@name="recovery-log-enabled"]|true +frontier.holdQueues|//controller/*[@name="frontier"]/*[@name="hold-queues"]|true +frontier.balanceReplenishAmount|//controller/*[@name="frontier"]/*[@name="balance-replenish-amount"]|3000 +frontier.errorPenaltyAmount|//controller/*[@name="frontier"]/*[@name="error-penalty-amount"]|100 +frontier.queueTotalBudget|//controller/*[@name="frontier"]/*[@name="queue-total-budget"]|-1 +*preparer.costAssignmentPolicy|//controller/*[@name="frontier"]/*[@name="cost-policy"]|org.archive.crawler.frontier.ZeroCostAssignmentPolicy +frontier.snoozeLongMs|//controller/*[@name="frontier"]/*[@name="snooze-deactivate-ms"]|300000 +$na|//controller/*[@name="frontier"]/*[@name="target-ready-backlog"]|50 +*frontier.uriUniqFilter|//controller/*[@name="frontier"]/*[@name="uri-included-structure"]|org.archive.crawler.util.BdbUriUniqFilter +frontier.dumpPendingAtClose|//controller/*[@name="frontier"]/*[@name="dump-pending-at-close"]|false +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="Lowercase"]/*[@name="enabled"]|true +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="Userinfo"]/*[@name="enabled"]|true +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="WWW[0-9]*"]/*[@name="enabled"]|true +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="SessionIDs"]/*[@name="enabled"]|true +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="SessionCFIDs"]/*[@name="enabled"]|true +$na|//controller/*[@name="uri-canonicalization-rules"]/*[@name="QueryStrPrefix"]/*[@name="enabled"]|true +preselector.enabled|//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="enabled"]|true +preselector.logToFile|//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="override-logger"]|false +preselector.recheckScope|//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="recheck-scope"]|true +preselector.blockAll|//controller/*[@name="pre-fetch-processors"]/*[@name="Preselector"]/*[@name="block-all"]|false +preconditions.enabled|//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="enabled"]|true +preconditions.ipValidityDurationSeconds|//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="ip-validity-duration-seconds"]|21600 +preconditions.robotsValidityDurationSeconds|//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="robot-validity-duration-seconds"]|86400 +preconditions.calculateRobotsOnly|//controller/*[@name="pre-fetch-processors"]/*[@name="Preprocessor"]/*[@name="calculate-robots-only"]|false +fetchDns.enabled|//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="enabled"]|true +fetchDns.acceptNonDnsResolves|//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="accept-non-dns-resolves"]|false +fetchDns.digestContent|//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="digest-content"]|true +fetchDns.digestAlgorithm|//controller/*[@name="fetch-processors"]/*[@name="DNS"]/*[@name="digest-algorithm"]|sha1 +fetchHttp.enabled|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="enabled"]|true +fetchHttp.timeoutSeconds|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="timeout-seconds"]|1200 +fetchHttp.soTimeoutMs|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="sotimeout-ms"]|20000 +fetchHttp.maxFetchKBSec|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="fetch-bandwidth"]|0 +fetchHttp.maxLengthBytes|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="max-length-bytes"]|0 +fetchHttp.ignoreCookies|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="ignore-cookies"]|false +$na|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="use-bdb-for-cookies"]|true +*fetchHttp.sslTrustLevel|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="trust-level"]|open +fetchHttp.defaultEncoding|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="default-encoding"]|ISO-8859-1 +fetchHttp.digestContent|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="digest-content"]|true +fetchHttp.digestAlgorithm|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="digest-algorithm"]|sha1 +fetchHttp.sendIfModifiedSince|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-if-modified-since"]|true +fetchHttp.sendIfNoneMatch|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-if-none-match"]|true +fetchHttp.sendConnectionClose|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-connection-close"]|true +fetchHttp.sendReferer|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-referer"]|true +fetchHttp.sendRange|//controller/*[@name="fetch-processors"]/*[@name="HTTP"]/*[@name="send-range"]|false +extractorHttp.enabled|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTTP"]/*[@name="enabled"]|true +extractorHtml.enabled|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="enabled"]|true +extractorHtml.extractJavascript|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-javascript"]|true +extractorHtml.treatFramesAsEmbedLinks|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="treat-frames-as-embed-links"]|true +extractorHtml.ignoreFormActionUrls|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="ignore-form-action-urls"]|false +extractorHtml.extractOnlyFormGets|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-only-form-gets"]|true +extractorHtml.extractValueAttributes|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="extract-value-attributes"]|true +extractorHtml.ignoreUnexpectedHtml|//controller/*[@name="extract-processors"]/*[@name="ExtractorHTML"]/*[@name="ignore-unexpected-html"]|true +extractorCss.enabled|//controller/*[@name="extract-processors"]/*[@name="ExtractorCSS"]/*[@name="enabled"]|true +extractorJs.enabled|//controller/*[@name="extract-processors"]/*[@name="ExtractorJS"]/*[@name="enabled"]|true +extractorSwf.enabled|//controller/*[@name="extract-processors"]/*[@name="ExtractorSWF"]/*[@name="enabled"]|true +arcWriter.enabled|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="enabled"]|true +arcWriter.compress|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="compress"]|true +arcWriter.prefix|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="prefix"]|IAH +arcWriter.suffix|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="suffix"]|${HOSTNAME} +arcWriter.maxFileSizeBytes|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="max-size-bytes"]|100000000 +*arcWriter.storePaths[0]|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="path"]/string|arcs +arcWriter.poolMaxActive|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="pool-max-active"]|5 +arcWriter.poolMaxWaitMs|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="pool-max-wait"]|300000 +arcWriter.maxTotalBytesToWrite|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="total-bytes-to-write"]|0 +arcWriter.skipIdenticalDigests|//controller/*[@name="write-processors"]/*[@name="Archiver"]/*[@name="skip-identical-digests"]|false +$na|//controller/*[@name="post-processors"]/*[@name="Updater"]/*[@name="enabled"]|true +$na|//controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="enabled"]|true +$na|//controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="override-logger"]|false +candidates.seedsRedirectNewSeeds|//controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="seed-redirects-new-seed"]|true +preparer.preferenceDepthHops|//controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="preference-depth-hops"]|-1 +$na|//controller/*[@name="post-processors"]/*[@name="Scheduler"]/*[@name="enabled"]|true +statisticsTracker.intervalSeconds|//controller/*[@name="loggers"]/*[@name="crawl-statistics"]/*[@name="interval-seconds"]|20 +bdb.checkpointCopyLogs|//controller/*[@name="checkpoint-copy-bdbje-logs"]|true +$na|//controller/*[@name="recover-retain-failures"]|false +$na|//controller/*[@name="recover-scope-includes"]|true +$na|//controller/*[@name="recover-scope-enqueues"]|true \ No newline at end of file diff --git a/engine/src/main/java/org/archive/crawler/migrate/MigrateH1to3Tool.java b/engine/src/main/java/org/archive/crawler/migrate/MigrateH1to3Tool.java index a1d704a4..136dc84c 100644 --- a/engine/src/main/java/org/archive/crawler/migrate/MigrateH1to3Tool.java +++ b/engine/src/main/java/org/archive/crawler/migrate/MigrateH1to3Tool.java @@ -1,27 +1,59 @@ +/* + * This file is part of the Heritrix web crawler (crawler.archive.org). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.archive.crawler.migrate; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.LineIterator; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Document; -import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; +/** + * Utility class which takes a H1 order.xml and creates a similar + * H3 job directory, with as many simple settings converted over + * (as top-of-crawler-beans overrides) as possible at this time. + * + * (Future versions will handle more complicated H1 settings + * customizations, such as per-host overrides or choices of + * alternate implementing classes for Scope, Processors, etc.) + * + * @contributor siznax + * @contributor gojomo + */ public class MigrateH1to3Tool { static DocumentBuilder DOCUMENT_BUILDER; static { @@ -32,195 +64,87 @@ public class MigrateH1to3Tool { } } - // TODO: fixxx - protected File templateH3job = new File("/Users/steve/Documents/workspace-3.4.2/h3/dist/src/main/conf/jobs/profile-defaults"); - protected File defaultBeansXmlFile = new File(templateH3job,"profile-crawler-beans.cxml"); - - protected File sourceOrderXmlFile; - protected File destinationH3JobDir; - protected File targetBeansXmlFile; - - protected Document sourceOrderXmlDom; - protected Document targetBeansXmlDom; - + public static void main(String[] args) throws Exception { + new MigrateH1to3Tool().instanceMain(args); + } + public void instanceMain(String[] args) throws Exception { - sourceOrderXmlFile = new File(args[0]); - destinationH3JobDir = new File(args[1]); - if(args.length>2) { - templateH3job = new File(args[2]); + File sourceOrderXmlFile = new File(args[0]); + File destinationH3JobDir = new File(args[1]); + + destinationH3JobDir.mkdirs(); + + InputStream inStream = getClass().getResourceAsStream( + "migrate-template-crawler-beans.cxml"); + String template = IOUtils.toString(inStream); + inStream.close(); + + Map migrateH1toH3Map = getMigrateMap(); + + Document sourceOrderXmlDom = DOCUMENT_BUILDER.parse(sourceOrderXmlFile); + Map h1simpleSettings = flattenH1Order(sourceOrderXmlDom); + + StringBuilder sb = new StringBuilder(); + for(String key : h1simpleSettings.keySet()) { + String beanPath = migrateH1toH3Map.get(key); + if(beanPath==null) { + System.err.println("no rule found for: "+key); + } else if (beanPath.startsWith("$")) { + System.err.println(beanPath.substring(1)+": "+key); + } else if (beanPath.startsWith("*")) { + // TODO: needs special handling + if(beanPath.equals("*metadata.userAgentTemplate")) { + splitH1userAgent(h1simpleSettings.get(key),sb); + } else { + System.err.println(beanPath+": "+key); + } + } else { + sb + .append(beanPath) + .append("=") + .append(h1simpleSettings.get(key)) + .append("\n"); + } } - targetBeansXmlFile = new File(destinationH3JobDir,"crawler-beans.cxml"); - - FileUtils.copyFile(defaultBeansXmlFile, targetBeansXmlFile); - - sourceOrderXmlDom = DOCUMENT_BUILDER.parse(sourceOrderXmlFile); + // patch all overrides derived from H1 into H3 template + String beansCxml = template.replace("###MIGRATE_OVERRIDES###", sb.toString()); - domFindOrderXmlControllerStrings(sourceOrderXmlDom); - domFindOrderXmlScopeElements(sourceOrderXmlDom); - xpathFindOrderXmlScopeNode(sourceOrderXmlDom); - - targetBeansXmlDom = DOCUMENT_BUILDER.parse(targetBeansXmlFile); - System.out.println("targetBeansXmlDom = " + targetBeansXmlDom.getLocalName()); - unRollNode(targetBeansXmlDom.getElementsByTagName("property")); - - migrateMetadata(); - + File targetBeansXmlFile = new File(destinationH3JobDir,"crawler-beans.cxml"); + FileUtils.writeStringToFile(targetBeansXmlFile, beansCxml); + + FileUtils.copyFile( + new File(sourceOrderXmlFile.getParentFile(), "seeds.txt"), + new File(destinationH3JobDir, "seeds.txt")); } - protected void unRollNode(NodeList node) { - System.out.println("unRollNode " + node.toString()); // + node.getLength()); - for (int i=0; i " + beanChild.getNodeName() - + " " + beanChild.getNodeValue() - + " " + beanChild.getTextContent()); - } - } - } - - protected void setBeanProperty(String id, String property, String value) - throws Exception { - System.out.println("setBeanProperty("+id+","+property+","+value+")"); - - // String xpathStr = "//bean[@id=\""+id+"\"]//property[@name=\""+property+"\"]"; - String xpathStr = "//bean[@id=\"" + id + "\"]"; - System.out.println(" xpathStr = " + xpathStr); - NodeList node = getBeanNode(xpathStr); - unRollNode(node); - - } - - protected NodeList getBeanNode(String xpath) throws Exception { - return getDocNode(targetBeansXmlDom,xpath); - } - - protected NodeList getDocNode(Document doc, String str) throws Exception { - System.out.println("getDocNode(" + doc.getLocalName() + "," + str + " )"); - XPathFactory factory = XPathFactory.newInstance(); - XPath xpath = factory.newXPath(); - try { - XPathExpression expr = xpath.compile(str); - NodeList list = (NodeList) expr.evaluate(doc,XPathConstants.NODE); - System.out.println("xpath \"" + str + "\" found " + list.getLength() + " members"); - return list; - } catch (XPathExpressionException e) { - System.out.println("XPathExpressionException!"); - return null; - } - } - - protected String getDocString(Document doc, String str) { - XPathFactory factory = XPathFactory.newInstance(); - XPath xpath = factory.newXPath(); - try { - XPathExpression expr = xpath.compile(str); - return expr.evaluate(doc); - } catch (XPathExpressionException e) { - return null; - } - } - - // JOB_NAME => order_meta_name = bean_metadata_jobName - // DESCRIPTION => order_meta_description = bean_metadata_description - protected void migrateMetadata() throws Exception { - - String order_meta_name = getDocString(sourceOrderXmlDom,"//meta/name"); - String order_meta_description = getDocString(sourceOrderXmlDom,"//meta/description"); - System.out.println("order_meta/name = " + order_meta_name); - System.out.println("order_meta/description = " + order_meta_description); - -// NodeList bean_simpleOverrides = getBeanNode("//bean[@=\"simpleOverrides\"]"); -// unRollNode(bean_simpleOverrides); - - setBeanProperty("simpleOverrides","jobName",order_meta_name); - // setBeanProperty("metadata","description",order_meta_description); - } - - // CONTACT_URL => map_http-headers_from = bean_metadata_operatorContactUrl - // HVERSION => map_http-headers_user-agent=" heritrix/(.*) " => - protected void migrateHttpHeaders() throws Exception { - } - -// protected void migrateControllerStrings() -// protected void migrateScope() - - protected void xpathFindOrderXmlScopeNode(Document orderXmlDom) throws Exception { - // use Xpath to extract scope node - XPathFactory factory = XPathFactory.newInstance(); - XPath xpath = factory.newXPath(); - String xp = "//controller/newObject[@name=\"scope\"]"; - System.out.print("==== XPATH {" + xp + "} ====\n"); - XPathExpression expr = xpath.compile(xp); - NodeList scope = (NodeList) expr.evaluate(orderXmlDom,XPathConstants.NODE); - for (int j=0; j< scope.getLength(); j++) { - if (scope.item(j).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { - System.out.println(" " + scope.item(j).getNodeName()); - } - } - } - - protected void domFindOrderXmlScopeElements(Document orderXmlDom) { - Element crawlOrder = orderXmlDom.getDocumentElement(); - NodeList newObjects = crawlOrder.getElementsByTagName("newObject"); - for (int i=0; i getMigrateMap() throws IOException { + Map map = new HashMap(); + InputStream inStream = getClass().getResourceAsStream("H1toH3.map"); + LineIterator iter = IOUtils.lineIterator(inStream, "UTF-8"); + while(iter.hasNext()) { + String[] fields = iter.nextLine().split("\\|"); + map.put(fields[1], fields[0]); + } + inStream.close(); + return map; + } + /** * Given a Document, return a Map of all non-blank simple text * nodes, keyed by the pseudo-XPath to their parent element. @@ -230,7 +154,7 @@ public class MigrateH1to3Tool { * @throws XPathExpressionException */ public static Map flattenH1Order(Document h1order) throws XPathExpressionException { - Map flattened = new HashMap(); + Map flattened = new LinkedHashMap(); XPathExpression xpath = XPathFactory.newInstance().newXPath().compile("//text()"); NodeList nodes = (NodeList) xpath.evaluate(h1order,XPathConstants.NODESET); for(int i = 0; i< nodes.getLength(); i++) { @@ -239,15 +163,15 @@ public class MigrateH1to3Tool { String pseudoXPath = getPseudoXpath(node.getParentNode()); pseudoXPath = pseudoXPath.replaceFirst("/crawl-order", "/"); - System.out.println( - pseudoXPath - +" "+node.getTextContent()); +// System.out.println( +// pseudoXPath +// +" "+node.getTextContent()); - flattened.put(getPseudoXpath(node.getParentNode()), node.getTextContent()); + flattened.put(pseudoXPath, node.getTextContent()); } } - System.err.println(flattened.size()); - System.err.println(flattened); +// System.err.println(flattened.size()); +// System.err.println(flattened); return flattened; } diff --git a/engine/src/main/java/org/archive/crawler/migrate/migrate-template-crawler-beans.cxml b/engine/src/main/java/org/archive/crawler/migrate/migrate-template-crawler-beans.cxml new file mode 100644 index 00000000..853d88c9 --- /dev/null +++ b/engine/src/main/java/org/archive/crawler/migrate/migrate-template-crawler-beans.cxml @@ -0,0 +1,511 @@ + + + + + + + + + + + +# This Properties map is specified in the Java 'property list' text format +# http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 + +###MIGRATE_OVERRIDES### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +