return file_id_rules;
}
-void FileIdModule::sum_stats(bool accumulate_now_stats)
+void FileIdModule::sum_stats(bool dump_stats)
{
file_stats_sum();
- Module::sum_stats(accumulate_now_stats);
+ Module::sum_stats(dump_stats);
}
bool FileIdModule::set(const char*, Value& v, SnortConfig*)
}
}
-void Module::sum_stats(bool accumulate_now_stats)
+void Module::sum_stats(bool dump_stats)
{
if ( num_counts < 0 )
reset_stats();
return;
assert(q);
+ if(dump_stats && !dump_stats_initialized)
+ {
+ for (unsigned long i=0; i<counts.size(); i++)
+ dump_stats_counts[i] = counts[i];
+ dump_stats_initialized = true;
+ }
if ( global_stats() )
{
for ( int i = 0; i < num_counts; i++ )
- set_peg_count(i, p[i]);
+ set_peg_count(i, p[i], dump_stats);
}
else
{
break;
case CountType::SUM:
- add_peg_count(i, p[i]);
- p[i] = 0;
+ add_peg_count(i, p[i], dump_stats);
+ if(!dump_stats)
+ p[i] = 0;
break;
case CountType::NOW:
- if ( accumulate_now_stats )
- add_peg_count(i, p[i]);
+ if ( dump_stats )
+ add_peg_count(i, p[i], dump_stats);
break;
case CountType::MAX:
- set_max_peg_count(i, p[i]);
+ set_max_peg_count(i, p[i], dump_stats);
break;
}
}
void Module::show_stats()
{
if ( num_counts > 0 )
- ::show_stats(&counts[0], get_pegs(), num_counts, get_name());
+ {
+ ::show_stats(&dump_stats_counts[0], get_pegs(), num_counts, get_name());
+ dump_stats_initialized = false;
+ }
}
void Module::reset_stats()
++num_counts;
counts.resize(num_counts);
+ dump_stats_counts.resize(num_counts);
}
for ( int i = 0; i < num_counts; i++ )
{
counts[i] = 0;
+ dump_stats_counts[i] = 0;
if ( pegs[i].type != CountType::NOW )
p[i] = 0;
virtual bool counts_need_prep() const
{ return false; }
- virtual void prep_counts() { }
+ virtual void prep_counts(bool) { }
// counts and profile are thread local
virtual PegCount* get_counts() const
virtual bool global_stats() const
{ return false; }
- virtual void sum_stats(bool accumulate_now_stats);
+ virtual void sum_stats(bool dump_stats);
virtual void show_interval_stats(IndexVec&, FILE*);
virtual void show_stats();
virtual void reset_stats();
void set_params(const Parameter* p)
{ params = p; }
+ bool dump_stats_initialized = false;
+
private:
friend ModuleManager;
void init(const char*, const char* = nullptr);
std::vector<PegCount> counts;
+ std::vector<PegCount> dump_stats_counts;
int num_counts = -1;
const char* name;
bool list;
int table_level = 0;
- void set_peg_count(int index, PegCount value)
+ void set_peg_count(int index, PegCount value, bool dump_stats = false)
{
assert(index < num_counts);
- counts[index] = value;
+ if(dump_stats)
+ dump_stats_counts[index] = value;
+ else
+ counts[index] = value;
}
- void set_max_peg_count(int index, PegCount value)
+ void set_max_peg_count(int index, PegCount value, bool dump_stats = false)
{
assert(index < num_counts);
- if(value > counts[index])
- counts[index] = value;
+ if(dump_stats)
+ {
+ if(value > dump_stats_counts[index])
+ dump_stats_counts[index] = value;
+ }
+ else
+ {
+ if(value > counts[index])
+ counts[index] = value;
+ }
}
- void add_peg_count(int index, PegCount value)
+ void add_peg_count(int index, PegCount value, bool dump_stats = false)
{
assert(index < num_counts);
- counts[index] += value;
+ if(dump_stats)
+ dump_stats_counts[index] += value;
+ else
+ counts[index] += value;
+
}
};
}
PegCount* HostCacheModule::get_counts() const
{ return (PegCount*)host_cache.get_counts(); }
-void HostCacheModule::sum_stats(bool accumulate_now_stats)
+void HostCacheModule::sum_stats(bool dump_stats)
{
host_cache.lock();
// These could be set in prep_counts but we set them here
host_cache.stats.bytes_in_use = host_cache.current_size;
host_cache.stats.items_in_use = host_cache.list.size();
- Module::sum_stats(accumulate_now_stats);
+ Module::sum_stats(dump_stats);
host_cache.unlock();
}
ModHook* mh = get_hook(name);
if ( mh )
- pc = &mh->mod->counts[0];
+ pc = &mh->mod->dump_stats_counts[0];
return pc;
}
continue;
lock_guard<mutex> lock(stats_mutex);
- mh->mod->prep_counts();
+ mh->mod->prep_counts(true);
mh->mod->sum_stats(true);
}
}
if ( mh )
{
lock_guard<mutex> lock(stats_mutex);
- mh->mod->prep_counts();
+ mh->mod->prep_counts(true);
mh->mod->sum_stats(true);
}
}
return (PegCount*)&appid_stats;
}
-void AppIdModule::sum_stats(bool accumulate_now_stats)
+void AppIdModule::sum_stats(bool dump_stats)
{
AppIdPegCounts::sum_stats();
- Module::sum_stats(accumulate_now_stats);
+ Module::sum_stats(dump_stats);
}
void AppIdModule::show_dynamic_stats()
void BaseTracker::process(bool summary)
{
for ( Module* mod : mods_to_prep )
- mod->prep_counts();
+ mod->prep_counts(false);
write();
};
THREAD_LOCAL DAQStats daq_stats;
+static THREAD_LOCAL DAQ_Stats_t prev_daq_stats;
const PegInfo* SFDAQModule::get_pegs() const
{
return ret;
}
-void SFDAQModule::prep_counts()
+void SFDAQModule::prep_counts(bool dump_stats)
{
- static THREAD_LOCAL DAQ_Stats_t prev_daq_stats;
if ( SFDAQ::get_local_instance() == nullptr )
return;
else
daq_stats.outstanding = 0;
- prev_daq_stats = new_daq_stats;
+ if(!dump_stats)
+ prev_daq_stats = new_daq_stats;
}
void SFDAQModule::reset_stats()
{
+ if ( SFDAQ::get_local_instance() != nullptr )
+ {
+ DAQ_Stats_t new_daq_stats = *SFDAQ::get_stats();
+ prev_daq_stats = new_daq_stats;
+ }
Trough::clear_file_count();
Module::reset_stats();
}
const PegInfo* get_pegs() const override;
PegCount* get_counts() const override;
- void prep_counts() override;
+ void prep_counts(bool dump_stats) override;
void reset_stats() override;
bool counts_need_prep() const override
std::vector<FlowControl *> crash_dump_flow_control;
static std::mutex crash_dump_flow_control_mutex;
-static BaseStats g_stats;
THREAD_LOCAL BaseStats stream_base_stats;
-THREAD_LOCAL PegCount current_flows_prev;
-THREAD_LOCAL PegCount uni_flows_prev;
-THREAD_LOCAL PegCount uni_ip_flows_prev;
+
// FIXIT-L dependency on stats define in another file
const PegInfo base_pegs[] =
}
}
-void base_sum()
-{
- sum_stats((PegCount*)&g_stats, (PegCount*)&stream_base_stats,
- array_size(base_pegs) - 1 - NOW_PEGS_NUM);
-
- g_stats.current_flows += (int64_t)stream_base_stats.current_flows - (int64_t)current_flows_prev;
- g_stats.uni_flows += (int64_t)stream_base_stats.uni_flows - (int64_t)uni_flows_prev;
- g_stats.uni_ip_flows += (int64_t)stream_base_stats.uni_ip_flows - (int64_t)uni_ip_flows_prev;
-
- base_reset(false);
-}
-
-void base_stats()
+void base_reset()
{
- show_stats((PegCount*)&g_stats, base_pegs, array_size(base_pegs) - 1, MOD_NAME);
-}
-
-void base_reset(bool reset_all)
-{
- current_flows_prev = stream_base_stats.current_flows;
- uni_flows_prev = stream_base_stats.uni_flows;
- uni_ip_flows_prev = stream_base_stats.uni_ip_flows;
-
memset(&stream_base_stats, 0, sizeof(stream_base_stats));
if ( flow_con )
if ( exp_cache )
exp_cache->reset_stats();
}
-
- if ( reset_all )
- memset(&g_stats, 0, sizeof(g_stats));
}
//-------------------------------------------------------------------------
return true;
}
-void StreamModule::prep_counts()
+void StreamModule::prep_counts(bool)
{ base_prep(); }
-void StreamModule::sum_stats(bool)
-{ base_sum(); }
-
-void StreamModule::show_stats()
-{ base_stats(); }
+void StreamModule::sum_stats(bool dump_stats)
+{
+ Module::sum_stats(dump_stats);
+ if(!dump_stats)
+ base_reset();
+}
void StreamModule::reset_stats()
-{ base_reset(); }
+{
+ base_reset();
+ Module::reset_stats();
+}
// Stream handler to adjust allocated resources as needed on a config reload
bool StreamReloadResourceManager::initialize(const StreamModuleConfig& config_)
unsigned get_gid() const override;
const snort::RuleMap* get_rules() const override;
- void prep_counts() override;
+ void prep_counts(bool dump_stats) override;
void sum_stats(bool) override;
- void show_stats() override;
void reset_stats() override;
bool counts_need_prep() const override
};
extern void base_prep();
-extern void base_sum();
-extern void base_stats();
-extern void base_reset(bool reset_all=true);
+extern void base_reset();
#endif
PegCount Module::get_global_count(char const*) const { return 0; }
void Module::show_interval_stats(std::vector<unsigned int, std::allocator<unsigned int> >&, FILE*) {}
void Module::show_stats(){}
-void Module::sum_stats(bool ){}
+void Module::sum_stats(bool){}
void Module::reset_stats() {}
class TraceTestModule : public Module
//-------------------------------------------------------------------------
void sum_stats(
- PegCount* gpegs, PegCount* tpegs, unsigned n)
+ PegCount* gpegs, PegCount* tpegs, unsigned n, bool dump_stats)
{
for ( unsigned i = 0; i < n; ++i )
{
gpegs[i] += tpegs[i];
- tpegs[i] = 0;
+ if(!dump_stats)
+ tpegs[i] = 0;
}
}
SO_PUBLIC void LogStat(const char*, double, FILE* = stdout);
}
-void sum_stats(PegCount* sums, PegCount* counts, unsigned n);
+void sum_stats(PegCount* sums, PegCount* counts, unsigned n, bool dump_stats = false);
void show_stats(PegCount*, const PegInfo*, const char* module_name = nullptr);
void show_stats(PegCount*, const PegInfo*, unsigned n, const char* module_name = nullptr);
void show_stats(PegCount*, const PegInfo*, const IndexVec&, const char* module_name, FILE*);