package com.openseedbox.jobs;
import com.openseedbox.code.Util;
import com.openseedbox.models.EventBase;
import com.openseedbox.models.JobEvent;
import java.util.Date;
import play.Logger;
import play.Play;
import play.Play.Mode;
public abstract class LoggedJob<T extends EventBase> extends GenericJob {
@Override
protected GenericJobResult runJob() throws Exception {
EventBase eb = getJobEvent();
eb.setStartDate(new Date());
long startMillis = System.currentTimeMillis();
GenericJobResult res = super.runJob();
long endMillis = System.currentTimeMillis();
eb.setDurationMilliseconds(endMillis - startMillis);
eb.setCompletionDate(new Date());
if (res.hasError()) {
eb.setSuccessful(false);
eb.setStackTrace(Util.getStackTrace(res.getError()));
if (Play.mode == Mode.DEV) {
Logger.error(res.getError(), "Error executing job");
}
} else {
eb.setSuccessful(true);
}
logResult(res, (T) eb);
return res;
}
protected T getJobEvent() {
return (T) new JobEvent(this);
}
protected void logResult(GenericJobResult res, T event) {
event.update();
}
protected void sleep(int seconds) {
try {
Thread.sleep(seconds * 1000);
} catch (Exception ex) {
//fuck off java
}
}
}