56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
#include "Threads/StatisticsThread.hpp"
|
|
|
|
//-------------------------------------------------------------------------
|
|
//-------------------------- StatisticsThread -----------------------------
|
|
//-------------------------------------------------------------------------
|
|
|
|
rte_ring* StatisticsThread::_s_queue[16];
|
|
|
|
int StatisticsThread::s_run(void* thread_vptr) {
|
|
StatisticsThread* thread = static_cast<StatisticsThread*>(thread_vptr);
|
|
thread->run();
|
|
return 0;
|
|
}
|
|
|
|
void StatisticsThread::run() {
|
|
// Check for new statistics in each rte_ring
|
|
while (_quit != false) {
|
|
for (rte_ring* ring : _s_queue) {
|
|
// Get stats from queue and update them
|
|
Stats* out;
|
|
rte_ring_dequeue(ring, (void**)&out);
|
|
|
|
if (true) { // \TODO test if empty
|
|
update_statistics(out);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void StatisticsThread::enqueue_statistics(int& id, Stats* new_stats) {
|
|
// enqueue statistics
|
|
rte_ring* ring = _s_queue[id];
|
|
rte_ring_enqueue(ring, new_stats);
|
|
}
|
|
|
|
Stats* StatisticsThread::_s_stats;
|
|
|
|
void StatisticsThread::update_statistics(Stats* new_stats) {
|
|
//_s_stats += new_stats;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------
|
|
//-------------------------- Stats ----------------------------------------
|
|
//-------------------------------------------------------------------------
|
|
|
|
Stats* Stats::operator+=(const Stats* new_stats) {
|
|
this->attacks += new_stats->attacks;
|
|
this->bytes += new_stats->bytes;
|
|
this->dropped += new_stats->dropped;
|
|
this->packets += new_stats->packets;
|
|
this->work_time += new_stats->work_time;
|
|
this->syn_level += new_stats->syn_level;
|
|
|
|
return this;
|
|
}
|