* Queries NM for: "nm_net_max_byte",
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Mon, 4 Dec 2006 21:53:09 +0000 (21:53 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Mon, 4 Dec 2006 21:53:09 +0000 (21:53 +0000)
"nm_net_max_exempt_byte",
"nm_net_max_thresh_byte",
"nm_net_max_thresh_exempt_byte"
* Backwards compatible with avgrate and avgexemptrate slice attributes.

bwmon.py

index 09bea99..2410b7d 100755 (executable)
--- a/bwmon.py
+++ b/bwmon.py
@@ -54,14 +54,13 @@ default_maxexemptrate = bwlimit.bwmax
 # 1.5 Mbit or 16.4 GB per day
 #default_avgexemptrate = 1500000
 
 # 1.5 Mbit or 16.4 GB per day
 #default_avgexemptrate = 1500000
 
-# 4 Gbyte per day. 4 * 1024K * 1024M * 1024G 
-default_ByteThresh = 4294967296
+# 5.4 Gbyte per day. 5.4 * 1024M * 1024G kbytes
 # 5.4 Gbyte per day max allowed transfered per recording period
 # 5.4 Gbyte per day max allowed transfered per recording period
-default_ByteMax = 5798205850 
-# 14 Gbyte per day
-default_ExemptByteThresh = 15032385536
+default_ByteMax = 5662310
+default_ByteThresh = int(.8 * default_ByteMax) 
 # 16.4 Gbyte per day max allowed transfered per recording period to I2
 # 16.4 Gbyte per day max allowed transfered per recording period to I2
-default_ExemptByteMax = 17609365914 
+default_ExemptByteMax = 17196646 
+default_ExemptByteThresh = int(.8 * default_ExemptByteMax) 
 
 
 # Average over 1 day
 
 
 # Average over 1 day
@@ -100,6 +99,8 @@ class Slice:
        ByteThresh - After thresh, cap node to (maxbyte - bytes)/(time left in period)
        ExemptByteMax - Same as above, but for i2.
        ExemptByteThresh - i2 ByteThresh
        ByteThresh - After thresh, cap node to (maxbyte - bytes)/(time left in period)
        ExemptByteMax - Same as above, but for i2.
        ExemptByteThresh - i2 ByteThresh
+       maxrate - max_rate slice attribute. 
+       maxexemptrate - max_exempt_rate slice attribute.
 
     """
 
 
     """
 
@@ -127,8 +128,28 @@ class Slice:
                try:
                        vals = nm.query(self.name, 
                                [('nm_net_max_rate', self.maxrate),
                try:
                        vals = nm.query(self.name, 
                                [('nm_net_max_rate', self.maxrate),
-                               ('nm_net_max_exempt_rate', self.maxexemptrate)])
-                       (self.maxrate, self.maxexemptrate) = vals
+                               ('nm_net_max_exempt_rate', self.maxexemptrate),
+                               ("nm_net_max_byte", self.ByteMax),
+                               ("nm_net_max_exempt_byte", self.ExemptByteMax),
+                               ("nm_net_max_thresh_byte", int( .8 * self.ByteMax)),
+                               ("nm_net_max_thresh_exempt_byte", int(.8 * self.ExemptByteMax)),
+                               ("nm_net_avg_rate", 0),
+                               ("nm_net_avg_exempt_rate", 0)])
+
+                       (self.maxrate,
+                       self.maxexemptrate,
+                       self.ByteMax,
+                       self.ExemptByteMax,
+                       self.ByteThresh,
+                       self.ExemptByteThresh,
+                       avgrate,
+                       avgexemptrate) = vals
+
+                       if (avgrate != 0) or (avgexemptrate != 0):
+                               self.ByteMax = avgrate * period
+                               self.ByteThresh = int(self.ByteMax * .8)
+                               self.ExemptByteMax = avgexemptrate * period
+                               self.ExemptByteThresh = int(self.ExemptByteMax * .8)
 
                except Exception, err:
                        print "Warning: Exception received while querying NM:", err
 
                except Exception, err:
                        print "Warning: Exception received while querying NM:", err
@@ -173,9 +194,9 @@ class Slice:
                                  'date': time.asctime(time.gmtime()) + " GMT",
                                  'period': format_period(period)} 
 
                                  'date': time.asctime(time.gmtime()) + " GMT",
                                  'period': format_period(period)} 
 
-               print("byts %s self.bytes %s ByteThresh %s" %(bytes, self.bytes, self.ByteThresh))
-               if bytes >= (self.bytes + self.ByteThresh):
-                       new_maxrate = int(self.ByteMax - self.ByteThresh)/(period - (time.time() - self.time))
+               if bytes >= (self.bytes + (self.ByteThresh * 1024)):
+                       new_maxrate = \
+                       int(((self.ByteMax * 1024) - self.bytes + bytes)/(period - time.time() - self.time))
                else:
                        new_maxrate = maxrate
 
                else:
                        new_maxrate = maxrate
 
@@ -183,12 +204,12 @@ class Slice:
                params['class'] = "low bandwidth"
                params['bytes'] = format_bytes(bytes - self.bytes)
                params['maxrate'] = bwlimit.format_tc_rate(maxrate)
                params['class'] = "low bandwidth"
                params['bytes'] = format_bytes(bytes - self.bytes)
                params['maxrate'] = bwlimit.format_tc_rate(maxrate)
-               params['limit'] = format_bytes(self.ByteMax)
+               params['limit'] = format_bytes(int(self.ByteMax * 1024))
                params['new_maxrate'] = bwlimit.format_tc_rate(new_maxrate)
 
                if verbose:
                        print "%(slice)s %(class)s " \
                params['new_maxrate'] = bwlimit.format_tc_rate(new_maxrate)
 
                if verbose:
                        print "%(slice)s %(class)s " \
-                                 "%(bytes)s, %(limit)s (%(new_maxrate)s maxrate)" % \
+                                 "%(bytes)s of %(limit)s (%(new_maxrate)s maxrate)" % \
                                  params
 
                # Cap low bandwidth burst rate
                                  params
 
                # Cap low bandwidth burst rate
@@ -196,9 +217,9 @@ class Slice:
                        message += template % params
                        print "%(slice)s %(class)s capped at %(new_maxrate)s " % params
        
                        message += template % params
                        print "%(slice)s %(class)s capped at %(new_maxrate)s " % params
        
-               if exemptbytes >= (self.exemptbytes + self.ExemptByteThresh):
+               if exemptbytes >= (self.exemptbytes + (self.ExemptByteThresh * 1024)):
                        new_maxexemptrate = \
                        new_maxexemptrate = \
-                       int((self.ExemptByteMax - self.ExemptByteThresh)/(period - (time.time() - self.time)))
+                       int(((self.ExemptByteMax * 1024) - (self.bytes + bytes))/(period - (time.time() - self.time)))
                else:
                        new_maxexemptrate = maxexemptrate
 
                else:
                        new_maxexemptrate = maxexemptrate
 
@@ -206,12 +227,12 @@ class Slice:
                params['class'] = "high bandwidth"
                params['bytes'] = format_bytes(exemptbytes - self.exemptbytes)
                params['maxrate'] = bwlimit.format_tc_rate(maxexemptrate)
                params['class'] = "high bandwidth"
                params['bytes'] = format_bytes(exemptbytes - self.exemptbytes)
                params['maxrate'] = bwlimit.format_tc_rate(maxexemptrate)
-               params['limit'] = format_bytes(self.ExemptByteMax)
+               params['limit'] = format_bytes(self.ExemptByteMax * 1024)
                params['new_maxrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
 
                if verbose:
                        print "%(slice)s %(class)s " \
                params['new_maxrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
 
                if verbose:
                        print "%(slice)s %(class)s " \
-                                 "%(bytes)s, %(limit)s (%(new_maxrate)s avg)" % params
+                                 "%(bytes)s of %(limit)s (%(new_maxrate)s maxrate)" % params
 
                # Cap high bandwidth burst rate
                if new_maxexemptrate != maxexemptrate:
 
                # Cap high bandwidth burst rate
                if new_maxexemptrate != maxexemptrate:
@@ -315,7 +336,8 @@ def main():
                live.append(xid)
                
                if verbose:
                live.append(xid)
                
                if verbose:
-                       print("\n%s, minrate %s, maxrate %s, minexemptrate %s,"\
+                       print("\nRunning stats for %s"\
+                           "\n minrate %s, maxrate %s, minexemptrate %s,"\
                                " maxexemptrate %s, bytes %s, exemptbytes %s" % \
                                (bwlimit.get_slice(xid), 
                                bwlimit.format_tc_rate(minrate),
                                " maxexemptrate %s, bytes %s, exemptbytes %s" % \
                                (bwlimit.get_slice(xid), 
                                bwlimit.format_tc_rate(minrate),