from sets import Set
# Defaults
-debug = False
-verbose = False
+# Set DEBUG to True if you don't want to send emails
+DEBUG = False
+# Set ENABLE to False to setup buckets, but not limit.
+ENABLE = True
+
datafile = "/var/lib/misc/bwmon.dat"
try:
sys.path.append("/etc/planetlab")
from plc_config import *
except:
+ DEBUG = True
logger.log("bwmon: Warning: Configuration file /etc/planetlab/plc_config.py not found", 2)
logger.log("bwmon: Running in DEBUG mode. Logging to file and not emailing.", 1)
'date': time.asctime(time.gmtime()) + " GMT",
'period': format_period(period)}
- if new_maxrate != self.MaxRate:
+ if new_maxrate != (self.MaxRate * 1000):
# Format template parameters for low bandwidth message
params['class'] = "low bandwidth"
params['bytes'] = format_bytes(usedbytes - self.bytes)
message += template % params
logger.log("bwmon: ** %(slice)s %(class)s capped at %(new_maxrate)s/s " % params)
- if new_maxexemptrate != self.Maxi2Rate:
+ if new_maxexemptrate != (self.Maxi2Rate * 1000):
# Format template parameters for high bandwidth message
params['class'] = "high bandwidth"
params['bytes'] = format_bytes(usedi2bytes - self.i2bytes)
params['limit'] = format_bytes(self.Maxi2KByte * 1024)
- params['new_maxexemptrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
+ params['new_maxrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
message += template % params
logger.log("bwmon: ** %(slice)s %(class)s capped at %(new_maxrate)s/s " % params)
# Notify slice
- if message and self.emailed == False:
+ if self.emailed == False:
subject = "pl_mom capped bandwidth of slice %(slice)s on %(hostname)s" % params
- if debug:
+ if DEBUG:
logger.log("bwmon: "+ subject)
logger.log("bwmon: "+ message + (footer % params))
else:
self.emailed = True
+ logger.log("bwmon: Emailing %s" % self.name)
slicemail(self.name, subject, message + (footer % params))
if new_maxrate < (self.MinRate * 1000):
new_maxrate = self.MinRate * 1000
# State information. I'm capped.
- self.capped = True
+ self.capped += True
else:
# Sanity Check
new_maxrate = self.MaxRate * 1000
- self.capped = False
+ self.capped += False
if usedi2bytes >= (self.i2bytes + (self.Threshi2KByte * 1024)):
maxi2byte = self.Maxi2KByte * 1024
if new_maxi2rate < (self.Mini2Rate * 1000):
new_maxi2rate = self.Mini2Rate * 1000
# State information. I'm capped.
- self.capped = True
+ self.capped += True
else:
# Sanity
new_maxi2rate = self.Maxi2Rate * 1000
- self.capped = False
+ self.capped += False
# Apply parameters
bwlimit.set(xid = self.xid,
share = self.Share)
# Notify slice
- if self.capped == True and self.emailed == False:
+ if self.capped == True:
self.notify(new_maxrate, new_maxi2rate, usedbytes, usedi2bytes)
default_Maxi2Rate, \
default_MaxKByte,\
default_Maxi2KByte,\
- default_Share,\
- verbose
+ default_Share
# All slices
names = []
kernelhtbs = gethtbs(root_xid, default_xid)
logger.log("bwmon: now %s running HTBs" % kernelhtbs.keys().__len__(), 2)
+ # Update all byte limites on all slices
for (xid, slice) in slices.iteritems():
# Monitor only the specified slices
if xid == root_xid or xid == default_xid: continue
kernelhtbs[xid]['usedbytes'], \
kernelhtbs[xid]['usedi2bytes'], \
live[xid]['_rspec'])
- else:
+ elif ENABLE:
logger.log("bwmon: Updating slice %s" % slice.name, 2)
# Update byte counts
slice.update(kernelhtbs[xid]['maxrate'], \