Skip to content
Snippets Groups Projects
Commit 40da007e authored by Rob Sherwood's avatar Rob Sherwood
Browse files

Merge pull request #36 from capveg/master

Added REST support for querying loaded modules
parents 2513a302 3bfe5945
No related branches found
No related tags found
No related merge requests found
package net.floodlightcontroller.core.module;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ModuleLoaderResource extends ServerResource {
protected static Logger log =
LoggerFactory.getLogger(ModuleLoaderResource.class);
@Get("json")
public Map<String, Object> retrieve() {
Map<String, Object> model = new HashMap<String, Object>();
Set<String> loadedModules = new HashSet<String>();
for (Object val : getContext().getAttributes().values()) {
if ((val instanceof IFloodlightModule) || (val instanceof IFloodlightService)) {
String serviceImpl = val.getClass().getCanonicalName();
loadedModules.add(serviceImpl);
// log.debug("Tracking serviceImpl " + serviceImpl);
}
}
for (String moduleName :
FloodlightModuleLoader.moduleNameMap.keySet() ) {
Map<String,Object> moduleInfo = new HashMap<String, Object>();
IFloodlightModule module =
FloodlightModuleLoader.moduleNameMap.get(
moduleName);
Collection<Class<? extends IFloodlightService>> deps =
module.getModuleDependencies();
if ( deps == null)
deps = new HashSet<Class<? extends IFloodlightService>>();
moduleInfo.put("depends", deps);
Collection<Class<? extends IFloodlightService>> provides =
module.getModuleServices();
if ( provides == null)
provides = new HashSet<Class<? extends IFloodlightService>>();
moduleInfo.put("provides", provides);
moduleInfo.put("loaded", false); // not loaded, by default
// check if this module is loaded directly
if (loadedModules.contains(module.getClass().getCanonicalName())) {
moduleInfo.put("loaded", true);
} else {
// if not, then maybe one of the services it exports is loaded
for (Class<? extends IFloodlightService> service : provides) {
String modString = module.getServiceImpls().get(service).getClass().getCanonicalName();
if (loadedModules.contains(modString))
moduleInfo.put("loaded", true);
/* else
log.debug("ServiceImpl not loaded " + modString); */
}
}
model.put(moduleName, moduleInfo);
}
return model;
}
}
......@@ -17,6 +17,7 @@
package net.floodlightcontroller.core.web;
import net.floodlightcontroller.core.module.ModuleLoaderResource;
import net.floodlightcontroller.restserver.RestletRoutable;
import org.restlet.Context;
......@@ -36,6 +37,7 @@ public class CoreWebRoutable implements RestletRoutable {
@Override
public Restlet getRestlet(Context context) {
Router router = new Router(context);
router.attach("/module/list/json", ModuleLoaderResource.class);
router.attach("/switch/all/{statType}/json", AllSwitchStatisticsResource.class);
router.attach("/switch/{switchId}/{statType}/json", SwitchStatisticsResource.class);
router.attach("/controller/switches/json", ControllerSwitchesResource.class);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment