package org.opennaas.core.protocols.sessionmanager.shell; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MINUTES; 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.protocols.sessionmanager.ProtocolSessionManager; import org.opennaas.core.resources.IResourceIdentifier; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.protocol.IProtocolManager; import org.opennaas.core.resources.protocol.IProtocolSession.Status; import org.opennaas.core.resources.protocol.ProtocolSessionContext; import org.opennaas.core.resources.shell.GenericKarafCommand; /** * List the device ids registere do the protocol manager * * @author Pau Minoves * */ @Command(scope = "protocols", name = "list", description = "List devices to which we have a live protocol session.") public class ListCommand extends GenericKarafCommand { IProtocolManager protocolManager = null; @Option(name = "--verbose", aliases = { "-v" }, description = "Do not only print list devices to which we have a live protocol session, print all connections information.") boolean verbose; @Option(name = "--protocols", aliases = { "-p" }, description = "Print supported protocols.") boolean optionProtocols; @Argument(name = "resourceType:resourceName", index = 0, required = false, description = "If present, only connections to this device will be listed.") String resourceId; @Override protected Object doExecute() throws Exception { printInitCommand("list protocols"); protocolManager = getProtocolManager(); IResourceManager manager = getResourceManager(); if (optionProtocols) { printInfo("Supported protocols:"); for (String protocol : protocolManager.getAllSupportedProtocols()) { printInfo(protocol); } printEndCommand(); return null; } if (resourceId != null && !resourceId.equalsIgnoreCase("")) { String[] argsRouterName = new String[2]; try { argsRouterName = splitResourceName(resourceId); } catch (Exception e) { printError(e.getMessage()); printEndCommand(); return -1; } IResourceIdentifier resourceIdentifier = manager.getIdentifierFromResourceName(argsRouterName[0], argsRouterName[1]); ProtocolSessionManager sessionManager = (ProtocolSessionManager) protocolManager.getProtocolSessionManager(resourceIdentifier.getId()); if (protocolManager.getProtocolSessionManager(resourceIdentifier.getId()).getAllProtocolSessionIds().isEmpty()) { printInfo(argsRouterName[1] + " didn't have any live session. Use protocol:add command to active."); printEndCommand(); return null; } for (String session : protocolManager.getProtocolSessionManager(resourceIdentifier.getId()).getAllProtocolSessionIds()) { ProtocolSessionContext context = sessionManager.getSessionById(session, sessionManager.isLocked(session)) .getSessionContext(); printInfo(doubleTab + "Protocol: " + context.getSessionParameters().get(context.PROTOCOL)); if (verbose) { String age; long millis; if (sessionManager.isLocked(session)) { age = "(locked)"; } else { millis = System.currentTimeMillis() - sessionManager.getSessionlastUsed(session); age = MILLISECONDS.toMinutes(millis) + ":" + (MILLISECONDS.toSeconds(millis) - MINUTES.toSeconds(MILLISECONDS .toMinutes(millis))); } Status sessionStatus = sessionManager.getSessionById(session, sessionManager.isLocked(session)).getStatus(); printInfo(doubleTab + " Session ID: " + session + " STATUS: " + sessionStatus + " (Not used in: " + age + ")"); } } printEndCommand(); return null; } for (String device : protocolManager.getAllResourceIds()) { ProtocolSessionManager sessionManager = (ProtocolSessionManager) protocolManager.getProtocolSessionManager(device); if (!sessionManager.getAllProtocolSessionIds().isEmpty()) { String name = manager.getNameFromResourceID(device); printInfo(name); sessionManager = (ProtocolSessionManager) protocolManager.getProtocolSessionManager(device); for (String session : sessionManager.getAllProtocolSessionIds()) { ProtocolSessionContext context = sessionManager.getSessionById(session, sessionManager.isLocked(session)) .getSessionContext(); printInfo(doubleTab + "Protocol: " + context.getSessionParameters().get(context.PROTOCOL)); if (verbose) { String age; long millis; if (sessionManager.isLocked(session)) { age = "(locked)"; } else { millis = System.currentTimeMillis() - sessionManager.getSessionlastUsed(session); age = MILLISECONDS.toMinutes(millis) + ":" + (MILLISECONDS.toSeconds(millis) - MINUTES.toSeconds(MILLISECONDS .toMinutes(millis))); } Status sessionStatus = sessionManager.getSessionById(session, sessionManager.isLocked(session)).getStatus(); printInfo(doubleTab + " Session ID: " + session + " STATUS: " + sessionStatus + " (Not used in: " + age + ")"); } } } // FIXME if there aren't any live session need to print info message } printEndCommand(); return null; } }