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 2be61034d7733b54a92a9b90c3b0ef066045e132..7bfa3211ed3130a0181bad71d3a0bddced85b078 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 ae18f29ae2de9926f94c45f940a5face7da23efb..8a40a260c5ac3f3a6be51bc33a51bf040725f11c 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 12c6ae491904c85a96f3f0c2433d0d3357c354ad..ad538da3aa37830afa103ed4dac13fbff6f863d8 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 5c9d06c2ab84b64b74d45938c99f152c329619a7..a348c1fd7036d98a5557b2f725bedcce1f41e830 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 dbdb533e6927f3af3442161db39c55af602c997c..606716dcf4230b36e51d2b2c76bf24520e75c1a4 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 eccb7407039dad2fc28d47ca20e8c7ee976c3840..5697a143e4617af7c3fbe214038b766538a44901 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 ea8e6c55fb9cc8b0da4d498cca41835e8c5ff6ed..bda2623b869e12868ec79652c229e1ed4eb963ae 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 9b144b8e99b61262ed14b438d75da247fb724ff8..875a1921b801177cb7fb346d79e333c2e78671fe 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 4dc8c0a1c9e2e65ac1ae7d24f0c23258b15d08c9..e01fc21b7fbfbf27f5f7cda5ed26e564f75dff22 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('-')*/