package io.cattle.platform.task.eventing.impl;
import io.cattle.platform.eventing.lock.EventLock;
import io.cattle.platform.framework.event.ExecuteTask;
import io.cattle.platform.lock.LockCallbackNoReturn;
import io.cattle.platform.lock.LockManager;
import io.cattle.platform.lock.definition.LockDefinition;
import io.cattle.platform.task.TaskManager;
import io.cattle.platform.task.eventing.TaskManagerEventListener;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TaskManagerEventListenerImpl implements TaskManagerEventListener {
private static final Logger log = LoggerFactory.getLogger(TaskManagerEventListenerImpl.class);
TaskManager taskManager;
LockManager lockManager;
@Override
public void executeTask(ExecuteTask event) {
final String name = event.getData().getName();
final Runnable runnable = taskManager.getRunnable(name);
if (runnable != null) {
lockManager.lock(getLock(event), new LockCallbackNoReturn() {
@Override
public void doWithLockNoResult() {
log.info("Running task [{}]", name);
runnable.run();
}
});
}
}
protected LockDefinition getLock(ExecuteTask event) {
if (taskManager.shouldLock(event.getName())) {
return new EventLock(event);
} else {
return null;
}
}
public TaskManager getTaskManager() {
return taskManager;
}
@Inject
public void setTaskManager(TaskManager taskManager) {
this.taskManager = taskManager;
}
public LockManager getLockManager() {
return lockManager;
}
@Inject
public void setLockManager(LockManager lockManager) {
this.lockManager = lockManager;
}
}