X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=bwmon.py;h=ce33e19bf8fafb94ac21961a84babbc0a229438b;hb=refs%2Fheads%2F1.7;hp=c678ccab10e3a2feb07ad582b51e3c771ddc5750;hpb=198bf60356ccdf302d9a2be819f319475b5e94e0;p=nodemanager.git diff --git a/bwmon.py b/bwmon.py index c678cca..ce33e19 100644 --- a/bwmon.py +++ b/bwmon.py @@ -36,7 +36,7 @@ from sets import Set # 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 = False +ENABLE = True datafile = "/var/lib/misc/bwmon.dat" @@ -406,8 +406,7 @@ class Slice: (runningMinRate != self.MinRate) or \ (runningmaxi2rate != new_maxi2rate) or \ (runningMini2Rate != self.Mini2Rate) or \ - (runningshare != self.share) or \ - (runningi2share != self.i2share): + (runningshare != self.Share): # Apply parameters bwlimit.set(xid = self.xid, minrate = self.MinRate * 1000, @@ -475,7 +474,7 @@ def sync(nmdbcopy): # Incase default isn't set yet. if default_MaxRate == -1: - default_MaxRate = 1000000 + default_MaxRate = 10000000 try: f = open(datafile, "r+") @@ -649,9 +648,40 @@ def sync(nmdbcopy): pickle.dump((version, slices, deaddb), f) f.close() + +def getDefaults(nmdbcopy): + ''' + Get defaults from default slice's slice attributes. + ''' + status = True + # default slice + dfltslice = nmdbcopy.get(PLC_SLICE_PREFIX+"_default") + if dfltslice: + if dfltslice['rspec']['net_max_rate'] == -1: + allOff() + status = False + return status + + +def allOff(): + """ + Turn off all slice HTBs + """ + # Get/set special slice IDs + root_xid = bwlimit.get_xid("root") + default_xid = bwlimit.get_xid("default") + kernelhtbs = gethtbs(root_xid, default_xid) + if len(kernelhtbs): + logger.log("bwlimit: Disabling all running HTBs.") + for htb in kernelhtbs.keys(): bwlimit.off(htb) + + lock = threading.Event() def run(): - """When run as a thread, wait for event, lock db, deep copy it, release it, run bwmon.GetSlivers(), then go back to waiting.""" + """ + When run as a thread, wait for event, lock db, deep copy it, release it, + run bwmon.GetSlivers(), then go back to waiting. + """ logger.log("bwmon: Thread started", 2) while True: lock.wait() @@ -659,7 +689,11 @@ def run(): database.db_lock.acquire() nmdbcopy = copy.deepcopy(database.db) database.db_lock.release() - try: sync(nmdbcopy) + try: + if getDefaults(nmdbcopy) and len(bwlimit.tc("class show dev eth0")) > 0: + # class show to check if net:InitNodeLimit:bwlimit.init has run. + sync(nmdbcopy) + else: logger.log("bwmon: BW limits DISABLED.") except: logger.log_exc() lock.clear()