Browse Source

fix -si argument, now usable without -r

Jens Keim 5 years ago
parent
commit
79d7fb06e6

+ 16 - 5
code/Core/Statistics.py

@@ -83,6 +83,15 @@ class Statistics:
         # Load pcap and get loading time
         time_start = time.clock()
 
+        # Make sure user specified intervals are a list
+        if intervals is None or intervals is []:
+            intervals = [0.0]
+        elif not isinstance(intervals, list):
+            intervals = [intervals]
+
+        # Get interval statistics tables which already exist
+        previous_intervals = self.list_previous_interval_statistic_tables()
+
         # Inform user about recalculation of statistics and its reason
         if flag_recalculate_stats:
             print("Flag -r/--recalculate found. Recalculating statistics.")
@@ -91,7 +100,6 @@ class Statistics:
         if (not self.stats_db.get_db_exists()) or flag_recalculate_stats or self.stats_db.get_db_outdated():
             self.pcap_proc = pr.pcap_processor(self.pcap_filepath, str(self.do_extra_tests), Util.RESOURCE_DIR)
 
-            previous_intervals = self.list_previous_interval_statistic_tables()
             recalc_intervals = None
             if previous_intervals:
                 recalc_intervals = recalculate_intervals
@@ -106,10 +114,6 @@ class Statistics:
                         delete = True
                     else:
                         print("This was no valid input.")
-            if intervals is None or intervals is []:
-                intervals = [0.0]
-            elif not isinstance(intervals, list):
-                intervals = [intervals]
             if recalc_intervals and previous_intervals:
                 intervals = list(set(intervals + previous_intervals))
             self.pcap_proc.collect_statistics(intervals)
@@ -121,6 +125,13 @@ class Statistics:
                 self.stats_summary_new_db()
         else:
             outstring_datasource = "from statistics database."
+            self.pcap_proc = pr.pcap_processor(self.pcap_filepath, str(self.do_extra_tests), Util.RESOURCE_DIR)
+            for interval in intervals:
+                if interval in previous_intervals:
+                    intervals.remove(interval)
+            if intervals is not None and intervals != []:
+                self.pcap_proc.collect_statistics(intervals)
+                self.pcap_proc.write_new_interval_statistics(self.path_db, intervals)
 
         # Load statistics from database
         self.file_info = self.stats_db.get_file_info()

+ 11 - 0
code_boost/src/cxx/pcap_processor.cpp

@@ -414,6 +414,16 @@ void pcap_processor::write_to_database(std::string database_path, const py::list
     stats.writeToDatabase(database_path, timeIntervals, del);
 }
 
+void pcap_processor::write_new_interval_statistics(std::string database_path, const py::list& intervals) {
+    std::vector<std::chrono::duration<int, std::micro>> timeIntervals;
+    for (auto interval: intervals) {
+        double interval_double = interval.cast<double>();
+        std::chrono::duration<int, std::micro> timeInterval(static_cast<long>(interval_double * 1000000));
+        timeIntervals.push_back(timeInterval);
+    }
+    stats.writeIntervalsToDatabase(database_path, timeIntervals, false);
+}
+
 /**
  * Checks whether the file with the given file path exists.
  * @param filePath The path to the file to check.
@@ -460,5 +470,6 @@ PYBIND11_MODULE (libpcapreader, m) {
             .def("collect_statistics", &pcap_processor::collect_statistics)
             .def("get_timestamp_mu_sec", &pcap_processor::get_timestamp_mu_sec)
             .def("write_to_database", &pcap_processor::write_to_database)
+            .def("write_new_interval_statistics", &pcap_processor::write_new_interval_statistics)
             .def_static("get_db_version", &pcap_processor::get_db_version);
 }

+ 3 - 1
code_boost/src/cxx/pcap_processor.h

@@ -54,7 +54,9 @@ public:
 
     void write_to_database(std::string database_path, const py::list& intervals, bool del);
 
-    static int get_db_version() { return statistics_db::DB_VERSION; };
+    void write_new_interval_statistics(std::string database_path, const py::list& intervals);
+
+    static int get_db_version() { return statistics_db::DB_VERSION; }
 };
 
 

+ 5 - 0
code_boost/src/cxx/statistics.cpp

@@ -797,3 +797,8 @@ void statistics::writeToDatabase(std::string database_path, std::vector<std::chr
         return;
     }
 }
+
+void statistics::writeIntervalsToDatabase(std::string database_path, std::vector<std::chrono::duration<int, std::micro>> timeIntervals, bool del) {
+    statistics_db db(database_path, resourcePath);
+    db.writeStatisticsInterval(interval_statistics, timeIntervals, del, this->default_interval);
+}

+ 2 - 0
code_boost/src/cxx/statistics.h

@@ -600,6 +600,8 @@ public:
 
     void writeToDatabase(std::string database_path, std::vector<std::chrono::duration<int, std::micro>> timeInterval, bool del);
 
+    void writeIntervalsToDatabase(std::string database_path, std::vector<std::chrono::duration<int, std::micro>> timeIntervals, bool del);
+
     void addPacketSize(uint32_t packetSize);
 
     std::string getCaptureDurationTimestamp() const;