Adding the ExperimentRunner
[nepi.git] / src / nepi / resources / all / collector.py
index f13a392..af0811c 100644 (file)
@@ -28,7 +28,7 @@ import tempfile
 
 @clsinit_copy
 class Collector(ResourceManager):
-    """ The collector is reponsible of collecting traces
+    """ The collector entity is reponsible of collecting traces
     of a same type associated to RMs into a local directory.
 
     .. class:: Class Args :
@@ -47,20 +47,35 @@ class Collector(ResourceManager):
 
     @classmethod
     def _register_attributes(cls):
-        trace_name = Attribute("traceName", "Name of the trace to be collected", 
+        trace_name = Attribute("traceName", 
+                "Name of the trace to be collected", 
                 flags = Flags.Design)
-        store_dir = Attribute("storeDir", "Path to local directory to store trace results", 
+
+        store_dir = Attribute("storeDir", 
+                "Path to local directory to store trace results", 
                 default = tempfile.gettempdir(),
                 flags = Flags.Design)
-        sub_dir = Attribute("subDir", "Sub directory to collect traces into", 
+
+        use_run_id = Attribute("useRunId", 
+                "If set to True stores traces into a sub directory named after "
+                "the RUN ID assigned by the EC", 
+                type = Types.Bool,
+                default = False,
+                flags = Flags.Design)
+
+        sub_dir = Attribute("subDir", 
+                "Sub directory to collect traces into", 
                 flags = Flags.Design)
-        rename = Attribute("rename", "Name to give to the collected trace file", 
+
+        rename = Attribute("rename", 
+                "Name to give to the collected trace file", 
                 flags = Flags.Design)
 
         cls._register_attribute(trace_name)
         cls._register_attribute(store_dir)
         cls._register_attribute(sub_dir)
         cls._register_attribute(rename)
+        cls._register_attribute(use_run_id)
 
     def __init__(self, ec, guid):
         super(Collector, self).__init__(ec, guid)
@@ -79,15 +94,17 @@ class Collector(ResourceManager):
             self.error(msg)
             raise RuntimeError, msg
 
-        store_dir = self.get("storeDir")
-        self._store_path = os.path.join(store_dir, self.ec.exp_id, self.ec.run_id)
+        self._store_path = self.get("storeDir")
+
+        if self.get("useRunId"):
+            self._store_path = os.path.join(self._store_path, self.ec.run_id)
 
         subdir = self.get("subDir")
         if subdir:
             self._store_path = os.path.join(self._store_path, subdir)
         
         msg = "Creating local directory at %s to store %s traces " % (
-            store_dir, trace_name)
+            self._store_path, trace_name)
         self.info(msg)
 
         try:
@@ -121,9 +138,11 @@ class Collector(ResourceManager):
                 f.write(result)
                 f.close()
             except:
+                import traceback
+                err = traceback.format_exc()
                 msg = "Couldn't retrieve trace %s for %d at %s " % (trace_name, 
                         rm.guid, fpath)
-                self.error(msg)
+                self.error(msg, out = "", err = err)
                 continue
 
         super(Collector, self).do_release()