ovs.reconnect: Make Reconnect.Reconnect inherit from object.
[sliver-openvswitch.git] / python / ovs / reconnect.py
index 3a71188..ac01416 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2010 Nicira Networks
+# Copyright (c) 2010, 2011 Nicira Networks
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -72,7 +72,7 @@ class Reconnect(object):
             return CONNECT
 
     class ConnectInProgress(object):
-        name = "CONNECT_IN_PROGRESS"
+        name = "CONNECTING"
         is_connected = False
 
         @staticmethod
@@ -117,7 +117,7 @@ class Reconnect(object):
                           % (fsm.name, (now - fsm.state_entered) / 1000.0))
             return DISCONNECT
 
-    class Reconnect:
+    class Reconnect(object):
         name = "RECONNECT"
         is_connected = False
 
@@ -145,8 +145,8 @@ class Reconnect(object):
         self.state_entered = now
         self.backoff = 0
         self.last_received = now
-        self.last_connected = now
-        self.last_disconnected = now
+        self.last_connected = None
+        self.last_disconnected = None
         self.max_tries = None
 
         self.creation_time = now
@@ -332,15 +332,15 @@ class Reconnect(object):
                                     % self.name)
             else:
                 if self.passive:
-                    type = "listen"
+                    type_ = "listen"
                 else:
-                    type = "connection"
+                    type_ = "connection"
                 if error > 0:
                     logging.warning("%s: %s attempt failed (%s)"
-                                    % (self.name, type, os.strerror(error)))
+                                    % (self.name, type_, os.strerror(error)))
                 else:
                     self.info_level("%s: %s attempt timed out"
-                                    % (self.name, type))
+                                    % (self.name, type_))
 
             if (self.state in (Reconnect.Active, Reconnect.Idle)):
                 self.last_disconnected = now
@@ -529,23 +529,21 @@ class Reconnect(object):
         False otherwise."""
         return self.state.is_connected
 
-    def get_connection_duration(self, now):
-        """Returns the number of milliseconds for which this FSM has been
-        continuously connected to its peer.  (If this FSM is not currently
-        connected, this is 0.)"""
-        if self.is_connected():
+    def get_last_connect_elapsed(self, now):
+        """Returns the number of milliseconds since 'fsm' was last connected
+        to its peer. Returns None if never connected."""
+        if self.last_connected:
             return now - self.last_connected
         else:
-            return 0
+            return None
 
-    def get_disconnect_duration(self, now):
-        """Returns the number of milliseconds for which this FSM has been
-        continuously disconnected from its peer.  (If this FSM is not currently
-        connected, this is 0.)"""
-        if not self.is_connected():
+    def get_last_disconnect_elapsed(self, now):
+        """Returns the number of milliseconds since 'fsm' was last disconnected
+        from its peer. Returns None if never disconnected."""
+        if self.last_disconnected:
             return now - self.last_disconnected
         else:
-            return 0
+            return None
 
     def get_stats(self, now):
         class Stats(object):
@@ -558,10 +556,11 @@ class Reconnect(object):
         stats.backoff = self.backoff
         stats.seqno = self.seqno
         stats.is_connected = self.is_connected()
-        stats.current_connection_duration = self.get_connection_duration(now)
-        stats.current_disconnect_duration = self.get_disconnect_duration(now)
-        stats.total_connected_duration = (stats.current_connection_duration +
-                                          self.total_connected_duration)
+        stats.msec_since_connect = self.get_last_connect_elapsed(now)
+        stats.msec_since_disconnect = self.get_last_disconnect_elapsed(now)
+        stats.total_connected_duration = self.total_connected_duration
+        if self.is_connected():
+            stats.total_connected_duration += self.get_last_connect_elapsed(now)
         stats.n_attempted_connections = self.n_attempted_connections
         stats.n_successful_connections = self.n_successful_connections
         stats.state = self.state.name