package org.ovirt.engine.core.vdsbroker.vdsbroker;
import java.util.ArrayList;
import java.util.Map;
import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
import org.ovirt.engine.core.compat.Guid;
public class HSMGetAllTasksInfoVDSCommand<P extends VdsIdVDSCommandParametersBase> extends VdsBrokerCommand<P> {
private TaskInfoListReturn _result;
private static final String VERB_KEY = "verb";
public HSMGetAllTasksInfoVDSCommand(P parameters) {
super(parameters);
}
@Override
protected void executeVdsBrokerCommand() {
_result = getBroker().getAllTasksInfo();
proceedProxyReturnValue();
setReturnValue(parseTaskInfoList(_result.taskInfoList));
}
protected ArrayList<AsyncTaskCreationInfo> parseTaskInfoList(Map<String, Map<String, String>> taskInfoList) {
try {
ArrayList<AsyncTaskCreationInfo> result = new ArrayList<>(taskInfoList.size());
for (Map.Entry<String, Map<String, String>> entry : taskInfoList.entrySet()) {
Guid taskID = new Guid(entry.getKey());
Map<String, String> taskInfo = entry.getValue();
AsyncTaskCreationInfo task = parseTaskInfo(taskInfo, taskID);
if (task != null) {
result.add(task);
}
}
return result;
} catch (RuntimeException exp) {
log.error("Could not parse task info list: '{}'", taskInfoList);
throw exp;
}
}
protected AsyncTaskCreationInfo parseTaskInfo(Map<String, String> taskInfo, Guid taskID) {
try {
String deTaskType = taskInfo.get(VERB_KEY);
AsyncTaskType taskType;
try {
taskType = AsyncTaskType.valueOf(deTaskType);
} catch (Exception e) {
taskType = AsyncTaskType.unknown;
log.warn("The task type in the vdsm response is '{}' and does not " +
" appear in the AsyncTaskType enum", deTaskType);
}
AsyncTaskCreationInfo tempVar = new AsyncTaskCreationInfo();
tempVar.setVdsmTaskId(taskID);
tempVar.setTaskType(taskType);
AsyncTaskCreationInfo task = tempVar;
return task;
}
catch (RuntimeException e) {
log.error("Could not parse single task info: '{}' (possibly specific task should not be monitored): {}",
taskInfo, e.getMessage());
log.debug("Exception", e);
return null;
}
}
@Override
protected Status getReturnStatus() {
return _result.getStatus();
}
@Override
protected Object getReturnValueFromBroker() {
return _result;
}
}