#644 add lastUpdated to job_log

This commit is contained in:
Shinsuke Sugaya 2016-09-11 23:20:34 +09:00
parent 9d19836b1c
commit 2abf3fad4a
10 changed files with 236 additions and 0 deletions

View file

@ -152,6 +152,9 @@
"target" : {
"type" : "string",
"index" : "not_analyzed"
},
"lastUpdated" : {
"type" : "long"
}
}
},

View file

@ -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);

View file

@ -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();

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -178,5 +178,9 @@ public class BsJobLogCB extends EsAbstractConditionBean {
public void columnTarget() {
doColumn("target");
}
public void columnLastUpdated() {
doColumn("lastUpdated");
}
}
}

View file

@ -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;
}
}

View file

@ -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);

View file

@ -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);
});
}
}
}
}

View file

@ -31,6 +31,9 @@
"type": "string",
"index": "not_analyzed"
},
"lastUpdated": {
"type": "long"
},
"startTime": {
"type": "long"
},