/** * Copyright (c) Codice Foundation * <p> * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or any later version. * <p> * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. A copy of the GNU Lesser General Public License * is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. */ package org.codice.ddf.admin.application.service.command; import org.apache.karaf.features.Feature; import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.codice.ddf.admin.application.service.Application; import org.codice.ddf.admin.application.service.ApplicationService; import org.codice.ddf.admin.application.service.ApplicationServiceException; import org.codice.ddf.admin.application.service.ApplicationStatus; import org.codice.ddf.admin.application.service.command.completers.AllApplicationsCompleter; import org.fusesource.jansi.Ansi; import org.osgi.framework.Bundle; /** * Utilizes the OSGi Command Shell in Karaf and shows the status of an * application. */ @Command(scope = "app", name = "status", description = "Shows status of an application.\n\tGives information on the current state, features within the application, what required features are not started and what required bundles are not started.") @Service public class StatusApplicationCommand extends AbstractApplicationCommand { @Argument(index = 0, name = "appName", description = "Name of the application to get status on.", required = true, multiValued = false) @Completion(AllApplicationsCompleter.class) String appName; @Override protected void doExecute(ApplicationService applicationService) throws ApplicationServiceException { Application application = applicationService.getApplication(appName); if (application != null) { ApplicationStatus appStatus = applicationService.getApplicationStatus(application); console.println(application.getName()); console.println("\nCurrent State is: " + appStatus.getState() .toString()); console.println("\nFeatures Located within this Application:"); for (Feature curFeature : application.getFeatures()) { console.println("\t" + curFeature.getName()); } console.println("\nRequired Features Not Started"); if (appStatus.getErrorFeatures() .isEmpty()) { console.print(Ansi.ansi() .fg(Ansi.Color.GREEN) .toString()); console.println("\tNONE"); console.print(Ansi.ansi() .reset() .toString()); } else { for (Feature curFeature : appStatus.getErrorFeatures()) { console.print(Ansi.ansi() .fg(Ansi.Color.RED) .toString()); console.println("\t" + curFeature.getName()); console.print(Ansi.ansi() .reset() .toString()); } } console.println("\nRequired Bundles Not Started"); if (appStatus.getErrorBundles() .isEmpty()) { console.print(Ansi.ansi() .fg(Ansi.Color.GREEN) .toString()); console.println("\tNONE"); console.print(Ansi.ansi() .reset() .toString()); } else { for (Bundle curBundle : appStatus.getErrorBundles()) { console.print(Ansi.ansi() .fg(Ansi.Color.RED) .toString()); console.println( "\t[" + curBundle.getBundleId() + "]\t" + curBundle.getSymbolicName()); console.print(Ansi.ansi() .reset() .toString()); } } } else { console.println("No application found with name " + appName); } return; } }