uses registry and slicemgr from the sfi config
Thierry Parmentelat [Tue, 7 Sep 2010 13:18:12 +0000 (15:18 +0200)]
set SFAUI_VERBOSE in sfi_config for tracing the sfi.py calls

SfaData.py

index c0bdf5b..922a0b5 100644 (file)
@@ -1,20 +1,27 @@
 import os
 import re
-from subprocess import *
+import time
+import subprocess
 from sfa.util.rspecHelper import RSpec
 
 class SfaData:
+    defaults = { 'SFI_AUTH' : None,
+                 'SFI_USER' : None,
+                 'SFI_SLICE' : None,
+                 'SFI_REGISTRY' : "http://www.planet-lab.org:12345",
+                 'SFI_SM' : "http://www.planet-lab.org:12346",
+                 'SFAUI_VERBOSE' : False,
+                 }
+
     def __init__(self):
-        self.registry = None
-        self.slicemgr = None
         filename = os.path.expanduser("~/.sfi/sfi_config")
         execfile(filename, SfaData.__dict__)
-        if not hasattr(SfaData, 'SFI_AUTH'): 
-            SfaData.SFI_AUTH = None
-        if not hasattr(SfaData, 'SFI_USER'): 
-            SfaData.SFI_USER = None
-        if not hasattr(SfaData, 'SFI_SLICE'): 
-            SfaData.SFI_SLICE = None
+        for (k,v) in SfaData.defaults.items():
+            if not hasattr(SfaData,k): setattr(SfaData,k,v)
+        if SfaData.SFAUI_VERBOSE:
+            print "After reading config from %s"%filename
+            for (k,v) in SfaData.defaults.items():
+                print "%-20s: %r"%(k,getattr(SfaData,k))
 
     def getAuthority(self):
         return SfaData.SFI_AUTH
@@ -35,25 +42,41 @@ class SfaData:
     def setSlice(self, slice):
         SfaData.SFI_SLICE = slice
 
+    def registry(self):
+        return SfaData.SFI_REGISTRY
+
+    def slicemgr(self):
+        return SfaData.SFI_SM
+
+    def trace_command (self, command):
+        self._trace=time.time()
+        if self.SFAUI_VERBOSE:
+            print time.strftime('%M:%S'),'Invoking',' '.join(command)
+    def trace_end (self):
+        if self.SFAUI_VERBOSE:
+            print time.strftime('%M:%S'),"[%.3f s]"%(time.time()-self._trace),'Done'
+
     def getRecord(self, hrn):
-        text = Popen(["sfi.py", "-u", self.getUser(), "-a", 
-                      self.getAuthority(), "-r", self.registry, 
-                      "-s", self.slicemgr, "show", hrn], 
-                     stdout=PIPE).communicate()[0]
+        command = ["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
+                   "-r", self.registry(), "-s", self.slicemgr(), "show", hrn]
+        self.trace_command(command)
+        text = subprocess.Popen(command, stdout=PIPE).communicate()[0]
+        self.trace_end()
         return text
 
     def listChildren(self, hrn):
         children = []
-        text = Popen(["sfi.py", "-u", self.getUser(), "-a", 
-                      self.getAuthority(), "-r", self.registry, 
-                      "-s", self.slicemgr, "list", hrn], 
-                     stdout=PIPE).communicate()[0]
+        command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
+                 "-r", self.registry(), "-s", self.slicemgr(), "list", hrn]
+        self.trace_command(command)
+        text = subprocess.Popen(command, stdout=PIPE).communicate()[0]
+        self.trace_end()
         lines = text.split('\n')
         for line in lines:
             if line:
                 (hrn, kind) = line.split() 
                 children.append((hrn, kind))
-
+                
         return children
 
     def getRSpec(self):
@@ -64,9 +87,12 @@ class SfaData:
             os.remove(filename)
         except:
             pass
-        call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
-              "-r", self.registry, "-s", self.slicemgr, "resources", 
-              "-o", filename, slice])
+        command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
+                 "-r", self.registry(), "-s", self.slicemgr(), "resources", 
+                 "-o", filename, slice]
+        self.trace_command(command)
+        subprocess.call(command)
+        self.trace_end()
         f = open(filename, "r")
         xml = f.read()
         f.close()
@@ -78,15 +104,15 @@ class SfaData:
         f = open(filename, "w")
         f.write(xml)
         f.close()
-        call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
-              "-r", self.registry, "-s", self.slicemgr, "create", 
-              slice, filename])
+        command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
+                 "-r", self.registry(), "-s", self.slicemgr(), "create", slice, filename]
+        self.trace_command(command)
+        subprocess.call(command)
+        self.trace_en()
 
 class PlanetLabData(SfaData):
     def __init__(self):
         SfaData.__init__(self)
-        self.registry = "http://www.planet-lab.org:12345"
-        self.slicemgr = "http://www.planet-lab.org:12346"
         self.rspec = None
 
     def refreshRSpec(self):
@@ -105,28 +131,28 @@ class PlanetLabData(SfaData):
 class PLEData(PlanetLabData):
     def __init__(self):
         PlanetLabData.__init__(self)
-        self.slicemgr = "http://www.planet-lab.eu:12346"
+        self.SFI_SM = "http://www.planet-lab.eu:12346"
 
 class PLJData(PlanetLabData):
     def __init__(self):
         PlanetLabData.__init__(self)
-        self.slicemgr = "http://www.planet-lab.jp:12346"
+        self.SFI_SM = "http://www.planet-lab.jp:12346"
 
 class ViniData(PlanetLabData):
     def __init__(self):
         PlanetLabData.__init__(self)
-        self.slicemgr = "http://www.vini-veritas.net:12346"
+        self.SFI_SM = "http://www.vini-veritas.net:12346"
 
 class GpENIData(PlanetLabData):
     def __init__(self):
         PlanetLabData.__init__(self)
-        self.slicemgr = "http://198.248.241.100:12346"
+        self.SFI_SM = "http://198.248.241.100:12346"
 
 class OpenCirrusData(SfaData):
     def __init__(self):
         SfaData.__init__(self)
-        self.registry = "http://198.55.37.29:12345"
-        self.slicemgr = "http://198.55.37.29:12346"
+        self.SFI_REGISTRY = "http://198.55.37.29:12345"
+        self.SFI_SM = "http://198.55.37.29:12346"
 
     def refreshRSpec(self):
         xml = SfaData.getRSpec(self)