log subprocess calls.
[nodemanager.git] / bwmon.py
index d48460c..ce33e19 100644 (file)
--- a/bwmon.py
+++ b/bwmon.py
@@ -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()