X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=bwmon.py;h=3946957caac081b7bfe5272599259391c3da03e0;hb=fd61248f1e92e4e1a406f114fd74e90b9ed3f4f7;hp=3f34b128be65d7d77358d8c05f2ec86bf935a8e4;hpb=7f4bbf5280c7f1dfdce489599f450c65c213ff5c;p=mom.git diff --git a/bwmon.py b/bwmon.py index 3f34b12..3946957 100755 --- a/bwmon.py +++ b/bwmon.py @@ -15,7 +15,7 @@ # Faiyaz Ahmed # Copyright (C) 2004-2006 The Trustees of Princeton University # -# $Id: bwmon.py,v 1.4 2006/06/02 04:00:00 mlhuang Exp $ +# $Id: bwmon.py,v 1.7 2006/07/10 19:19:07 faiyaza Exp $ # import syslog @@ -86,8 +86,6 @@ class Slice: time - beginning of recording period in UNIX seconds bytes - low bandwidth bytes transmitted at the beginning of the recording period exemptbytes - high bandwidth bytes transmitted at the beginning of the recording period (for I2 -F) - avgrate - average low bandwidth rate to enforce over the recording period - avgexemptrate - average high bandwidth rate to enforce over the recording period (for I2 -F) last_avgrate - last recorded avgrate from NM last_maxrate - last recorded maxrate from NM last_avgexemptrate - last recorded avgexemptrate from NM @@ -97,6 +95,8 @@ class Slice: def __init__(self, xid, name, maxrate, maxexemptrate, bytes, exemptbytes): self.xid = xid self.name = name + self.time = 0 + self.exemptbytes = 0 self.last_maxrate = default_maxrate self.last_avgrate = default_avgrate self.last_avgexemptrate = default_avgexemptrate @@ -119,6 +119,10 @@ class Slice: self.bytes = bytes self.exemptbytes = exemptbytes + # If NM except"ns below, and new_max* doesn't get set, use last. + new_maxrate = self.last_maxrate + new_maxexemptrate = self.last_maxexemptrate + # Query Node Manager for max rate overrides try: vals = nm.query(self.name, [('nm_net_max_rate', self.last_maxrate), @@ -151,15 +155,19 @@ class Slice: it will get to send slightly more than the average daily byte limit. """ + + # If NM except'ns below, and avg*rate doesn't get set, use last_*. + avgrate = self.last_avgrate + avgexemptrate = self.last_avgexemptrate # Query Node Manager for max average rate overrides try: - (self.avgrate, self.avgexemptrate) = nm.query(self.name, + (avgrate, avgexemptrate) = nm.query(self.name, [('nm_net_avg_rate', self.last_avgrate), ('nm_net_avg_exempt_rate', self.last_avgexemptrate)]) #If NM is alive, and there is a cap, update new - self.last_avgexemptrate = self.avgexemptrate - self.last_avgrate = self.avgrate + self.last_avgexemptrate = avgexemptrate + self.last_avgrate = avgrate except Exception, err: print "Warning: Exception received while querying NM:", err @@ -171,10 +179,10 @@ class Slice: 'date': time.asctime(time.gmtime()) + " GMT", 'period': format_period(period)} - bytelimit = self.avgrate * period / bits_per_byte + bytelimit = avgrate * period / bits_per_byte if bytes >= (self.bytes + bytelimit) and \ - maxrate > self.avgrate: - new_maxrate = self.avgrate + maxrate > avgrate: + new_maxrate = avgrate else: new_maxrate = maxrate @@ -183,7 +191,7 @@ class Slice: params['bytes'] = format_bytes(bytes - self.bytes) params['maxrate'] = bwlimit.format_tc_rate(maxrate) params['limit'] = format_bytes(bytelimit) - params['avgrate'] = bwlimit.format_tc_rate(self.avgrate) + params['avgrate'] = bwlimit.format_tc_rate(avgrate) if verbose: print "%(slice)s %(class)s " \ @@ -195,10 +203,10 @@ class Slice: message += template % params print "%(slice)s %(class)s capped at %(avgrate)s (%(bytes)s/%(limit)s)" % params - exemptbytelimit = self.avgexemptrate * period / bits_per_byte + exemptbytelimit = avgexemptrate * period / bits_per_byte if exemptbytes >= (self.exemptbytes + exemptbytelimit) and \ - maxexemptrate > self.avgexemptrate: - new_maxexemptrate = self.avgexemptrate + maxexemptrate > avgexemptrate: + new_maxexemptrate = avgexemptrate else: new_maxexemptrate = maxexemptrate @@ -207,7 +215,7 @@ class Slice: params['bytes'] = format_bytes(exemptbytes - self.exemptbytes) params['maxrate'] = bwlimit.format_tc_rate(maxexemptrate) params['limit'] = format_bytes(exemptbytelimit) - params['avgrate'] = bwlimit.format_tc_rate(self.avgexemptrate) + params['avgrate'] = bwlimit.format_tc_rate(avgexemptrate) if verbose: print "%(slice)s %(class)s " \ @@ -290,11 +298,11 @@ def main(): (version, slices) = pickle.load(f) f.close() # Check version of data file - if version != "$Id: bwmon.py,v 1.4 2006/06/02 04:00:00 mlhuang Exp $": + if version != "$Id: bwmon.py,v 1.7 2006/07/10 19:19:07 faiyaza Exp $": print "Not using old version '%s' data file %s" % (version, datafile) raise Exception except Exception: - version = "$Id: bwmon.py,v 1.4 2006/06/02 04:00:00 mlhuang Exp $" + version = "$Id: bwmon.py,v 1.7 2006/07/10 19:19:07 faiyaza Exp $" slices = {} # Get special slice IDs