From e0630717d8cf764dc7e943f7eb3718af7baba755 Mon Sep 17 00:00:00 2001
From: Munish Mehta <munish.mehta@bigswitch.com>
Date: Thu, 21 Jun 2012 13:41:58 -0700
Subject: [PATCH] System uptime support

---
 .../core/IFloodlightProviderService.java          |  7 +++++++
 .../core/internal/Controller.java                 | 11 +++++++++++
 .../core/web/CoreWebRoutable.java                 |  1 +
 .../core/web/SystemUptimeResource.java            | 15 +++++++++++++++
 .../core/test/MockFloodlightProvider.java         |  8 ++++++++
 5 files changed, 42 insertions(+)
 create mode 100644 src/main/java/net/floodlightcontroller/core/web/SystemUptimeResource.java

diff --git a/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java b/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java
index ab1df5e24..4a5a43d41 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 8b6f2464a..94b9b3cb0 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 009681fb4..45ef6e997 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 000000000..64b130f2d
--- /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 aaa9be06c..63c889963 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;
+	}
+	
+	
 }
-- 
GitLab