diff --git a/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java b/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java index ab1df5e24a2e5b59792d249aa69f1ffc7476b8c6..4a5a43d41ddef4d80fd1e6aa1e9470cbbf7a0791 100644 --- a/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java +++ b/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java @@ -191,5 +191,12 @@ public interface IFloodlightProviderService extends IFloodlightService { * @return */ public Map<String, Object> getControllerInfo(String type); + + + /** + * Return the controller uptime in milliseconds + * @return + */ + public long getSystemUptime(); } diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java index 8b6f2464a894108acba358d009b2a3dc43714c3a..94b9b3cb072e44453d07ac505c8b9c87be31a361 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java +++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java @@ -174,6 +174,9 @@ public class Controller implements IFloodlightProviderService, // If the controller isn't configured to support roles, then this is null. protected Role role; + // Start time of the controller + protected long systemStartTime; + // Storage table names protected static final String CONTROLLER_TABLE_NAME = "controller_controller"; protected static final String CONTROLLER_ID = "id"; @@ -1926,6 +1929,7 @@ public class Controller implements IFloodlightProviderService, setConfigParams(configParams); this.role = getInitialRole(configParams); initVendorMessages(); + this.systemStartTime = System.currentTimeMillis(); } /** @@ -2096,4 +2100,11 @@ public class Controller implements IFloodlightProviderService, } } + @Override + public long getSystemUptime() { + return (System.currentTimeMillis() - this.systemStartTime); + } + + + } diff --git a/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java b/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java index 009681fb4693fcb83a3292d1babe319058cb3778..45ef6e9978fdebf82e3476dd8dfe6b94552499b4 100644 --- a/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java +++ b/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java @@ -59,6 +59,7 @@ public class CoreWebRoutable implements RestletRoutable { router.attach("/controller/summary/json", ControllerSummaryResource.class); router.attach("/role/json", ControllerRoleResource.class); router.attach("/health/json", HealthCheckResource.class); + router.attach("/system/uptime/json", SystemUptimeResource.class); return router; } } diff --git a/src/main/java/net/floodlightcontroller/core/web/SystemUptimeResource.java b/src/main/java/net/floodlightcontroller/core/web/SystemUptimeResource.java new file mode 100644 index 0000000000000000000000000000000000000000..64b130f2d1777f9713db75650b1a721581527a81 --- /dev/null +++ b/src/main/java/net/floodlightcontroller/core/web/SystemUptimeResource.java @@ -0,0 +1,15 @@ +package net.floodlightcontroller.core.web; + +import net.floodlightcontroller.core.IFloodlightProviderService; +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; + +public class SystemUptimeResource extends ServerResource { + @Get("json") + public long retrieve() { + IFloodlightProviderService floodlightProvider = + (IFloodlightProviderService)getContext().getAttributes(). + get(IFloodlightProviderService.class.getCanonicalName()); + return floodlightProvider.getSystemUptime(); + } +} diff --git a/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java b/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java index aaa9be06c225dd565d7fe469f94c3ea73e274693..63c8899631f4e6de932c6fd9c76b7a2d191de242 100644 --- a/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java +++ b/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java @@ -291,4 +291,12 @@ public class MockFloodlightProvider implements IFloodlightModule, IFloodlightPro // TODO Auto-generated method stub return null; } + + @Override + public long getSystemUptime() { + // TODO Auto-generated method stub + return 0; + } + + }