Skip to content
Snippets Groups Projects
Commit 44b327ee authored by abat's avatar abat
Browse files

Merge into master from pull request #37:

    Improved Module Loader REST interface (https://github.com/floodlight/floodlight/pull/37)
parents fde48873 bfdc501a
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,6 @@ 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;
......@@ -18,7 +17,11 @@ public class ModuleLoaderResource extends ServerResource {
LoggerFactory.getLogger(ModuleLoaderResource.class);
@Get("json")
public Map<String, Object> retrieve() {
public Map<String, Object> retrieve() {
return retrieveInternal(false);
}
public Map<String, Object> retrieveInternal(boolean loadedOnly) {
Map<String, Object> model = new HashMap<String, Object>();
Set<String> loadedModules = new HashSet<String>();
......@@ -42,13 +45,26 @@ public class ModuleLoaderResource extends ServerResource {
module.getModuleDependencies();
if ( deps == null)
deps = new HashSet<Class<? extends IFloodlightService>>();
moduleInfo.put("depends", deps);
Map<String,Object> depsMap = new HashMap<String, Object> ();
for (Class<? extends IFloodlightService> service : deps) {
Object serviceImpl = getContext().getAttributes().get(service.getCanonicalName());
if (serviceImpl != null)
depsMap.put(service.getCanonicalName(), serviceImpl.getClass().getCanonicalName());
else
depsMap.put(service.getCanonicalName(), "<unresolved>");
}
moduleInfo.put("depends", depsMap);
Collection<Class<? extends IFloodlightService>> provides =
module.getModuleServices();
if ( provides == null)
provides = new HashSet<Class<? extends IFloodlightService>>();
moduleInfo.put("provides", provides);
Map<String,Object> providesMap = new HashMap<String,Object>();
for (Class<? extends IFloodlightService> service : provides) {
providesMap.put(service.getCanonicalName(), module.getServiceImpls().get(service).getClass().getCanonicalName());
}
moduleInfo.put("provides", providesMap);
moduleInfo.put("loaded", false); // not loaded, by default
......@@ -66,8 +82,8 @@ public class ModuleLoaderResource extends ServerResource {
}
}
model.put(moduleName, moduleInfo);
if ((Boolean)moduleInfo.get("loaded")|| !loadedOnly )
model.put(moduleName, moduleInfo);
}
return model;
}
......
......@@ -37,7 +37,8 @@ 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("/module/all/json", ModuleLoaderResource.class);
router.attach("/module/loaded/json", LoadedModuleLoaderResource.class);
router.attach("/switch/all/{statType}/json", AllSwitchStatisticsResource.class);
router.attach("/switch/{switchId}/{statType}/json", SwitchStatisticsResource.class);
router.attach("/controller/switches/json", ControllerSwitchesResource.class);
......
package net.floodlightcontroller.core.web;
import java.util.Map;
import org.restlet.resource.Get;
import net.floodlightcontroller.core.module.ModuleLoaderResource;
public class LoadedModuleLoaderResource extends ModuleLoaderResource {
@Get("json")
public Map<String, Object> retrieve() {
return retrieveInternal(true);
}
}
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