From 7448b100f3065ad2db80dc6a0b9429e0ffa6679e Mon Sep 17 00:00:00 2001 From: Shinsuke Sugaya <shinsuke@apache.org> Date: Thu, 16 Jan 2020 07:05:20 +0900 Subject: [PATCH] fix #2365 add job name --- .../fess/app/job/ScriptExecutorJob.java | 10 ++++++++ .../java/org/codelibs/fess/exec/Crawler.java | 2 ++ .../org/codelibs/fess/helper/JobHelper.java | 10 ++++++++ .../java/org/codelibs/fess/job/CrawlJob.java | 8 +----- .../java/org/codelibs/fess/job/ExecJob.java | 25 +++++++++++++++++++ .../fess/job/GenerateThumbnailJob.java | 8 +----- .../org/codelibs/fess/job/SuggestJob.java | 8 +----- .../fess/mylasta/mail/CrawlerPostcard.java | 15 ++++++++--- src/main/resources/mail/crawler.dfmail | 1 + 9 files changed, 63 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/codelibs/fess/app/job/ScriptExecutorJob.java b/src/main/java/org/codelibs/fess/app/job/ScriptExecutorJob.java index 2be61034d..7bfa3211e 100644 --- a/src/main/java/org/codelibs/fess/app/job/ScriptExecutorJob.java +++ b/src/main/java/org/codelibs/fess/app/job/ScriptExecutorJob.java @@ -36,6 +36,16 @@ public class ScriptExecutorJob implements LaJob { @Override public void run(final LaJobRuntime runtime) { + final JobHelper jobHelper = ComponentUtil.getJobHelper(); + try { + jobHelper.setJobRuntime(runtime); + process(runtime); + } finally { + jobHelper.setJobRuntime(null); + } + } + + protected void process(final LaJobRuntime runtime) { if (!runtime.getParameterMap().containsKey(Constants.SCHEDULED_JOB)) { logger.warn(Constants.SCHEDULED_JOB + " is empty."); return; diff --git a/src/main/java/org/codelibs/fess/exec/Crawler.java b/src/main/java/org/codelibs/fess/exec/Crawler.java index ae18f29ae..8a40a260c 100644 --- a/src/main/java/org/codelibs/fess/exec/Crawler.java +++ b/src/main/java/org/codelibs/fess/exec/Crawler.java @@ -392,6 +392,7 @@ public class Crawler { logger.debug("\ninfoMap: {}\ndataMap: {}", infoMap, dataMap); + final DynamicProperties systemProperties = ComponentUtil.getSystemProperties(); final Postbox postbox = ComponentUtil.getComponent(Postbox.class); CrawlerPostcard.droppedInto(postbox, postcard -> { postcard.setFrom(fessConfig.getMailFromAddress(), fessConfig.getMailFromName()); @@ -418,6 +419,7 @@ public class Crawler { } else { postcard.setStatus(Constants.FAIL); } + postcard.setJobname(systemProperties.getProperty("job.runtime.name", StringUtil.EMPTY)); }); } } diff --git a/src/main/java/org/codelibs/fess/helper/JobHelper.java b/src/main/java/org/codelibs/fess/helper/JobHelper.java index 12c6ae491..ad538da3a 100644 --- a/src/main/java/org/codelibs/fess/helper/JobHelper.java +++ b/src/main/java/org/codelibs/fess/helper/JobHelper.java @@ -35,6 +35,7 @@ import org.codelibs.fess.util.ComponentUtil; import org.dbflute.optional.OptionalThing; import org.lastaflute.job.JobManager; import org.lastaflute.job.LaCron; +import org.lastaflute.job.LaJobRuntime; import org.lastaflute.job.LaScheduledJob; import org.lastaflute.job.key.LaJobUnique; import org.lastaflute.job.subsidiary.CronParamsSupplier; @@ -44,6 +45,8 @@ public class JobHelper { protected int monitorInterval = 60 * 60;// 1hour + protected ThreadLocal<LaJobRuntime> jobRuntimeLocal = new ThreadLocal<>(); + public void register(final ScheduledJob scheduledJob) { final JobManager jobManager = ComponentUtil.getJobManager(); jobManager.schedule(cron -> register(cron, scheduledJob)); @@ -186,4 +189,11 @@ public class JobHelper { } + public void setJobRuntime(LaJobRuntime runtime) { + jobRuntimeLocal.set(runtime); + } + + public LaJobRuntime getJobRuntime() { + return jobRuntimeLocal.get(); + } } diff --git a/src/main/java/org/codelibs/fess/job/CrawlJob.java b/src/main/java/org/codelibs/fess/job/CrawlJob.java index 5c9d06c2a..a348c1fd7 100644 --- a/src/main/java/org/codelibs/fess/job/CrawlJob.java +++ b/src/main/java/org/codelibs/fess/job/CrawlJob.java @@ -18,12 +18,10 @@ package org.codelibs.fess.job; import static org.codelibs.core.stream.StreamUtil.stream; import java.io.File; -import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; import javax.servlet.ServletContext; @@ -331,11 +329,7 @@ public class CrawlJob extends ExecJob { try { cmdList.add("-p"); cmdList.add(propFile.getAbsolutePath()); - try (FileOutputStream out = new FileOutputStream(propFile)) { - final Properties prop = new Properties(); - prop.putAll(ComponentUtil.getSystemProperties()); - prop.store(out, cmdList.toString()); - } + createSystemProperties(cmdList, propFile); final File baseDir = new File(servletContext.getRealPath("/WEB-INF")).getParentFile(); diff --git a/src/main/java/org/codelibs/fess/job/ExecJob.java b/src/main/java/org/codelibs/fess/job/ExecJob.java index dbdb533e6..606716dcf 100644 --- a/src/main/java/org/codelibs/fess/job/ExecJob.java +++ b/src/main/java/org/codelibs/fess/job/ExecJob.java @@ -16,16 +16,23 @@ package org.codelibs.fess.job; import java.io.File; +import java.io.FileOutputStream; import java.io.FilenameFilter; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.codelibs.core.timer.TimeoutManager; import org.codelibs.core.timer.TimeoutTask; +import org.codelibs.fess.Constants; +import org.codelibs.fess.es.config.exentity.ScheduledJob; import org.codelibs.fess.util.ComponentUtil; +import org.lastaflute.di.exception.IORuntimeException; +import org.lastaflute.job.LaJobRuntime; public abstract class ExecJob { @@ -157,4 +164,22 @@ public abstract class ExecJob { processTimeout = true; }, timeout, false); } + + protected void createSystemProperties(final List<String> cmdList, final File propFile) { + try (FileOutputStream out = new FileOutputStream(propFile)) { + final Properties prop = new Properties(); + prop.putAll(ComponentUtil.getSystemProperties()); + final LaJobRuntime jobRuntime = ComponentUtil.getJobHelper().getJobRuntime(); + if (jobRuntime != null) { + final ScheduledJob job = (ScheduledJob) jobRuntime.getParameterMap().get(Constants.SCHEDULED_JOB); + if (job != null) { + prop.setProperty("job.runtime.id", job.getId()); + prop.setProperty("job.runtime.name", job.getName()); + } + } + prop.store(out, cmdList.toString()); + } catch (final IOException e) { + throw new IORuntimeException(e); + } + } } \ No newline at end of file diff --git a/src/main/java/org/codelibs/fess/job/GenerateThumbnailJob.java b/src/main/java/org/codelibs/fess/job/GenerateThumbnailJob.java index eccb74070..5697a143e 100644 --- a/src/main/java/org/codelibs/fess/job/GenerateThumbnailJob.java +++ b/src/main/java/org/codelibs/fess/job/GenerateThumbnailJob.java @@ -18,10 +18,8 @@ package org.codelibs.fess.job; import static org.codelibs.core.stream.StreamUtil.stream; import java.io.File; -import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import javax.servlet.ServletContext; @@ -212,11 +210,7 @@ public class GenerateThumbnailJob extends ExecJob { try { cmdList.add("-p"); cmdList.add(propFile.getAbsolutePath()); - try (FileOutputStream out = new FileOutputStream(propFile)) { - final Properties prop = new Properties(); - prop.putAll(ComponentUtil.getSystemProperties()); - prop.store(out, cmdList.toString()); - } + createSystemProperties(cmdList, propFile); final File baseDir = new File(servletContext.getRealPath("/WEB-INF")).getParentFile(); diff --git a/src/main/java/org/codelibs/fess/job/SuggestJob.java b/src/main/java/org/codelibs/fess/job/SuggestJob.java index ea8e6c55f..bda2623b8 100644 --- a/src/main/java/org/codelibs/fess/job/SuggestJob.java +++ b/src/main/java/org/codelibs/fess/job/SuggestJob.java @@ -18,10 +18,8 @@ package org.codelibs.fess.job; import static org.codelibs.core.stream.StreamUtil.stream; import java.io.File; -import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import javax.servlet.ServletContext; @@ -194,11 +192,7 @@ public class SuggestJob extends ExecJob { try { cmdList.add("-p"); cmdList.add(propFile.getAbsolutePath()); - try (FileOutputStream out = new FileOutputStream(propFile)) { - final Properties prop = new Properties(); - prop.putAll(ComponentUtil.getSystemProperties()); - prop.store(out, cmdList.toString()); - } + createSystemProperties(cmdList, propFile); final File baseDir = new File(servletContext.getRealPath("/WEB-INF")).getParentFile(); diff --git a/src/main/java/org/codelibs/fess/mylasta/mail/CrawlerPostcard.java b/src/main/java/org/codelibs/fess/mylasta/mail/CrawlerPostcard.java index 9b144b8e9..875a1921b 100644 --- a/src/main/java/org/codelibs/fess/mylasta/mail/CrawlerPostcard.java +++ b/src/main/java/org/codelibs/fess/mylasta/mail/CrawlerPostcard.java @@ -50,9 +50,9 @@ public class CrawlerPostcard extends LaTypicalPostcard { @Override protected String[] getPropertyNames() { - return new String[] { "hostname", "webFsCrawlStartTime", "webFsCrawlEndTime", "webFsCrawlExecTime", "webFsIndexExecTime", - "webFsIndexSize", "dataCrawlStartTime", "dataCrawlEndTime", "dataCrawlExecTime", "dataIndexExecTime", "dataIndexSize", - "crawlerStartTime", "crawlerEndTime", "crawlerExecTime", "status" }; + return new String[] { "hostname", "jobname", "webFsCrawlStartTime", "webFsCrawlEndTime", "webFsCrawlExecTime", + "webFsIndexExecTime", "webFsIndexSize", "dataCrawlStartTime", "dataCrawlEndTime", "dataCrawlExecTime", "dataIndexExecTime", + "dataIndexSize", "crawlerStartTime", "crawlerEndTime", "crawlerExecTime", "status" }; } // =================================================================================== @@ -109,6 +109,15 @@ public class CrawlerPostcard extends LaTypicalPostcard { registerVariable("hostname", hostname); } + /** + * Set the value of jobname, used in parameter comment. <br> + * Even if empty string, treated as empty plainly. So "IF pmb != null" is false if empty. + * @param jobname The parameter value of jobname. (NotNull) + */ + public void setJobname(String jobname) { + registerVariable("jobname", jobname); + } + /** * Set the value of webFsCrawlStartTime, used in parameter comment. <br> * Even if empty string, treated as empty plainly. So "IF pmb != null" is false if empty. diff --git a/src/main/resources/mail/crawler.dfmail b/src/main/resources/mail/crawler.dfmail index 4dc8c0a1c..e01fc21b7 100644 --- a/src/main/resources/mail/crawler.dfmail +++ b/src/main/resources/mail/crawler.dfmail @@ -6,6 +6,7 @@ subject: [FESS] Crawler completed: /*pmb.hostname*/ >>> --- Server Info --- Host Name: /*pmb.hostname:orElse('Unknown')*/ +Job Name: /*pmb.jobname:orElse('Unknown')*/ --- Web/FileSystem Crawler --- Start Time: /*pmb.webFsCrawlStartTime:orElse('-')*/ -- GitLab