merge from improvements on the 1.0 branch:
[monitor.git] / monitor / wrapper / plc.py
index 76db7d8..2ab1808 100644 (file)
@@ -15,15 +15,24 @@ import traceback
 from monitor import database
 
 try:
-       import config
+       from monitor import config
        debug = config.debug
 except:
        debug = False
 logger = logging.getLogger("monitor")
        
 class Auth:
-       def __init__(self):
-               self.auth = {'AuthMethod': "anonymous"}
+       def __init__(self, username=None, password=None, **kwargs):
+               if 'session' in kwargs:
+                       self.auth= { 'AuthMethod' : 'session',
+                                       'session' : kwargs['session'] }
+               else:
+                       if username==None and password==None:
+                               self.auth = {'AuthMethod': "anonymous"}
+                       else:
+                               self.auth = {'Username' : username,
+                                                       'AuthMethod' : 'password',
+                                                       'AuthString' : password}
 
 # NOTE: this host is used by default when there are no auth files.
 XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/"
@@ -81,6 +90,11 @@ class CachedPLC(PLC):
                def run_or_returncached(*params):
                        cachename = self._param_to_str(name, *params)
                        #print "cachename is %s" % cachename
+                       if hasattr(config, 'refresh'):
+                               refresh = config.refresh
+                       else:
+                               refresh = False
+
                        if 'Get' in name:
                                if not database.cachedRecently(cachename):
                                        load_old_cache = False
@@ -108,6 +122,10 @@ class CachedPLC(PLC):
 def getAPI(url):
        return xmlrpclib.Server(url, verbose=False, allow_none=True)
 
+def getNodeAPI(session):
+       nodeauth = Auth(session=session)
+       return PLC(nodeauth.auth, auth.server)
+
 def getAuthAPI():
        return PLC(auth.auth, auth.server)
 
@@ -144,7 +162,7 @@ def getSliceUserEmails(loginbase):
        """
                For the given site, return all user email addresses that have the 'tech' role.
        """
-       #api = getAuthAPI()
+       api = getAuthAPI()
        # get site details.
        s = api.GetSites(loginbase)[0]
        # get people at site
@@ -201,7 +219,10 @@ def getpcu(nodename):
        anon = {'AuthMethod': "anonymous"}
        nodeinfo = api.GetNodes(auth.auth, {"hostname": nodename}, ["pcu_ids", "ports"])[0]
        if nodeinfo['pcu_ids']:
+               print nodeinfo
                sitepcu = api.GetPCUs(auth.auth, nodeinfo['pcu_ids'])[0]
+               print sitepcu
+               print nodeinfo["ports"]
                sitepcu[nodename] = nodeinfo["ports"][0]
                return sitepcu
        else: