diff --git a/src/main/java/org/codelibs/fess/helper/CrawlerStatsHelper.java b/src/main/java/org/codelibs/fess/helper/CrawlerStatsHelper.java index 338f7ecc3..c18b43bb2 100644 --- a/src/main/java/org/codelibs/fess/helper/CrawlerStatsHelper.java +++ b/src/main/java/org/codelibs/fess/helper/CrawlerStatsHelper.java @@ -127,6 +127,8 @@ public class CrawlerStatsHelper { protected String getUrl(final Object keyObj) { if (keyObj instanceof UrlQueue urlQueue) { return escapeValue(urlQueue.getUrl()); + } else if (keyObj instanceof StatsKeyObject statsKey) { + return escapeValue(statsKey.getUrl()); } else if (keyObj instanceof String key) { return escapeValue(key); } else if (keyObj instanceof Number key) { @@ -138,6 +140,8 @@ public class CrawlerStatsHelper { protected OptionalThing getCacheKey(final Object keyObj) { if (keyObj instanceof UrlQueue urlQueue) { return OptionalThing.of(urlQueue.getId().toString()); + } else if (keyObj instanceof StatsKeyObject statsKey) { + return OptionalThing.of(statsKey.getId()); } else if (keyObj instanceof String key) { return OptionalThing.of(key); } else if (keyObj instanceof Number key) { @@ -166,4 +170,29 @@ public class CrawlerStatsHelper { this.cacheExpireAfterWrite = cacheExpireAfterWrite; } + public static class StatsKeyObject { + + private final String id; + + private String url; + + public StatsKeyObject(final String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setUrl(final String url) { + this.url = url; + } + + protected String getUrl() { + if (url != null) { + return url; + } + return id; + } + } } diff --git a/src/test/java/org/codelibs/fess/helper/CrawlerStatsHelperTest.java b/src/test/java/org/codelibs/fess/helper/CrawlerStatsHelperTest.java index 0ce07d5b7..16f8a365c 100644 --- a/src/test/java/org/codelibs/fess/helper/CrawlerStatsHelperTest.java +++ b/src/test/java/org/codelibs/fess/helper/CrawlerStatsHelperTest.java @@ -17,6 +17,7 @@ package org.codelibs.fess.helper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.codelibs.fess.helper.CrawlerStatsHelper.StatsKeyObject; import org.codelibs.fess.unit.UnitFessTestCase; public class CrawlerStatsHelperTest extends UnitFessTestCase { @@ -92,4 +93,23 @@ public class CrawlerStatsHelperTest extends UnitFessTestCase { crawlerStatsHelper.done(key); assertNull(localLogMsg.get()); } -} + + public void test_beginDoneWithRecord1WithStatsKeyObject() { + StatsKeyObject key = new StatsKeyObject("id"); + crawlerStatsHelper.begin(key); + key.setUrl("test"); + crawlerStatsHelper.record(key, "aaa"); + crawlerStatsHelper.done(key); + logger.info(localLogMsg.get()); + String[] values = localLogMsg.get().split("\t"); + assertEquals(4, values.length); + assertEquals("url:test", values[0]); + assertTrue(values[1].startsWith("time:")); + assertTrue(values[2].startsWith("done:")); + assertTrue(values[3].startsWith("aaa:")); + + localLogMsg.remove(); + crawlerStatsHelper.done(key); + assertNull(localLogMsg.get()); + } +} \ No newline at end of file