Browse Source

add generic interval statistic output

TODO: add more pretty_names
FIXME: endtimestamp gets stored twice
Jens Keim 5 years ago
parent
commit
66e4ed675b
1 changed files with 31 additions and 13 deletions
  1. 31 13
      code/Core/Statistics.py

+ 31 - 13
code/Core/Statistics.py

@@ -214,19 +214,33 @@ class Statistics:
         :param table_name: the name of the interval statistics table
         :return: a list of tuples, each consisting of (description, values, unit).
         """
-        result = [("First packet timestamp(seconds)",
-                   [int(item[0]) for item in self.stats_db.process_interval_statistics_query("SELECT starttimestamp from %s", table_name)], ""),
-                  ("Last packet timestamp(seconds)",
-                   [int(item[0]) for item in self.stats_db.process_interval_statistics_query("SELECT lastpkttimestamp from %s", table_name)], ""),
-                  ("Avg. packet rate(packets/sec)",
-                   [item[0] for item in self.stats_db.process_interval_statistics_query("SELECT pktrate from %s", table_name)], ""),
-                  ("packets count(packets)",
-                   [item[0] for item in self.stats_db.process_interval_statistics_query("SELECT pktscount from %s", table_name)], ""),
-                  ("Avg. kbyte rate(kbytes/sec)",
-                   [item[0] for item in self.stats_db.process_interval_statistics_query("SELECT kbyterate from %s", table_name)], ""),
-                  ("kbyte count(kbytes)",
-                   [item[0] for item in self.stats_db.process_interval_statistics_query("SELECT kbytes from %s", table_name)], "")]
-        return result
+        interval_stats = self.stats_db.process_interval_statistics_query("SELECT * from %s", table_name)
+
+        column_names = self.stats_db.get_field_types(table_name)
+        pretty_names = {'starttimestamp': "First packet timestamp(seconds)",
+                        'lastpkttimestamp': "Last packet timestamp(seconds)",
+                        'pktrate': "packets count(packets)",
+                        'kbyterate': "Avg. kbyte rate(kbytes/sec)",
+                        'kbytes': "kbyte count(kbytes)"}
+
+        final_names = []
+        inverted_table = {}
+        for i, name in enumerate(column_names):
+            if name in pretty_names.keys():
+                name = pretty_names[name]
+            inverted_table[name] = []
+            final_names.append(name)
+
+        for row in interval_stats:
+            for column, name in zip(row, final_names):
+                if type(column) == str:
+                    try:
+                        column = int(column)
+                    except ValueError:
+                        column = float(column)
+                inverted_table[name].append(column)
+
+        return inverted_table.items()
 
     @staticmethod
     def write_list(desc_val_unit_list, func, line_ending="\n"):
@@ -252,6 +266,10 @@ class Statistics:
             # round float
             if isinstance(value, float):
                 value = round(value, 4)
+            # check for lists
+            if isinstance(value, list):
+                # remove brackets
+                value = str(value)[1:-1]
             # write into file
             if len(entry) == 3:
                 unit = entry[2]