Browse Source

Indicate progress every second when generating statistics database

Stefan Schmidt 6 years ago
parent
commit
42e3688c5c

+ 17 - 2
code_boost/src/cxx/pcap_processor.cpp

@@ -128,6 +128,7 @@ void pcap_processor::collect_statistics() {
         // Save timestamp of first packet
         stats.setTimestampFirstPacket(i->timestamp());
 
+        int totalPackets = 0;
         int timeIntervalCounter = 1;
         int timeIntervalsNum = 100;
         std::chrono::microseconds intervalStartTimestamp = stats.getTimestampFirstPacket();
@@ -135,7 +136,7 @@ void pcap_processor::collect_statistics() {
 
         // An empty loop to know the capture duration, then choose a suitable time interval
         SnifferIterator lastpkt; 
-        for (SnifferIterator j = snifferOverview.begin(); j != snifferOverview.end();  snifferIteratorIncrement(j)) {lastpkt = j;}          
+        for (SnifferIterator j = snifferOverview.begin(); j != snifferOverview.end(); ++j, ++totalPackets) {lastpkt = j;}
 
         std::chrono::microseconds lastTimestamp = lastpkt->timestamp();                  
         std::chrono::microseconds captureDuration = lastTimestamp - firstTimestamp;
@@ -147,6 +148,9 @@ void pcap_processor::collect_statistics() {
         std::chrono::duration<int, std::micro> timeInterval(timeInterval_microsec);
         std::chrono::microseconds barrier = timeInterval;
 
+        std::cout << "\n";
+        std::chrono::system_clock::time_point lastPrinted = std::chrono::system_clock::now();
+
         // Iterate over all packets and collect statistics
         for (; i != sniffer.end(); i++) {
             currentPktTimestamp = i->timestamp();
@@ -163,8 +167,19 @@ void pcap_processor::collect_statistics() {
 
             stats.incrementPacketCount();
             this->process_packets(*i);
+
+            // Indicate progress once every second
+            if (std::chrono::system_clock::now() - lastPrinted >= std::chrono::seconds(1)) {
+                int packetCount = stats.getPacketCount();
+                std::cout << "\rInspected packets: ";
+                std::cout << std::fixed << std::setprecision(1) << (static_cast<float>(packetCount)*100/totalPackets) << "%";
+                std::cout << " (" << packetCount << "/" << totalPackets << ")" << std::flush;
+                lastPrinted = std::chrono::system_clock::now();
+            }
         }
-        
+
+        std::cout << "\n";
+
         // Save timestamp of last packet into statistics
         stats.setTimestampLastPacket(currentPktTimestamp);
     }

+ 1 - 9
code_boost/src/cxx/utilities.cpp

@@ -74,14 +74,6 @@ std::string getIPv4Class(std::string ipAddress){
     return ipClass;
 }
 
-/**
- * Advance iterator by 10 steps.
- * @param iterator to advance.
- */
-void snifferIteratorIncrement(Tins::SnifferIterator& iterator){
-    (((((((((iterator++)++)++)++)++)++)++)++)++)++;  
-}
-
 /**
  * Convert IP address from string to array of bytes.
  * @param IP to convert.
@@ -194,4 +186,4 @@ bool check_tcpChecksum(std::string ipAddressSender, std::string ipAddressReceive
     calculatedChecsum = tcp_sum_calc(bufferArray_8.size(), ipAddressSender_bytes, ipAddressReceiver_bytes, padding, buff_16);
 
     return (calculatedChecsum == checksum);
-}
+}

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

@@ -23,8 +23,6 @@ using namespace Tins;
 
 std::string getIPv4Class(std::string ipAddress);
 
-void snifferIteratorIncrement(Tins::SnifferIterator& iterator);
-
 void convertIPv4toArray(std::string IP, unsigned short IP_bytes[]);
 
 void split_str(const std::string& s, char delim,std::vector<std::string>& v);