#644 add lastUpdated to job_log
This commit is contained in:
parent
9d19836b1c
commit
2abf3fad4a
10 changed files with 236 additions and 0 deletions
|
@ -152,6 +152,9 @@
|
|||
"target" : {
|
||||
"type" : "string",
|
||||
"index" : "not_analyzed"
|
||||
},
|
||||
"lastUpdated" : {
|
||||
"type" : "long"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
package org.codelibs.fess.app.job;
|
||||
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.es.config.exentity.JobLog;
|
||||
import org.codelibs.fess.es.config.exentity.ScheduledJob;
|
||||
|
@ -74,9 +75,11 @@ public class ScriptExecutorJob implements LaJob {
|
|||
return;
|
||||
}
|
||||
|
||||
TimeoutTask task = null;
|
||||
try {
|
||||
if (scheduledJob.isLoggingEnabled()) {
|
||||
jobHelper.store(jobLog);
|
||||
task = jobHelper.startMonitorTask(jobLog);
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
|
@ -102,6 +105,13 @@ public class ScriptExecutorJob implements LaJob {
|
|||
jobLog.setJobStatus(Constants.FAIL);
|
||||
jobLog.setScriptResult(systemHelper.abbreviateLongText(t.getLocalizedMessage()));
|
||||
} finally {
|
||||
if (task != null) {
|
||||
try {
|
||||
task.stop();
|
||||
} catch (Exception e) {
|
||||
logger.warn("Failed to stop " + jobLog, e);
|
||||
}
|
||||
}
|
||||
jobLog.setEndTime(ComponentUtil.getSystemHelper().getCurrentTimeAsLong());
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("jobLog: " + jobLog);
|
||||
|
|
|
@ -81,6 +81,7 @@ public abstract class BsJobLogBhv extends EsAbstractBehavior<JobLog, JobLogCB> {
|
|||
result.setScriptType(DfTypeUtil.toString(source.get("scriptType")));
|
||||
result.setStartTime(DfTypeUtil.toLong(source.get("startTime")));
|
||||
result.setTarget(DfTypeUtil.toString(source.get("target")));
|
||||
result.setLastUpdated(DfTypeUtil.toLong(source.get("lastUpdated")));
|
||||
return result;
|
||||
} catch (InstantiationException | IllegalAccessException e) {
|
||||
final String msg = "Cannot create a new instance: " + entityType.getName();
|
||||
|
|
|
@ -61,6 +61,9 @@ public class BsJobLog extends EsAbstractEntity {
|
|||
/** target */
|
||||
protected String target;
|
||||
|
||||
/** lastUpdated */
|
||||
protected Long lastUpdated;
|
||||
|
||||
// [Referrers] *comment only
|
||||
|
||||
// ===================================================================================
|
||||
|
@ -106,6 +109,9 @@ public class BsJobLog extends EsAbstractEntity {
|
|||
if (target != null) {
|
||||
sourceMap.put("target", target);
|
||||
}
|
||||
if (lastUpdated != null) {
|
||||
sourceMap.put("lastUpdated", lastUpdated);
|
||||
}
|
||||
return sourceMap;
|
||||
}
|
||||
|
||||
|
@ -123,6 +129,7 @@ public class BsJobLog extends EsAbstractEntity {
|
|||
sb.append(dm).append(scriptType);
|
||||
sb.append(dm).append(startTime);
|
||||
sb.append(dm).append(target);
|
||||
sb.append(dm).append(lastUpdated);
|
||||
if (sb.length() > dm.length()) {
|
||||
sb.delete(0, dm.length());
|
||||
}
|
||||
|
@ -212,4 +219,14 @@ public class BsJobLog extends EsAbstractEntity {
|
|||
registerModifiedProperty("target");
|
||||
this.target = value;
|
||||
}
|
||||
|
||||
public Long getLastUpdated() {
|
||||
checkSpecifiedProperty("lastUpdated");
|
||||
return lastUpdated;
|
||||
}
|
||||
|
||||
public void setLastUpdated(Long value) {
|
||||
registerModifiedProperty("lastUpdated");
|
||||
this.lastUpdated = value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,8 @@ public class JobLogDbm extends AbstractDBMeta {
|
|||
"scriptType");
|
||||
setupEpg(_epgMap, et -> ((JobLog) et).getStartTime(), (et, vl) -> ((JobLog) et).setStartTime(DfTypeUtil.toLong(vl)), "startTime");
|
||||
setupEpg(_epgMap, et -> ((JobLog) et).getTarget(), (et, vl) -> ((JobLog) et).setTarget(DfTypeUtil.toString(vl)), "target");
|
||||
setupEpg(_epgMap, et -> ((JobLog) et).getLastUpdated(), (et, vl) -> ((JobLog) et).setLastUpdated(DfTypeUtil.toLong(vl)),
|
||||
"lastUpdated");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -142,6 +144,8 @@ public class JobLogDbm extends AbstractDBMeta {
|
|||
false, "Long", 0, 0, null, false, null, null, null, null, null, false);
|
||||
protected final ColumnInfo _columnTarget = cci("target", "target", null, null, String.class, "target", null, false, false, false,
|
||||
"String", 0, 0, null, false, null, null, null, null, null, false);
|
||||
protected final ColumnInfo _columnLastUpdated = cci("lastUpdated", "lastUpdated", null, null, Long.class, "lastUpdated", null, false,
|
||||
false, false, "Long", 0, 0, null, false, null, null, null, null, null, false);
|
||||
|
||||
public ColumnInfo columnEndTime() {
|
||||
return _columnEndTime;
|
||||
|
@ -175,6 +179,10 @@ public class JobLogDbm extends AbstractDBMeta {
|
|||
return _columnTarget;
|
||||
}
|
||||
|
||||
public ColumnInfo columnLastUpdated() {
|
||||
return _columnLastUpdated;
|
||||
}
|
||||
|
||||
protected List<ColumnInfo> ccil() {
|
||||
List<ColumnInfo> ls = newArrayList();
|
||||
ls.add(columnEndTime());
|
||||
|
@ -185,6 +193,7 @@ public class JobLogDbm extends AbstractDBMeta {
|
|||
ls.add(columnScriptType());
|
||||
ls.add(columnStartTime());
|
||||
ls.add(columnTarget());
|
||||
ls.add(columnLastUpdated());
|
||||
return ls;
|
||||
}
|
||||
|
||||
|
|
|
@ -178,5 +178,9 @@ public class BsJobLogCB extends EsAbstractConditionBean {
|
|||
public void columnTarget() {
|
||||
doColumn("target");
|
||||
}
|
||||
|
||||
public void columnLastUpdated() {
|
||||
doColumn("lastUpdated");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1440,4 +1440,156 @@ public abstract class BsJobLogCQ extends EsAbstractConditionQuery {
|
|||
return this;
|
||||
}
|
||||
|
||||
public void setLastUpdated_Equal(Long lastUpdated) {
|
||||
setLastUpdated_Term(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Equal(Long lastUpdated, ConditionOptionCall<TermQueryBuilder> opLambda) {
|
||||
setLastUpdated_Term(lastUpdated, opLambda);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Term(Long lastUpdated) {
|
||||
setLastUpdated_Term(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Term(Long lastUpdated, ConditionOptionCall<TermQueryBuilder> opLambda) {
|
||||
TermQueryBuilder builder = regTermQ("lastUpdated", lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_NotEqual(Long lastUpdated) {
|
||||
setLastUpdated_NotTerm(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_NotTerm(Long lastUpdated) {
|
||||
setLastUpdated_NotTerm(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_NotEqual(Long lastUpdated, ConditionOptionCall<BoolQueryBuilder> opLambda) {
|
||||
setLastUpdated_NotTerm(lastUpdated, opLambda);
|
||||
}
|
||||
|
||||
public void setLastUpdated_NotTerm(Long lastUpdated, ConditionOptionCall<BoolQueryBuilder> opLambda) {
|
||||
not(not -> not.setLastUpdated_Term(lastUpdated), opLambda);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Terms(Collection<Long> lastUpdatedList) {
|
||||
setLastUpdated_Terms(lastUpdatedList, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Terms(Collection<Long> lastUpdatedList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
|
||||
TermsQueryBuilder builder = regTermsQ("lastUpdated", lastUpdatedList);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_InScope(Collection<Long> lastUpdatedList) {
|
||||
setLastUpdated_Terms(lastUpdatedList, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_InScope(Collection<Long> lastUpdatedList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
|
||||
setLastUpdated_Terms(lastUpdatedList, opLambda);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Match(Long lastUpdated) {
|
||||
setLastUpdated_Match(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Match(Long lastUpdated, ConditionOptionCall<MatchQueryBuilder> opLambda) {
|
||||
MatchQueryBuilder builder = regMatchQ("lastUpdated", lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_MatchPhrase(Long lastUpdated) {
|
||||
setLastUpdated_MatchPhrase(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_MatchPhrase(Long lastUpdated, ConditionOptionCall<MatchQueryBuilder> opLambda) {
|
||||
MatchQueryBuilder builder = regMatchPhraseQ("lastUpdated", lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_MatchPhrasePrefix(Long lastUpdated) {
|
||||
setLastUpdated_MatchPhrasePrefix(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_MatchPhrasePrefix(Long lastUpdated, ConditionOptionCall<MatchQueryBuilder> opLambda) {
|
||||
MatchQueryBuilder builder = regMatchPhrasePrefixQ("lastUpdated", lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_Fuzzy(Long lastUpdated) {
|
||||
setLastUpdated_Fuzzy(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_Fuzzy(Long lastUpdated, ConditionOptionCall<FuzzyQueryBuilder> opLambda) {
|
||||
FuzzyQueryBuilder builder = regFuzzyQ("lastUpdated", lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_GreaterThan(Long lastUpdated) {
|
||||
setLastUpdated_GreaterThan(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_GreaterThan(Long lastUpdated, ConditionOptionCall<RangeQueryBuilder> opLambda) {
|
||||
RangeQueryBuilder builder = regRangeQ("lastUpdated", ConditionKey.CK_GREATER_THAN, lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_LessThan(Long lastUpdated) {
|
||||
setLastUpdated_LessThan(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_LessThan(Long lastUpdated, ConditionOptionCall<RangeQueryBuilder> opLambda) {
|
||||
RangeQueryBuilder builder = regRangeQ("lastUpdated", ConditionKey.CK_LESS_THAN, lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_GreaterEqual(Long lastUpdated) {
|
||||
setLastUpdated_GreaterEqual(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_GreaterEqual(Long lastUpdated, ConditionOptionCall<RangeQueryBuilder> opLambda) {
|
||||
RangeQueryBuilder builder = regRangeQ("lastUpdated", ConditionKey.CK_GREATER_EQUAL, lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastUpdated_LessEqual(Long lastUpdated) {
|
||||
setLastUpdated_LessEqual(lastUpdated, null);
|
||||
}
|
||||
|
||||
public void setLastUpdated_LessEqual(Long lastUpdated, ConditionOptionCall<RangeQueryBuilder> opLambda) {
|
||||
RangeQueryBuilder builder = regRangeQ("lastUpdated", ConditionKey.CK_LESS_EQUAL, lastUpdated);
|
||||
if (opLambda != null) {
|
||||
opLambda.callback(builder);
|
||||
}
|
||||
}
|
||||
|
||||
public BsJobLogCQ addOrderBy_LastUpdated_Asc() {
|
||||
regOBA("lastUpdated");
|
||||
return this;
|
||||
}
|
||||
|
||||
public BsJobLogCQ addOrderBy_LastUpdated_Desc() {
|
||||
regOBD("lastUpdated");
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ public class JobLog extends BsJobLog {
|
|||
setScriptType(scheduledJob.getScriptType());
|
||||
setScriptData(scheduledJob.getScriptData());
|
||||
setStartTime(ComponentUtil.getSystemHelper().getCurrentTimeAsLong());
|
||||
setLastUpdated(ComponentUtil.getSystemHelper().getCurrentTimeAsLong());
|
||||
setJobStatus(Constants.RUNNING);
|
||||
final String myName = ComponentUtil.getFessConfig().getSchedulerTargetName();
|
||||
setTarget(StringUtil.isNotBlank(myName) ? myName : Constants.DEFAULT_JOB_TARGET);
|
||||
|
|
|
@ -19,6 +19,9 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.timer.TimeoutManager;
|
||||
import org.codelibs.core.timer.TimeoutTarget;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.es.config.exbhv.JobLogBhv;
|
||||
import org.codelibs.fess.es.config.exbhv.ScheduledJobBhv;
|
||||
|
@ -38,6 +41,7 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
public class JobHelper {
|
||||
private static final Logger logger = LoggerFactory.getLogger(JobHelper.class);
|
||||
private int monitorInterval = 60 * 60;// 1hour
|
||||
|
||||
public void register(final ScheduledJob scheduledJob) {
|
||||
final JobManager jobManager = ComponentUtil.getJobManager();
|
||||
|
@ -132,4 +136,36 @@ public class JobHelper {
|
|||
});
|
||||
}
|
||||
|
||||
public TimeoutTask startMonitorTask(final JobLog jobLog) {
|
||||
TimeoutTarget target = new MonitorTarget(jobLog);
|
||||
return TimeoutManager.getInstance().addTimeoutTarget(target, monitorInterval, true);
|
||||
}
|
||||
|
||||
public void setMonitorInterval(int monitorInterval) {
|
||||
this.monitorInterval = monitorInterval;
|
||||
}
|
||||
|
||||
static class MonitorTarget implements TimeoutTarget {
|
||||
|
||||
private JobLog jobLog;
|
||||
|
||||
public MonitorTarget(final JobLog jobLog) {
|
||||
this.jobLog = jobLog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void expired() {
|
||||
if (jobLog.getEndTime() == null) {
|
||||
jobLog.setLastUpdated(ComponentUtil.getSystemHelper().getCurrentTimeAsLong());
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Update " + jobLog);
|
||||
}
|
||||
ComponentUtil.getComponent(JobLogBhv.class).insertOrUpdate(jobLog, op -> {
|
||||
op.setRefresh(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,9 @@
|
|||
"type": "string",
|
||||
"index": "not_analyzed"
|
||||
},
|
||||
"lastUpdated": {
|
||||
"type": "long"
|
||||
},
|
||||
"startTime": {
|
||||
"type": "long"
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue