75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * @file StatisticsThread.hpp
 | |
|  * @author Jakob
 | |
|  * @brief 
 | |
|  * @version 0.1
 | |
|  * @date 2021-07-12
 | |
|  * 
 | |
|  * @copyright Copyright (c) 2021
 | |
|  * 
 | |
|  */
 | |
| #pragma once
 | |
| 
 | |
| #include <cstdint>
 | |
| #include <cstdio>
 | |
| #include <iostream>
 | |
| #include <ostream>
 | |
| #include <rte_errno.h>
 | |
| #include <rte_lcore.h>
 | |
| #include <rte_ring.h>
 | |
| //#include <rte_ring_core.h>
 | |
| //#include <rte_ring_elem.h>
 | |
| #include <string>
 | |
| 
 | |
| #include "Threads/Thread.hpp"
 | |
| #include "Definitions.hpp"
 | |
| 
 | |
| struct Stats {
 | |
|     uint64_t attacks;
 | |
|     uint64_t bytes;
 | |
|     uint64_t dropped;
 | |
|     uint64_t packets;
 | |
|     uint64_t work_time;
 | |
| 
 | |
|     Stats& operator+=(const Stats& new_stats);
 | |
|     void reset_stats();
 | |
| };
 | |
| 
 | |
| // all current stats which can be displayed
 | |
| struct StatsMonitor {
 | |
|     double attacks_per_second;
 | |
|     double attacks_percent;
 | |
|     double bytes_per_second;
 | |
|     double dropped_per_second;
 | |
|     double dropped_percent;
 | |
|     double packets_per_second;
 | |
|     double process_speed;
 | |
|     double total_time;
 | |
| };
 | |
| 
 | |
| class StatisticsThread : public Thread {
 | |
|   public:
 | |
|     StatisticsThread();
 | |
|     static int s_run(void* thread_vptr);
 | |
| 
 | |
|     void enqueue_statistics(const unsigned int& id, Stats* new_stats);
 | |
|     void update_statistics_monitor();
 | |
|     void print_stats_monitor();
 | |
| 
 | |
|   private:
 | |
|     void run();
 | |
|     static rte_ring* _s_queue[16]; // todo : dynamic
 | |
|     Stats* _s_stats;
 | |
|     StatsMonitor* _s_stats_monitor;
 | |
| 
 | |
|     uint64_t timer_get_seconds();
 | |
|     void timer_reset();
 | |
| 
 | |
|     // timer variables
 | |
|     uint64_t cycles_old = 0;
 | |
|     uint64_t cycles = 0;
 | |
|     uint64_t seconds = 0;
 | |
|     uint64_t delta_t = 0;
 | |
|     uint64_t hz;
 | |
| };
 |