provide sitename to person query
authorStephen Soltesz <soltesz@cs.princeton.edu>
Mon, 22 Jun 2009 19:53:38 +0000 (19:53 +0000)
committerStephen Soltesz <soltesz@cs.princeton.edu>
Mon, 22 Jun 2009 19:53:38 +0000 (19:53 +0000)
install updates.

Monitor.spec
plcquery.py

index 90e9fa5..8f1ea0e 100644 (file)
@@ -183,7 +183,7 @@ install -D -m 755 threadpool.py $RPM_BUILD_ROOT/%{python_sitearch}/threadpool.py
 touch $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 chmod 777 $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 
-install -D -m 644 rt3/syncrtusers.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/syncrtusers.cron
+install -D -m 644 rt3/rt.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/rt.cron
 #install -D -m 755 monitor-default.conf $RPM_BUILD_ROOT/etc/monitor.conf
 #cp $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig-default.py $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig.py
 
@@ -226,7 +226,7 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root)
 /usr/share/%{name}/rt3
 %{_sysconfdir}/plc.d/rt3
-%{_sysconfdir}/cron.d/syncrtusers.cron
+%{_sysconfdir}/cron.d/rt.cron
 
 %files pcucontrol
 %{python_sitearch}/pcucontrol
index 0540098..235662e 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 
+import sys
 from monitor.wrapper import plc
 api = plc.api
 
@@ -26,11 +27,24 @@ def parse_filter(filter):
     else:
         return None
 
-def print_fields(obj, fields):
-    for f in fields:
-        if f in obj:
-            print obj[f],
-    print ""
+def print_fields(obj, fields, format):
+    if format:
+        print format % obj
+    else:
+        for f in fields:
+            if f in obj:
+                print obj[f],
+        print ""
+
+def list_fields(l):
+    if len(l) > 0:
+        o = l[0]
+        for k in o.keys():
+            print k
+        sys.exit(1)
+    else:
+        print "no objects returned to list fields"
+        sys.exit(1)
 
 def main():
 
@@ -40,7 +54,12 @@ def main():
     parser.set_defaults(get=True,
                         type='node',
                         filter=None,
-                        fields='node_id,hostname,last_contact'
+                        fields=None,
+                        format=None,
+                        listfields=False,
+                        withsitename=False,
+                        byloginbase=None,
+                        byrole=None,
                         )
 
     parser.add_option("", "--get", dest="get", action="store_true",
@@ -55,9 +74,19 @@ def main():
     parser.add_option("", "--filter", dest="filter", metavar="name=value", 
                         help="Filter passed to Get* calls")
 
+    parser.add_option("", "--format", dest="format",
+                        help="Format string to use to print")
+
+    parser.add_option("", "--byloginbase", dest="byloginbase",
+                        help="")
+    parser.add_option("", "--byrole", dest="byrole",
+                        help="")
+    parser.add_option("", "--withsitename", dest="withsitename",
+                        action="store_true", help="")
+
     parser.add_option("", "--nodelist", dest="nodelist", metavar="nodelist.txt", 
                         help="A list of nodes to bring out of debug mode.")
-    parser.add_option("", "--listkeys", dest="listkeys", action="store_true",
+    parser.add_option("", "--listfields", dest="listfields", action="store_true",
                         help="A list of nodes to bring out of debug mode.")
 
     #parser = parsermodule.getParser(['defaults'], parser)
@@ -71,9 +100,40 @@ def main():
         fields = parse_fields(config.fields)
 
     if config.type == 'node': 
+        if config.fields is None: 
+            fields='node_id,hostname,last_contact',
+            fields = parse_fields(config.fields)
+
         n = api.GetNodes(f, fields)
+        if config.listfields: list_fields(n)
         for i in n:
-            print_fields(i, fields)
+            print_fields(i, fields, config.format)
+
+    if config.type == 'person': 
+            
+        if config.byloginbase:
+            s = api.GetSites({'login_base' : config.byloginbase}, ['person_ids'])
+            f = s[0]['person_ids']
+        if config.byrole:
+            p = api.GetPersons(None, ['person_id', 'roles'])
+            p = filter(lambda x: config.byrole in x['roles'], p)
+            f = [ x['person_id'] for x in  p ]
+
+        if config.withsitename:
+            n = api.GetPersons(f, fields)
+            if config.listfields: list_fields(n)
+            for i in n:
+                sitelist = api.GetSites(i['site_ids'], ['person_ids', 'name'])
+                if len(sitelist) > 0:
+                    s = sitelist[0]
+                    if i['person_id'] in s['person_ids']:
+                        i['name'] = s['name']
+                        print_fields(i, fields, config.format)
+        else:
+            n = api.GetPersons(f, fields)
+            if config.listfields: list_fields(n)
+            for i in n:
+                print_fields(i, fields, config.format)
 
 if __name__ == "__main__":
     main()