/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package util;
import static util.BourneUtil.getViprClient;
import java.net.URI;
import java.util.List;
import com.emc.storageos.model.TaskResourceRep;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.ViPRSystemClient;
import com.emc.vipr.client.exceptions.ViPRHttpException;
import com.emc.vipr.client.system.LogMessageProcessor;
import com.emc.vipr.model.sys.healthmonitor.NodeHealth;
import com.emc.vipr.model.sys.logging.LogMessage;
import com.google.common.collect.Lists;
public class TaskUtils {
private static Integer LOGS_MAX_COUNT = 10000;
private static final List<String> LOG_NAMES = Lists.newArrayList("apisvc", "controllersvc", "syssvc", "geosvc");
private static Integer LOG_SEVERITY = 7; // INFO
public static List<TaskResourceRep> getTasks(URI resourceId) {
if (resourceId != null) {
ViPRCoreClient client = getViprClient();
return client.tasks().findByResource(resourceId);
}
return null;
}
/**
* Returns the Details of a specified task or NULL if the task doesn't exist
*
* @param taskId Id of the task
* @return The Task details or NULL if the task doesn't exist
*/
public static TaskResourceRep getTask(URI taskId) {
if (taskId != null) {
try {
return getViprClient().tasks().get(taskId);
} catch (ViPRHttpException e) {
// Anything other than 404 is an error
if (e.getHttpCode() != 404) {
throw e;
}
}
}
return null;
}
public static List<LogMessage> getTaskLogs(URI taskId) {
TaskResourceRep task = getTask(taskId);
return getTaskLogs(task);
}
public static List<LogMessage> getTaskLogs(TaskResourceRep task) {
if (task == null) {
return null;
}
ViPRSystemClient systemClient = BourneUtil.getSysClient();
List<String> nodeIds = Lists.newArrayList();
List<NodeHealth> nodeHealthList = systemClient.health().getHealth().getNodeHealthList();
if (nodeHealthList != null) {
for (NodeHealth nodeHealth : nodeHealthList) {
if (nodeHealth != null) {
nodeIds.add(nodeHealth.getNodeId());
}
}
}
String start = null;
if (task.getStartTime() != null) {
start = Long.toString(task.getStartTime().getTimeInMillis());
}
String end = null;
if (task.getEndTime() != null) {
end = Long.toString(task.getEndTime().getTimeInMillis());
}
String regex = "(?i).*" + task.getOpId() + ".*";
final List<LogMessage> logMessages = Lists.newArrayList();
LogMessageProcessor processor = new LogMessageProcessor() {
@Override
public void processItem(LogMessage logMessage) throws Exception {
logMessages.add(logMessage);
}
};
systemClient.logs().getAsItems(processor, nodeIds, null, LOG_NAMES, LOG_SEVERITY, start, end, regex, LOGS_MAX_COUNT);
return logMessages;
}
}