mirror of
https://github.com/internetarchive/heritrix3.git
synced 2026-11-09 23:43:29 +00:00
Fix issues revealed in extra tests
* H1toH3.map, migrate-template-crawler-beans.cxml, .classpath
move resources to 'resources' src subdirectory, so included in built JAR
move 'resources' directorys to library rather than source directories for dev-time reachability
* MigrateH1to3Tool.java
handle H1 values that just need capitalization
report all 'no rule' situations as 'needs attention'
touchup explanations and comments
enable uriCanonicalizationRule overrides
This commit is contained in:
1 parent
f114448e6f
commit
64a79ea9e6
4 files changed
+42
-32
No files matched your search
@@ -1,121 +0,0 @@
|
||||
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
|
||||
$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
|
||||
$|//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
|
||||
$|//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
|
||||
$|//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
|
||||
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
|
||||
$|//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
|
||||
$|//controller/*[@name="post-processors"]/*[@name="Updater"]/*[@name="enabled"]|true
|
||||
$|//controller/*[@name="post-processors"]/*[@name="LinksScoper"]/*[@name="enabled"]|true
|
||||
$|//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
|
||||
bdb.checkpointCopyLogs|//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
|
||||
@@ -76,8 +76,6 @@ public class MigrateH1to3Tool {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
File sourceOrderXmlFile = new File(args[0]);
|
||||
File destinationH3JobDir = new File(args[1]);
|
||||
|
||||
@@ -89,7 +87,7 @@ public class MigrateH1to3Tool {
|
||||
System.out.print("Migrating settings...");
|
||||
|
||||
InputStream inStream = getClass().getResourceAsStream(
|
||||
"migrate-template-crawler-beans.cxml");
|
||||
"/org/archive/crawler/migrate/migrate-template-crawler-beans.cxml");
|
||||
String template = IOUtils.toString(inStream);
|
||||
inStream.close();
|
||||
|
||||
@@ -105,11 +103,18 @@ public class MigrateH1to3Tool {
|
||||
for(String key : h1simpleSettings.keySet()) {
|
||||
String beanPath = migrateH1toH3Map.get(key);
|
||||
String value = h1simpleSettings.get(key);
|
||||
System.out.print(".");
|
||||
if(beanPath==null) {
|
||||
System.err.println("no rule found for: "+key);
|
||||
} else if (beanPath.startsWith("$")) {
|
||||
notApplicable.add(key+" "+value);
|
||||
} else if (beanPath.startsWith("*")) {
|
||||
// no equivalence rule
|
||||
needsAttention.add(key+" "+value);
|
||||
continue;
|
||||
}
|
||||
if (beanPath.startsWith("$")) {
|
||||
// rule indicates not-available/not-applicable
|
||||
notApplicable.add(key+" "+value);
|
||||
continue;
|
||||
}
|
||||
if (beanPath.startsWith("*")) {
|
||||
// TODO: needs special handling
|
||||
if(beanPath.equals("*metadata.userAgentTemplate")) {
|
||||
splitH1userAgent(value,sb);
|
||||
@@ -117,16 +122,19 @@ public class MigrateH1to3Tool {
|
||||
} else {
|
||||
needsAttention.add(key+" "+value);
|
||||
}
|
||||
} else {
|
||||
sb
|
||||
.append(beanPath)
|
||||
.append("=")
|
||||
.append(value)
|
||||
.append("\n");
|
||||
migrated++;
|
||||
|
||||
continue;
|
||||
}
|
||||
if (beanPath.startsWith("^")) {
|
||||
// uppercase to new enum-style
|
||||
value = value.toUpperCase();
|
||||
beanPath = beanPath.substring(1);
|
||||
}
|
||||
System.out.print(".");
|
||||
sb
|
||||
.append(beanPath)
|
||||
.append("=")
|
||||
.append(value)
|
||||
.append("\n");
|
||||
migrated++;
|
||||
}
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
@@ -144,12 +152,12 @@ public class MigrateH1to3Tool {
|
||||
|
||||
System.out.println(notApplicable.size()+" settings skipped as not-applicable");
|
||||
System.out.println("These are probably harmless, but if the following settings were");
|
||||
System.out.println("important to your crawl, investigate other options.");
|
||||
System.out.println("important to your crawl process, investigate other options.");
|
||||
listProblems(notApplicable);
|
||||
System.out.println();
|
||||
System.out.println(needsAttention.size()+" settings may need attention");
|
||||
System.out.println("Please review your original crawl and the created H3 job, for each");
|
||||
System.out.println("of the following and update manually to reflect your intent ");
|
||||
System.out.println("of the following, and manually update as needed.");
|
||||
listProblems(needsAttention);
|
||||
System.out.println();
|
||||
System.out.println(migrated +" H1 settings successfully migrated to H3 configuration");
|
||||
@@ -178,6 +186,7 @@ public class MigrateH1to3Tool {
|
||||
"^.*?\\+(http://[^)]*).*$",
|
||||
"$1");
|
||||
String newTemplate = userAgent.replace(originalUrl,"@OPERATOR_CONTACT_URL@");
|
||||
// TODO: catch, change outdated version info?
|
||||
sb
|
||||
.append("metadata.operatorContactUrl=")
|
||||
.append(originalUrl)
|
||||
@@ -189,7 +198,8 @@ public class MigrateH1to3Tool {
|
||||
|
||||
protected Map<String, String> getMigrateMap() throws IOException {
|
||||
Map<String,String> map = new HashMap<String,String>();
|
||||
InputStream inStream = getClass().getResourceAsStream("H1toH3.map");
|
||||
InputStream inStream = getClass().getResourceAsStream(
|
||||
"/org/archive/crawler/migrate/H1toH3.map");
|
||||
LineIterator iter = IOUtils.lineIterator(inStream, "UTF-8");
|
||||
while(iter.hasNext()) {
|
||||
String[] fields = iter.nextLine().split("\\|");
|
||||
|
||||
@@ -1,511 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
HERITRIX 3 CRAWL JOB CONFIGURATION FILE - MIGRATE TEMPLATE
|
||||
|
||||
This is a relatively minimal configuration suitable for many crawls.
|
||||
|
||||
Commented-out beans and properties are provided as an example; values
|
||||
shown in comments reflect the actual defaults which are in effect
|
||||
without specification. (To change from the default behavior,
|
||||
uncomment AND alter the shown values.)
|
||||
-->
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:aop="http://www.springframework.org/schema/aop"
|
||||
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
|
||||
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
|
||||
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
|
||||
|
||||
<context:annotation-config/>
|
||||
|
||||
<!--
|
||||
OVERRIDES
|
||||
Values elsewhere in the configuration may be replaced ('overridden')
|
||||
by a Properties map declared in a PropertiesOverrideConfigurer,
|
||||
using a dotted-bean-path to address individual bean properties.
|
||||
This allows us to collect a few of the most-often changed values
|
||||
in an easy-to-edit format here at the beginning of the model
|
||||
configuration.
|
||||
-->
|
||||
<!-- overrides from a text property list -->
|
||||
<bean id="simpleOverrides" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
|
||||
<property name="properties">
|
||||
<value>
|
||||
# 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###
|
||||
|
||||
</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- overrides from declared <prop> elements, more easily allowing
|
||||
multiline values or even declared beans -->
|
||||
<bean id="longerOverrides" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
|
||||
<property name="properties">
|
||||
<props>
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- CRAWL METADATA: including identification of crawler/operator -->
|
||||
<bean id="metadata" class="org.archive.modules.CrawlMetadata" autowire="byName">
|
||||
<property name="operatorContactUrl" value="[see override above]"/>
|
||||
<property name="jobName" value="[see override above]"/>
|
||||
<property name="description" value="[see override above]"/>
|
||||
<!-- <property name="operator" value=""/> -->
|
||||
<!-- <property name="operatorFrom" value=""/> -->
|
||||
<!-- <property name="organization" value=""/> -->
|
||||
<!-- <property name="audience" value=""/> -->
|
||||
<!-- <property name="userAgentTemplate"
|
||||
value="Mozilla/5.0 (compatible; heritrix/@VERSION@ +@OPERATOR_CONTACT_URL@)"/> -->
|
||||
|
||||
</bean>
|
||||
|
||||
<!-- SEEDS: crawl starting points -->
|
||||
<!-- ConfigFile approach: specifying external seeds.txt file -->
|
||||
<bean id="seeds" class="org.archive.modules.seeds.TextSeedModule">
|
||||
<property name="textSource">
|
||||
<bean class="org.archive.spring.ConfigFile">
|
||||
<property name="path" value="seeds.txt" />
|
||||
</bean>
|
||||
</property>
|
||||
<!-- <property name='sourceTagSeeds' value='false'/> -->
|
||||
</bean>
|
||||
|
||||
<!-- SEEDS ALTERNATE APPROACH:
|
||||
ConfigString allows simple, inline specification of a moderate
|
||||
number of seeds; see below comment for example of using an
|
||||
arbitrarily-large external file.
|
||||
Use either the above, or this, but not both. -->
|
||||
<!--
|
||||
<bean id="seeds" class="org.archive.modules.seeds.TextSeedModule">
|
||||
<property name="textSource">
|
||||
<bean class="org.archive.spring.ConfigString">
|
||||
<property name="value">
|
||||
<value>
|
||||
# [see override above]
|
||||
</value>
|
||||
</property>
|
||||
</bean>
|
||||
</property>
|
||||
<property name='sourceTagSeeds' value='false'/>
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!-- SCOPE: rules for which discovered URIs to crawl; order is very
|
||||
important because last decision returned other than 'NONE' wins. -->
|
||||
<bean id="scope" class="org.archive.modules.deciderules.DecideRuleSequence">
|
||||
<property name="rules">
|
||||
<list>
|
||||
<!-- Begin by REJECTing all... -->
|
||||
<bean class="org.archive.modules.deciderules.RejectDecideRule">
|
||||
</bean>
|
||||
<!-- ...then ACCEPT those within configured/seed-implied SURT prefixes... -->
|
||||
<bean class="org.archive.modules.deciderules.surt.SurtPrefixedDecideRule">
|
||||
<!-- <property name="seedsAsSurtPrefixes" value="true" /> -->
|
||||
<!-- <property name="alsoCheckVia" value="true" /> -->
|
||||
<!-- <property name="surtsSourceFile" value="" /> -->
|
||||
<!-- <property name="surtsDumpFile" value="surts.dump" /> -->
|
||||
</bean>
|
||||
<!-- ...but REJECT those more than a configured link-hop-count from start... -->
|
||||
<bean class="org.archive.modules.deciderules.TooManyHopsDecideRule">
|
||||
<!-- <property name="maxHops" value="20" /> -->
|
||||
</bean>
|
||||
<!-- ...but ACCEPT those more than a configured link-hop-count from start... -->
|
||||
<bean class="org.archive.modules.deciderules.TransclusionDecideRule">
|
||||
<!-- <property name="maxTransHops" value="2" /> -->
|
||||
<!-- <property name="maxSpeculativeHops" value="1" /> -->
|
||||
</bean>
|
||||
<!-- ...but REJECT those from a configurable (initially empty) set of REJECT SURTs... -->
|
||||
<bean class="org.archive.modules.deciderules.surt.SurtPrefixedDecideRule">
|
||||
<property name="decision" value="REJECT"/>
|
||||
<property name="seedsAsSurtPrefixes" value="false"/>
|
||||
<property name="surtsDumpFile" value="negative-surts.dump" />
|
||||
<!-- <property name="surtsSourceFile" value="" /> -->
|
||||
</bean>
|
||||
<!-- ...and REJECT those from a configurable (initially empty) set of URI regexes... -->
|
||||
<bean class="org.archive.modules.deciderules.MatchesListRegexDecideRule">
|
||||
<!-- <property name="listLogicalOr" value="true" /> -->
|
||||
<!-- <property name="regexList">
|
||||
<list>
|
||||
</list>
|
||||
</property> -->
|
||||
</bean>
|
||||
<!-- ...and REJECT those with suspicious repeating path-segments... -->
|
||||
<bean class="org.archive.modules.deciderules.PathologicalPathDecideRule">
|
||||
<!-- <property name="maxRepetitions" value="2" /> -->
|
||||
</bean>
|
||||
<!-- ...and REJECT those with more than threshold number of path-segments... -->
|
||||
<bean class="org.archive.modules.deciderules.TooManyPathSegmentsDecideRule">
|
||||
<!-- <property name="maxPathDepth" value="20" /> -->
|
||||
</bean>
|
||||
<!-- ...but always ACCEPT those marked as prerequisitee for another URI... -->
|
||||
<bean class="org.archive.modules.deciderules.PrerequisiteAcceptDecideRule">
|
||||
</bean>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
PROCESSING CHAINS
|
||||
Much of the crawler's work is specified by the sequential
|
||||
application of swappable Processor modules. These Processors
|
||||
are collected into three 'chains. The CandidateChain is applied
|
||||
to URIs being considered for inclusion, before a URI is enqueued
|
||||
for collection. The FetchChain is applied to URIs when their
|
||||
turn for collection comes up. The DispositionChain is applied
|
||||
after a URI is fetched and analyzed/link-extracted.
|
||||
-->
|
||||
|
||||
<!-- CANDIDATE CHAIN -->
|
||||
<!-- processors declared as named beans -->
|
||||
<bean id="candidateScoper" class="org.archive.crawler.prefetch.CandidateScoper">
|
||||
</bean>
|
||||
<bean id="preparer" class="org.archive.crawler.prefetch.FrontierPreparer">
|
||||
<!-- <property name="preferenceDepthHops" value="-1" /> -->
|
||||
<!-- <property name="preferenceEmbedHops" value="1" /> -->
|
||||
<!-- <property name="canonicalizationPolicy">
|
||||
<ref bean="canonicalizationPolicy" />
|
||||
</property> -->
|
||||
<!-- <property name="queueAssignmentPolicy">
|
||||
<ref bean="queueAssignmentPolicy" />
|
||||
</property> -->
|
||||
<!-- <property name="uriPrecedencePolicy">
|
||||
<ref bean="uriPrecedencePolicy" />
|
||||
</property> -->
|
||||
<!-- <property name="costAssignmentPolicy">
|
||||
<ref bean="costAssignmentPolicy" />
|
||||
</property> -->
|
||||
</bean>
|
||||
<!-- assembled into ordered CandidateChain bean -->
|
||||
<bean id="candidateProcessors" class="org.archive.modules.CandidateChain">
|
||||
<property name="processors">
|
||||
<list>
|
||||
<!-- apply scoping rules to each individual candidate URI... -->
|
||||
<ref bean="candidateScoper"/>
|
||||
<!-- ...then prepare those ACCEPTed for enqueuing to frontier. -->
|
||||
<ref bean="preparer"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- FETCH CHAIN -->
|
||||
<!-- processors declared as named beans -->
|
||||
<bean id="preselector" class="org.archive.crawler.prefetch.Preselector">
|
||||
<!-- <property name="recheckScope" value="false" /> -->
|
||||
<!-- <property name="blockAll" value="false" /> -->
|
||||
<!-- <property name="blockByRegex" value="" /> -->
|
||||
<!-- <property name="allowByRegex" value="" /> -->
|
||||
</bean>
|
||||
<bean id="preconditions" class="org.archive.crawler.prefetch.PreconditionEnforcer">
|
||||
<!-- <property name="ipValidityDurationSeconds" value="21600" /> -->
|
||||
<!-- <property name="robotsValidityDurationSeconds" value="86400" /> -->
|
||||
<!-- <property name="calculateRobotsOnly" value="false" /> -->
|
||||
</bean>
|
||||
<bean id="fetchDns" class="org.archive.modules.fetcher.FetchDNS">
|
||||
<!-- <property name="acceptNonDnsResolves" value="false" /> -->
|
||||
<!-- <property name="digestContent" value="true" /> -->
|
||||
<!-- <property name="digestAlgorithm" value="sha1" /> -->
|
||||
</bean>
|
||||
<bean id="fetchHttp" class="org.archive.modules.fetcher.FetchHTTP">
|
||||
<!-- <property name="maxLengthBytes" value="0" /> -->
|
||||
<!-- <property name="timeoutSeconds" value="1200" /> -->
|
||||
<!-- <property name="maxFetchKBSec" value="0" /> -->
|
||||
<!-- <property name="defaultEncoding" value="ISO-8859-1" /> -->
|
||||
<!-- <property name="shouldFetchBodyRule">
|
||||
<bean class="org.archive.modules.deciderules.AcceptDecideRule"/>
|
||||
</property> -->
|
||||
<!-- <property name="soTimeoutMs" value="20000" /> -->
|
||||
<!-- <property name="sendIfModifiedSince" value="true" /> -->
|
||||
<!-- <property name="sendIfNoneMatch" value="true" /> -->
|
||||
<!-- <property name="sendConnectionClose" value="true" /> -->
|
||||
<!-- <property name="sendReferer" value="true" /> -->
|
||||
<!-- <property name="sendRange" value="false" /> -->
|
||||
<!-- <property name="ignoreCookies" value="false" /> -->
|
||||
<!-- <property name="sslTrustLevel" value="OPEN" /> -->
|
||||
<!-- <property name="acceptHeaders">
|
||||
<list>
|
||||
</list>
|
||||
</property>
|
||||
-->
|
||||
<!-- <property name="httpBindAddress" value="" /> -->
|
||||
<!-- <property name="httpProxyHost" value="" /> -->
|
||||
<!-- <property name="httpProxyPort" value="0" /> -->
|
||||
<!-- <property name="digestContent" value="true" /> -->
|
||||
<!-- <property name="digestAlgorithm" value="sha1" /> -->
|
||||
</bean>
|
||||
<bean id="extractorHttp" class="org.archive.modules.extractor.ExtractorHTTP">
|
||||
</bean>
|
||||
<bean id="extractorHtml" class="org.archive.modules.extractor.ExtractorHTML">
|
||||
<!-- <property name="extractJavascript" value="true" /> -->
|
||||
<!-- <property name="extractValueAttributes" value="true" /> -->
|
||||
<!-- <property name="ignoreFormActionUrls" value="false" /> -->
|
||||
<!-- <property name="extractOnlyFormGets" value="true" /> -->
|
||||
<!-- <property name="treatFramesAsEmbedLinks" value="true" /> -->
|
||||
<!-- <property name="ignoreUnexpectedHtml" value="true" /> -->
|
||||
<!-- <property name="maxElementLength" value="1024" /> -->
|
||||
<!-- <property name="maxAttributeNameLength" value="1024" /> -->
|
||||
<!-- <property name="maxAttributeValueLength" value="16384" /> -->
|
||||
</bean>
|
||||
<bean id="extractorCss" class="org.archive.modules.extractor.ExtractorCSS">
|
||||
</bean>
|
||||
<bean id="extractorJs" class="org.archive.modules.extractor.ExtractorJS">
|
||||
</bean>
|
||||
<bean id="extractorSwf" class="org.archive.modules.extractor.ExtractorSWF">
|
||||
</bean>
|
||||
<!-- assembled into ordered FetchChain bean -->
|
||||
<bean id="fetchProcessors" class="org.archive.modules.FetchChain">
|
||||
<property name="processors">
|
||||
<list>
|
||||
<!-- recheck scope, if so enabled... -->
|
||||
<ref bean="preselector"/>
|
||||
<!-- ...then verify or trigger prerequisite URIs fetched, allow crawling... -->
|
||||
<ref bean="preconditions"/>
|
||||
<!-- ...fetch if DNS URI... -->
|
||||
<ref bean="fetchDns"/>
|
||||
<!-- ...fetch if HTTP URI... -->
|
||||
<ref bean="fetchHttp"/>
|
||||
<!-- ...extract oulinks from HTTP headers... -->
|
||||
<ref bean="extractorHttp"/>
|
||||
<!-- ...extract oulinks from HTML content... -->
|
||||
<ref bean="extractorHtml"/>
|
||||
<!-- ...extract oulinks from CSS content... -->
|
||||
<ref bean="extractorCss"/>
|
||||
<!-- ...extract oulinks from Javascript content... -->
|
||||
<ref bean="extractorJs"/>
|
||||
<!-- ...extract oulinks from Flash content... -->
|
||||
<ref bean="extractorSwf"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- DISPOSITION CHAIN -->
|
||||
<!-- processors declared as named beans -->
|
||||
<bean id="arcWriter" class="org.archive.modules.writer.ARCWriterProcessor">
|
||||
<!-- <property name="compress" value="true" /> -->
|
||||
<!-- <property name="prefix" value="IAH" /> -->
|
||||
<!-- <property name="suffix" value="${HOSTNAME}" /> -->
|
||||
<!-- <property name="maxFileSizeBytes" value="100000000" /> -->
|
||||
<!-- <property name="poolMaxActive" value="1" /> -->
|
||||
<!-- <property name="poolMaxWaitMs" value="300000" /> -->
|
||||
<!-- <property name="skipIdenticalDigests" value="false" /> -->
|
||||
<!-- <property name="maxTotalBytesToWrite" value="0" /> -->
|
||||
<!-- <property name="directory" value="." /> -->
|
||||
<!-- <property name="storePaths">
|
||||
<list>
|
||||
<value>arcs</value>
|
||||
</list>
|
||||
</property> -->
|
||||
</bean>
|
||||
<bean id="candidates" class="org.archive.crawler.postprocessor.CandidatesProcessor">
|
||||
<!-- <property name="seedsRedirectNewSeeds" value="true" /> -->
|
||||
</bean>
|
||||
<bean id="disposition" class="org.archive.crawler.postprocessor.DispositionProcessor">
|
||||
<!-- <property name="delayFactor" value="5.0" /> -->
|
||||
<!-- <property name="minDelayMs" value="3000" /> -->
|
||||
<!-- <property name="respectCrawlDelayUpToSeconds" value="300" /> -->
|
||||
<!-- <property name="maxDelayMs" value="30000" /> -->
|
||||
<!-- <property name="maxPerHostBandwidthUsageKbSec" value="0" /> -->
|
||||
|
||||
</bean>
|
||||
<!-- assembled into ordered DispositionChain bean -->
|
||||
<bean id="dispositionProcessors" class="org.archive.modules.DispositionChain">
|
||||
<property name="processors">
|
||||
<list>
|
||||
<!-- write to aggregate archival files... -->
|
||||
<ref bean="arcWriter"/>
|
||||
<!-- ...send each outlink candidate URI to CandidatesChain,
|
||||
and enqueue those ACCEPTed to the frontier... -->
|
||||
<ref bean="candidates"/>
|
||||
<!-- ...then update stats, shared-structures, frontier decisions -->
|
||||
<ref bean="disposition"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- CRAWLCONTROLLER: Control interface, unifying context -->
|
||||
<bean id="crawlController"
|
||||
class="org.archive.crawler.framework.CrawlController">
|
||||
<!-- <property name="maxToeThreads" value="25" /> -->
|
||||
<!-- <property name="pauseAtStart" value="true" /> -->
|
||||
<!-- <property name="pauseAtFinish" value="false" /> -->
|
||||
<!-- <property name="recorderInBufferBytes" value="524288" /> -->
|
||||
<!-- <property name="recorderOutBufferBytes" value="16384" /> -->
|
||||
<!-- <property name="checkpointerPeriod" value="-1" /> -->
|
||||
<!-- <property name="scratchDir" value="scratch" /> -->
|
||||
<!-- <property name="checkpointsDir" value="checkpoints" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- FRONTIER: Record of all URIs discovered and queued-for-collection -->
|
||||
<bean id="frontier"
|
||||
class="org.archive.crawler.frontier.BdbFrontier">
|
||||
<!-- <property name="holdQueues" value="true" /> -->
|
||||
<!-- <property name="queueTotalBudget" value="-1" /> -->
|
||||
<!-- <property name="balanceReplenishAmount" value="3000" /> -->
|
||||
<!-- <property name="errorPenaltyAmount" value="100" /> -->
|
||||
<!-- <property name="precedenceFloor" value="255" /> -->
|
||||
<!-- <property name="queuePrecedencePolicy">
|
||||
<bean class="org.archive.crawler.frontier.precedence.BaseQueuePrecedencePolicy" />
|
||||
</property> -->
|
||||
<!-- <property name="snoozeLongMs" value="300000" /> -->
|
||||
<!-- <property name="retryDelaySeconds" value="900" /> -->
|
||||
<!-- <property name="maxRetries" value="30" /> -->
|
||||
<!-- <property name="recoveryDir" value="logs" /> -->
|
||||
<!-- <property name="recoveryLogEnabled" value="true" /> -->
|
||||
<!-- <property name="maxOutlinks" value="6000" /> -->
|
||||
<!-- <property name="outboundQueueCapacity" value="50" /> -->
|
||||
<!-- <property name="inboundQueueMultiple" value="3" /> -->
|
||||
<!-- <property name="dumpPendingAtClose" value="false" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- URI UNIQ FILTER: Used by frontier to remember already-included URIs -->
|
||||
<bean id="uriUniqFilter"
|
||||
class="org.archive.crawler.util.BdbUriUniqFilter">
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
OPTIONAL BUT RECOMMENDED BEANS
|
||||
-->
|
||||
|
||||
<!-- ACTIONDIRECTORY: disk directory for mid-crawl operations
|
||||
Running job will watch directory for new files with URIs,
|
||||
scripts, and other data to be processed during a crawl. -->
|
||||
<bean id="actionDirectory" class="org.archive.crawler.framework.ActionDirectory">
|
||||
<!-- <property name="actionDir" value="action" /> -->
|
||||
<!-- <property name="initialDelaySeconds" value="10" /> -->
|
||||
<!-- <property name="delaySeconds" value="30" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- CRAWLLIMITENFORCER: stops crawl when it reaches configured limits -->
|
||||
<bean id="crawlLimiter" class="org.archive.crawler.framework.CrawlLimitEnforcer">
|
||||
<!-- <property name="maxBytesDownload" value="0" /> -->
|
||||
<!-- <property name="maxDocumentsDownload" value="0" /> -->
|
||||
<!-- <property name="maxTimeSeconds" value="0" /> -->
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
OPTIONAL BEANS
|
||||
Uncomment and expand as needed, or if non-default alternate
|
||||
implementations are preferred.
|
||||
-->
|
||||
|
||||
<!-- CANONICALIZATION POLICY -->
|
||||
<!--
|
||||
<bean id="canonicalizationPolicy"
|
||||
class="org.archive.modules.canonicalize.RulesCanonicalizationPolicy">
|
||||
<list>
|
||||
<bean class="org.archive.modules.canonicalize.LowercaseRule" />
|
||||
<bean class="org.archive.modules.canonicalize.StripUserinfoRule" />
|
||||
<bean class="org.archive.modules.canonicalize.StripWWWNRule" />
|
||||
<bean class="org.archive.modules.canonicalize.StripSessionIDs" />
|
||||
<bean class="org.archive.modules.canonicalize.StripSessionCFIDs" />
|
||||
<bean class="org.archive.modules.canonicalize.FixupQueryString" />
|
||||
</list>
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!-- QUEUE ASSIGNMENT POLICY -->
|
||||
<!--
|
||||
<bean id="queueAssignmentPolicy"
|
||||
class="org.archive.crawler.frontier.SurtAuthorityQueueAssignmentPolicy">
|
||||
<property name="forceQueueAssignment" value="" />
|
||||
<property name="deferToPrevious" value="true" />
|
||||
<property name="parallelQueues" value="1" />
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!-- URI PRECEDENCE POLICY -->
|
||||
<!--
|
||||
<bean id="uriPrecedencePolicy"
|
||||
class="org.archive.crawler.frontier.precedence.CostUriPrecedencePolicy">
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!-- COST ASSIGNMENT POLICY -->
|
||||
<!--
|
||||
<bean id="costAssignmentPolicy"
|
||||
class="org.archive.crawler.frontier.UnitCostAssignmentPolicy">
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!-- CREDENTIAL STORE: HTTP authentication or FORM POST credentials -->
|
||||
<!--
|
||||
<bean id="credentialStore"
|
||||
class="org.archive.modules.credential.CredentialStore">
|
||||
</bean>
|
||||
-->
|
||||
|
||||
<!--
|
||||
REQUIRED STANDARD BEANS
|
||||
It will be very rare to replace or reconfigure the following beans.
|
||||
-->
|
||||
|
||||
<!-- STATISTICSTRACKER: standard stats/reporting collector -->
|
||||
<bean id="statisticsTracker"
|
||||
class="org.archive.crawler.reporting.StatisticsTracker" autowire="byName">
|
||||
<!-- <property name="reportsDir" value="reports" /> -->
|
||||
<!-- <property name="liveHostReportSize" value="20" /> -->
|
||||
<!-- <property name="intervalSeconds" value="20" /> -->
|
||||
<!-- <property name="keepSnapshotsCount" value="5" /> -->
|
||||
<!-- <property name="liveHostReportSize" value="20" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- CRAWLERLOGGERMODULE: shared logging facility -->
|
||||
<bean id="loggerModule"
|
||||
class="org.archive.crawler.reporting.CrawlerLoggerModule">
|
||||
<!-- <property name="path" value="logs" /> -->
|
||||
<!-- <property name="crawlLogPath" value="crawl.log" /> -->
|
||||
<!-- <property name="alertsLogPath" value="alerts.log" /> -->
|
||||
<!-- <property name="progressLogPath" value="progress-statistics.log" /> -->
|
||||
<!-- <property name="uriErrorsLogPath" value="uri-errors.log" /> -->
|
||||
<!-- <property name="runtimeErrorsLogPath" value="runtime-errors.log" /> -->
|
||||
<!-- <property name="nonfatalErrorsLogPath" value="nonfatal-errors.log" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- SHEETOVERLAYMANAGER: manager of sheets of contextual overlays
|
||||
Autowired to include any SheetForSurtPrefix or
|
||||
SheetForDecideRuled beans -->
|
||||
<bean id="sheetOverlaysManager" autowire="byType"
|
||||
class="org.archive.crawler.spring.SheetOverlaysManager">
|
||||
</bean>
|
||||
|
||||
<!-- BDBMODULE: shared BDB-JE disk persistence manager -->
|
||||
<bean id="bdb"
|
||||
class="org.archive.bdb.BdbModule">
|
||||
<!-- <property name="dir" value="state" /> -->
|
||||
<!-- <property name="cachePercentage" value="60" /> -->
|
||||
<!-- <property name="useSharedCache" value="true" /> -->
|
||||
<!-- <property name="checkpointCopyLogs" value="true" /> -->
|
||||
<!-- <property name="expectedConcurrency" value="25" /> -->
|
||||
</bean>
|
||||
|
||||
<!-- BDBCOOKIESTORAGE: disk-based cookie storage for FetchHTTP -->
|
||||
<bean id="cookieStorage"
|
||||
class="org.archive.modules.fetcher.BdbCookieStorage">
|
||||
<!-- <property name="cookiesLoadFile"><null/></property> -->
|
||||
<!-- <property name="cookiesSaveFile"><null/></property> -->
|
||||
<!-- <property name="bdb">
|
||||
<ref bean="bdb"/>
|
||||
</property> -->
|
||||
</bean>
|
||||
|
||||
<!-- SERVERCACHE: shared cache of server/host info -->
|
||||
<bean id="serverCache"
|
||||
class="org.archive.modules.net.BdbServerCache">
|
||||
<!-- <property name="bdb">
|
||||
<ref bean="bdb"/>
|
||||
</property> -->
|
||||
</bean>
|
||||
|
||||
<!-- CONFIG PATH CONFIGURER: required helper making crawl paths relative
|
||||
to crawler-beans.cxml file, and tracking crawl files for web UI -->
|
||||
<bean id="configPathConfigurer"
|
||||
class="org.archive.spring.ConfigPathConfigurer">
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
Reference in new issue
Block a user