From 288b66d5ba2651b9184a25d2a795dfb912439701 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Mon, 4 Dec 2006 21:53:09 +0000 Subject: [PATCH] * Queries NM for: "nm_net_max_byte", "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 | 58 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/bwmon.py b/bwmon.py index 09bea99..2410b7d 100755 --- 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 -# 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 -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 -default_ExemptByteMax = 17609365914 +default_ExemptByteMax = 17196646 +default_ExemptByteThresh = int(.8 * default_ExemptByteMax) # 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 + 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), - ('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 @@ -173,9 +194,9 @@ class Slice: '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 @@ -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['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 " \ - "%(bytes)s, %(limit)s (%(new_maxrate)s maxrate)" % \ + "%(bytes)s of %(limit)s (%(new_maxrate)s maxrate)" % \ 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 - if exemptbytes >= (self.exemptbytes + self.ExemptByteThresh): + if exemptbytes >= (self.exemptbytes + (self.ExemptByteThresh * 1024)): 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 @@ -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['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 " \ - "%(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: @@ -315,7 +336,8 @@ def main(): 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), -- 2.43.0