package io.cattle.platform.task.dao.impl;
import static io.cattle.platform.core.model.tables.TaskInstanceTable.*;
import static io.cattle.platform.core.model.tables.TaskTable.*;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.core.model.Task;
import io.cattle.platform.db.jooq.dao.impl.AbstractJooqDao;
import io.cattle.platform.task.dao.TaskDao;
import java.util.Date;
import org.jooq.exception.DataAccessException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.netflix.config.DynamicLongProperty;
public class TaskDaoImpl extends AbstractJooqDao implements TaskDao {
private static Logger log = LoggerFactory.getLogger(TaskDaoImpl.class);
private static DynamicLongProperty AFTER_SECONDS = ArchaiusUtil.getLong("task.purge.after.seconds");
public void purgeOld() {
int deleted = create()
.delete(TASK_INSTANCE)
.where(
TASK_INSTANCE.START_TIME.lt(new Date(System.currentTimeMillis() - AFTER_SECONDS.get() * 1000)))
.execute();
if ( deleted > 0 ) {
log.info("Deleted [{}] task instance records", deleted);
}
}
@Override
public void register(String name) {
Task task = getTask(name);
if ( task == null ) {
try {
create()
.insertInto(TASK, TASK.NAME)
.values(name)
.execute();
} catch ( DataAccessException e ) {
if ( getTask(name) == null ) {
throw e;
}
}
}
}
protected Task getTask(String name) {
return create()
.selectFrom(TASK)
.where(TASK.NAME.eq(name))
.fetchOne();
}
}