From: Mark Huang Date: Mon, 10 Jul 2006 21:12:50 +0000 (+0000) Subject: merge 0.4-5.planetlab changes X-Git-Tag: planetlab-3_3-rc2~18 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=1ed8b06c96547cb4baaf7937f0197286c98701b1;p=mom.git merge 0.4-5.planetlab changes --- diff --git a/bwmon.py b/bwmon.py index f72d701..60cb543 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.6 2006/07/10 15:19:35 faiyaza Exp $ +# $Id: bwmon.py,v 1.8 2006/07/10 20:22:12 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.6 2006/07/10 15:19:35 faiyaza Exp $": + if version != "$Id: bwmon.py,v 1.8 2006/07/10 20:22:12 faiyaza Exp $": print "Not using old version '%s' data file %s" % (version, datafile) raise Exception except Exception: - version = "$Id: bwmon.py,v 1.6 2006/07/10 15:19:35 faiyaza Exp $" + version = "$Id: bwmon.py,v 1.8 2006/07/10 20:22:12 faiyaza Exp $" slices = {} # Get special slice IDs diff --git a/pl_mom.spec b/pl_mom.spec index ad7035a..085cd3f 100644 --- a/pl_mom.spec +++ b/pl_mom.spec @@ -1,6 +1,6 @@ %define name pl_mom %define version 0.4 -%define release 4%{?pldistro:.%{pldistro}}%{?date:.%{date}} +%define release 5%{?pldistro:.%{pldistro}}%{?date:.%{date}} Summary: PlanetLab node monitoring tools Name: %{name} @@ -104,5 +104,8 @@ exit 0 %{_sysconfdir}/cron.d/pl_mom %changelog -* Mon Jul 10 2006 Faiyaz Ahmed +* Mon Jul 10 2006 Faiyaz Ahmed 0.4-5.planetlab +- bwlimit: Initialize default limits + +* Mon Jul 10 2006 Faiyaz Ahmed 0.4-4.planetlab - bwlimit: Use cached values if NM stops responding