package org.opennaas.extensions.queuemanager.shell; import java.util.List; import org.apache.felix.gogo.commands.Argument; import org.apache.felix.gogo.commands.Command; import org.apache.felix.gogo.commands.Option; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.IResourceIdentifier; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.action.ActionResponse; import org.opennaas.core.resources.command.Response; import org.opennaas.core.resources.queue.QueueResponse; import org.opennaas.core.resources.shell.GenericKarafCommand; import org.opennaas.extensions.queuemanager.IQueueManagerCapability; import org.opennaas.extensions.queuemanager.QueueManager; @Command(scope = "queue", name = "execute", description = "Execute all actions in queue") public class ExecuteCommand extends GenericKarafCommand { @Argument(index = 0, name = "resourceType:resourceName", description = "Name of the resource owning the queue", required = true, multiValued = false) private String resourceId; @Option(name = "--debug", aliases = { "-d" }, description = "Print execution data verbosely.") private boolean debug; @Override protected Object doExecute() throws Exception { printInitCommand("Execute all actions in queue"); IQueueManagerCapability queue; try { IResourceManager manager = getResourceManager(); String[] argsRouterName = new String[2]; try { argsRouterName = splitResourceName(resourceId); } catch (Exception e) { printError(e.getMessage()); printEndCommand(); return -1; } IResourceIdentifier resourceIdentifier = null; resourceIdentifier = manager.getIdentifierFromResourceName(argsRouterName[0], argsRouterName[1]); /* validate resource identifier */ if (resourceIdentifier == null) { printError("Could not get resource with name: " + argsRouterName[0] + ":" + argsRouterName[1]); printEndCommand(); return -1; } IResource resource = manager.getResource(resourceIdentifier); validateResource(resource); queue = (IQueueManagerCapability) getCapability(resource.getCapabilities(), QueueManager.QUEUE); if (queue == null) { printError("Could not found capability " + QueueManager.QUEUE + " in resource " + resourceId); return -1; } } catch (Exception e) { printError("Error getting queue."); printError(e); printEndCommand(); return -1; } try { printSymbolWithoutDoubleLine("Executing queue... "); QueueResponse queueResponse = queue.execute(); if (queueResponse.isOk()) printSymbol("OK"); else printSymbol("ERROR"); printSymbol("Elapsed time " + queueResponse.getTotalTime() + " ms"); printSymbol("Queue Report:"); newLine(); if (debug) { printDebug(queueResponse); } else { printOverview(queueResponse); } newLine(); } catch (Exception e) { printSymbol(""); // to start a new line printError("Error executing queue."); printError(e); printEndCommand(); return -1; } printEndCommand(); return null; } private void printDebug(QueueResponse queueResponse) { if (queueResponse.getRestoreResponse().getStatus() != ActionResponse.STATUS.PENDING) { printSymbol("WARNING IT WAS NECESARY TO RESTORE THE CONFIGURATION!!"); printActionResponseExtended(queueResponse.restoreResponse); } // newLine(); printActionResponseExtended(queueResponse.getPrepareResponse()); // newLine(); for (ActionResponse actionResponse : queueResponse.getResponses()) { printActionResponseExtended(actionResponse); // newLine(); } printActionResponseExtended(queueResponse.getConfirmResponse()); printActionResponseExtended(queueResponse.getRefreshResponse()); } private void printOverview(QueueResponse queueResponse) { if (queueResponse.getRestoreResponse().getStatus() != ActionResponse.STATUS.PENDING) { printSymbol("WARNING IT WAS NECESARY TO RESTORE THE CONFIGURATION!!"); printActionResponseBrief(queueResponse.restoreResponse); } // newLine(); printActionResponseBrief(queueResponse.getPrepareResponse()); // newLine(); for (ActionResponse actionResponse : queueResponse.getResponses()) { printActionResponseBrief(actionResponse); // newLine(); } printActionResponseBrief(queueResponse.getConfirmResponse()); printActionResponseBrief(queueResponse.getRefreshResponse()); } private void printActionResponseBrief(ActionResponse actionResponse) { printSymbol("--- actionid: " + actionResponse.getActionID() + ", status: " + actionResponse.getStatus() + " ---"); if (actionResponse.getInformation() != null) { printSymbol("Information: " + actionResponse.getInformation()); } List<Response> responses = actionResponse.getResponses(); /* create new action */ String[] titles = { "Command Name", "Status" }; String[][] matrix = new String[responses.size()][2]; int num = 0; for (Response response : responses) { String commandName = response.getCommandName(); String params[] = { commandName, response.getStatus().toString() }; matrix[num] = params; num++; } super.printTable(titles, matrix, -1); } private void printActionResponseExtended(ActionResponse actionResponse) { printSymbol("--- actionid: " + actionResponse.getActionID() + ", status: " + actionResponse.getStatus() + " ---"); if (actionResponse.getInformation() != null) { printSymbol("Information: " + actionResponse.getInformation()); } List<Response> responses = actionResponse.getResponses(); /* create new action */ for (Response response : responses) { printSymbol("Command: " + response.getCommandName()); printSymbol("Status: " + response.getStatus().toString()); printSymbol("Message: " + response.getSentMessage()); printSymbol("Information: " + response.getInformation()); for (String error : response.getErrors()) { printSymbol("Error: " + error); } printSymbol(""); } } }