- turn net.py into a NM plugin and move to plugin directory
[nodemanager.git] / plugins / codemux.py
index 78ae100..1f8d4b1 100644 (file)
@@ -11,15 +11,20 @@ from config import Config
 
 CODEMUXCONF="/etc/codemux/codemux.conf"
 
 
 CODEMUXCONF="/etc/codemux/codemux.conf"
 
-def start(options, config):
+def start(options, conf):
     pass
 
     pass
 
-
-def GetSlivers(data):
+def GetSlivers(plc, data, config):
     """
     For each sliver with the codemux attribute, parse out "host,port" 
     and make entry in conf.  Restart service after.
     """
     """
     For each sliver with the codemux attribute, parse out "host,port" 
     and make entry in conf.  Restart service after.
     """
+    if 'OVERRIDES' in dir(config):
+        if config.OVERRIDES.get('codemux') == '-1':
+            logger.log("codemux:  Disabled", 2)
+            stopService()
+            return
+
     logger.log("codemux:  Starting.", 2)
     # slices already in conf
     slicesinconf = parseConf()
     logger.log("codemux:  Starting.", 2)
     # slices already in conf
     slicesinconf = parseConf()
@@ -63,7 +68,10 @@ def GetSlivers(data):
             logger.log("codemux:  Removing %s" % deadslice)
             _writeconf = True 
 
             logger.log("codemux:  Removing %s" % deadslice)
             _writeconf = True 
 
-    if _writeconf:  writeConf(sortDomains(codemuxslices))
+    if _writeconf:  writeConf(sortDomains(codemuxslices))    
+    # ensure the service is running
+    startService()
+
 
 def writeConf(slivers, conf = CODEMUXCONF):
     '''Write conf with default entry up top. Elements in [] should have lower order domain names first. Restart service.'''
 
 def writeConf(slivers, conf = CODEMUXCONF):
     '''Write conf with default entry up top. Elements in [] should have lower order domain names first. Restart service.'''
@@ -84,6 +92,7 @@ def writeConf(slivers, conf = CODEMUXCONF):
     try:  restartService()
     except:  logger.log_exc()
 
     try:  restartService()
     except:  logger.log_exc()
 
+
 def sortDomains(slivers):
     '''Given a dict of {slice: {domainname, port}}, return array of slivers with lower order domains first'''
     dnames = {} # {host: slice}
 def sortDomains(slivers):
     '''Given a dict of {slice: {domainname, port}}, return array of slivers with lower order domains first'''
     dnames = {} # {host: slice}
@@ -100,6 +109,7 @@ def sortDomains(slivers):
     for host in hosts: sortedslices.append({host: dnames[host]})
     
     return sortedslices
     for host in hosts: sortedslices.append({host: dnames[host]})
     
     return sortedslices
+
         
 def parseConf(conf = CODEMUXCONF):
     '''Parse the CODEMUXCONF and return dict of slices in conf. {slice: (host,port)}'''
         
 def parseConf(conf = CODEMUXCONF):
     '''Parse the CODEMUXCONF and return dict of slices in conf. {slice: (host,port)}'''
@@ -119,6 +129,29 @@ def parseConf(conf = CODEMUXCONF):
     except IOError: logger.log_exc()
     return slicesinconf
 
     except IOError: logger.log_exc()
     return slicesinconf
 
+
+def isRunning():
+    if len(os.popen("pidof codemux").readline().rstrip("\n")) > 0:
+        return True
+    else:
+        return False
+
+
 def restartService():
     logger.log("codemux:  Restarting codemux service")
 def restartService():
     logger.log("codemux:  Restarting codemux service")
-    os.system("/etc/init.d/codemux condrestart")
+    if isRunning():
+        logger.log_call("/etc/init.d/codemux","condrestart")
+    else:
+        logger.log_call("/etc/init.d/codemux","restart")
+
+
+def startService():
+    if not isRunning():
+        logger.log("codemux:  Starting codemux service")
+        logger.log_call("/etc/init.d/codemux", "start")
+
+
+def stopService():
+    if isRunning():
+        logger.log("codemux:  Stopping codemux service")
+        logger.log_call("/etc/init.d/codemux", "stop")