updates to improve generalization and auto-installation.
[monitor.git] / plc.py
diff --git a/plc.py b/plc.py
index 0970eaa..3ef546e 100644 (file)
--- a/plc.py
+++ b/plc.py
@@ -13,8 +13,7 @@ import logging
 import time
 import traceback
 try:
-       from config import config
-       config = config()
+       import config
        debug = config.debug
 except:
        debug = False
@@ -31,14 +30,17 @@ XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/"
 #       configured, use them, with their auth definitions.
 auth = Auth()
 try:
-       import monitorconfig
-       auth.auth = monitorconfig.API_AUTH
-       auth.server = monitorconfig.API_SERVER
+       from monitor import config
+       auth.auth = {'Username' : config.API_AUTH_USER,
+                    'AuthMethod' : 'password',
+                                'AuthString' : config.API_AUTH_PASSWORD}
+       auth.server = config.API_SERVER
 except:
        try:
                import auth
                auth.server = auth.plc
        except:
+               auth = Auth()
                auth.server = XMLRPC_SERVER
 
 api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
@@ -63,7 +65,51 @@ def getAPI(url):
        return xmlrpclib.Server(url, verbose=False, allow_none=True)
 
 def getAuthAPI():
-       return PLC(monitorconfig.API_AUTH, monitorconfig.API_SERVER)
+       return PLC(auth.auth, auth.server)
+
+
+def getTechEmails(loginbase):
+       """
+               For the given site, return all user email addresses that have the 'tech' role.
+       """
+       api = getAuthAPI()
+       # get site details.
+       s = api.GetSites(loginbase)[0]
+       # get people at site
+       p = api.GetPersons(s['person_ids'])
+       # pull out those with the right role.
+       emails = [ person['email'] for person in filter(lambda x: 'tech' in x['roles'], p) ]
+       return emails
+
+def getPIEmails(loginbase):
+       """
+               For the given site, return all user email addresses that have the 'tech' role.
+       """
+       api = getAuthAPI()
+       # get site details.
+       s = api.GetSites(loginbase)[0]
+       # get people at site
+       p = api.GetPersons(s['person_ids'])
+       # pull out those with the right role.
+       emails = [ person['email'] for person in filter(lambda x: 'pi' in x['roles'], p) ]
+       return emails
+
+def getSliceUserEmails(loginbase):
+       """
+               For the given site, return all user email addresses that have the 'tech' role.
+       """
+       #api = getAuthAPI()
+       # get site details.
+       s = api.GetSites(loginbase)[0]
+       # get people at site
+       slices = api.GetSlices(s['slice_ids'])
+       people = []
+       for slice in slices:
+               people += api.GetPersons(slice['person_ids'])
+       # pull out those with the right role.
+       emails = [ person['email'] for person in filter(lambda x: 'pi' in x['roles'], people) ]
+       unique_emails = [ x for x in set(emails) ]
+       return unique_emails
 
 '''
 Returns list of nodes in dbg as reported by PLC
@@ -136,6 +182,7 @@ def getSiteNodes(loginbase, fields=None):
                print "getSiteNodes:  %s" % exc
        return nodelist
 
+
 def getPersons(filter=None, fields=None):
        api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
        persons = []