[haizea-commit] r819 - branches/1.1/src/haizea/cli

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Sun Jul 4 14:08:12 CDT 2010


Author: borja
Date: 2010-07-04 14:08:11 -0500 (Sun, 04 Jul 2010)
New Revision: 819

Modified:
   branches/1.1/src/haizea/cli/commands.py
Log:
haizea-convert-data now supports data files with different sets of attributes/metrics (files without a given attribute/metric just report it as an empty string)

Modified: branches/1.1/src/haizea/cli/commands.py
===================================================================
--- branches/1.1/src/haizea/cli/commands.py	2010-07-04 16:37:59 UTC (rev 818)
+++ branches/1.1/src/haizea/cli/commands.py	2010-07-04 19:08:11 UTC (rev 819)
@@ -303,13 +303,25 @@
             print "Please specify at least one datafile to convert"
             exit(1)
         
-        datafile1 = unpickle(datafiles[0])
-        
-        counter_names = datafile1.counters.keys()
-        attr_names = datafile1.attrs.keys()
-        lease_stats_names = datafile1.lease_stats_names
-        stats_names = datafile1.stats_names
+        counter_names = set()
+        attr_names = set()
+        lease_stats_names = set()
+        stats_names = set()
+        for datafile in datafiles:
+            try:
+                data = unpickle(datafile)
+                counter_names.update(data.counters.keys())
+                attr_names.update(data.attrs.keys())
+                lease_stats_names.update(data.lease_stats_names)
+                stats_names.update(data.stats_names)
+            except:
+                print >> sys.stderr, "Error reading file %s" % (datafile)
 
+        counter_names = list(counter_names)
+        attr_names = list(attr_names)
+        lease_stats_names = list(lease_stats_names)
+        stats_names = list(stats_names)
+
         if self.opt.list_counters:
             for counter in counter_names:
                 print counter
@@ -321,11 +333,12 @@
             header_fields = attr_names + ["lease_id"] + lease_stats_names
         elif self.opt.type == "counter":
             counter = self.opt.counter
-            if not datafile1.counters.has_key(counter):
+            data = unpickle(datafiles[0])
+            if not data.counters.has_key(counter):
                 print "The specified datafile does not have a counter called '%s'" % counter
                 exit(1)
             header_fields = attr_names + ["time", "value"]
-            if datafile1.counter_avg_type[counter] != AccountingDataCollection.AVERAGE_NONE:
+            if data.counter_avg_type[counter] != AccountingDataCollection.AVERAGE_NONE:
                 header_fields.append("average")                
 
         header = ",".join(header_fields)
@@ -336,10 +349,10 @@
             try:
                 data = unpickle(datafile)
             
-                attrs = [data.attrs[attr_name] for attr_name in attr_names]
+                attrs = [data.attrs.get(attr_name, "") for attr_name in attr_names]
                             
                 if self.opt.type == "per-run":
-                    fields = attrs + [str(data.stats[stats_name]) for stats_name in stats_names]
+                    fields = attrs + [str(data.stats.get(stats_name,"")) for stats_name in stats_names]
                     print ",".join(fields)
                 elif self.opt.type == "per-lease":
                     leases = data.lease_stats



More information about the Haizea-commit mailing list