Merge in SNORT/snort3 from ~OSTEPANO/snort3:mp_pubsub_global_stats to master
Squashed commit of the following:
commit
79442cdcc3c66b180d404771122f541d2e613542
Author: Oleksandr Stepanov <ostepano@cisco.com>
Date: Thu Aug 14 08:15:46 2025 -0400
mp_dbus: make MPDataBusModule stats thread safe
}
}
+MPDataBusStats MPDataBus::get_stats_copy()
+{
+ sum_stats();
+ {
+ std::lock_guard<std::mutex> lock(mp_stats_mutex);
+ return mp_global_stats;
+ }
+}
+
void MPDataBus::sum_stats()
{
std::lock_guard<std::mutex> lock(mp_stats_mutex);
auto transport_pegs = transport_module->get_pegs();
if(transport_pegs)
{
+ transport_module->sum_stats(false);
uint32_t size = 0;
while(transport_pegs[size].type != CountType::END)
{
void set_debug_enabled(bool flag);
+ MPDataBusStats get_stats_copy();
+
void sum_stats();
void reset_stats();
const PegInfo* get_pegs() const override;
PegCount* get_counts() const override;
void reset_stats() override;
+ void sum_stats(bool dump_stats) override;
Usage get_usage() const override
{ return GLOBAL; }
PegCount* MPDataBusModule::get_counts() const
{
- if(SnortConfig::get_conf()->mp_dbus)
- SnortConfig::get_conf()->mp_dbus->sum_stats();
- return (PegCount*)&MPDataBus::mp_global_stats;
+ return const_cast<PegCount*>(counts[get_instance_id()].data());
}
void MPDataBusModule::reset_stats()
{
if(SnortConfig::get_conf()->mp_dbus)
+ {
SnortConfig::get_conf()->mp_dbus->reset_stats();
+ }
+ Module::reset_stats();
}
+
+void MPDataBusModule::sum_stats(bool dump_stats)
+{
+ if (get_instance_id() != 0)
+ return;
+
+ if(SnortConfig::get_conf()->mp_dbus)
+ {
+ auto stats = SnortConfig::get_conf()->mp_dbus->get_stats_copy();
+ for (int i = 0; i < get_num_counts(); i++)
+ {
+ set_peg_count(i, ((PegCount*)&stats)[i], dump_stats);
+ }
+ }
+}
+
//-------------------------------------------------------------------------
// reference module
//-------------------------------------------------------------------------
return this->is_logging_enabled_flag;
}
+MPUnixTransportStats MPUnixDomainTransport::get_stats_copy()
+{
+ std::shared_lock<std::shared_mutex> _guard(_connection_update_mutex);
+ return this->transport_stats;
+}
+
void MPUnixDomainTransport::sum_stats()
{
std::lock_guard<std::shared_mutex> _guard(_connection_update_mutex);
MPUnixDomainTransportConfig* get_config()
{ return config; }
+ MPUnixTransportStats get_stats_copy();
void sum_stats();
void reset_stats();
}
PegCount *MPUnixDomainTransportModule::get_counts() const
+{
+ return const_cast<PegCount*>(counts[get_instance_id()].data());
+}
+
+void MPUnixDomainTransportModule::sum_stats(bool dump_stats)
{
+ if (get_instance_id() != 0)
+ return;
+
if (transport_handle)
{
transport_handle->sum_stats();
+
+ auto stats = transport_handle->get_stats_copy();
+
+ for (int i = 0; i < get_num_counts(); i++)
+ {
+ set_peg_count(i, ((PegCount*)&stats)[i], dump_stats);
+ }
}
-
- return (PegCount*)&unix_transport_stats;
}
void MPUnixDomainTransportModule::reset_stats()
{
- unix_transport_stats = MPUnixTransportStats();
if (transport_handle)
{
transport_handle->reset_stats();
const PegInfo* get_pegs() const override;
PegCount* get_counts() const override;
- bool global_stats() const override { return true; }
void reset_stats() override;
+ void sum_stats(bool dump_stats) override;
Usage get_usage() const override
{ return GLOBAL; }
{}
void MPUnixDomainTransport::disable_logging()
{}
+ MPUnixTransportStats MPUnixDomainTransport::get_stats_copy()
+ {
+ return {};
+ }
MPTransportChannelStatusHandle* MPUnixDomainTransport::get_channel_status(unsigned int& size)
{
size = 0;