diff --git a/src/Trigger.cc b/src/Trigger.cc index dae99bab37..3dfe76e2dc 100644 --- a/src/Trigger.cc +++ b/src/Trigger.cc @@ -13,6 +13,7 @@ #include "zeek/Traverse.h" #include "zeek/Val.h" #include "zeek/iosource/Manager.h" +#include "zeek/telemetry/Manager.h" using namespace zeek::detail; using namespace zeek::detail::trigger; @@ -437,7 +438,19 @@ Manager::Manager() : iosource::IOSource() { pending = new TriggerList(); } Manager::~Manager() { delete pending; } -void Manager::InitPostScript() { iosource_mgr->Register(this, true); } +void Manager::InitPostScript() { + trigger_count = telemetry_mgr->CounterInstance("zeek", "triggers", {}, "Total number of triggers scheduled"); + trigger_pending = + telemetry_mgr->GaugeInstance("zeek", "pending_triggers", {}, "Pending number of triggers", "", + []() -> prometheus::ClientMetric { + prometheus::ClientMetric metric; + metric.gauge.value = + trigger_mgr ? static_cast(trigger_mgr->pending->size()) : 0.0; + return metric; + }); + + iosource_mgr->Register(this, true); +} double Manager::GetNextTimeout() { return pending->empty() ? -1 : run_state::network_time + 0.100; } @@ -468,13 +481,13 @@ void Manager::Queue(Trigger* trigger) { if ( std::find(pending->begin(), pending->end(), trigger) == pending->end() ) { Ref(trigger); pending->push_back(trigger); - total_triggers++; + trigger_count->Inc(); iosource_mgr->Wakeup(Tag()); } } void Manager::GetStats(Stats* stats) { - stats->total = total_triggers; + stats->total = static_cast(trigger_count->Value()); stats->pending = pending->size(); } diff --git a/src/Trigger.h b/src/Trigger.h index 6c4fade3be..5955cc25b4 100644 --- a/src/Trigger.h +++ b/src/Trigger.h @@ -18,6 +18,13 @@ class Val; using ValPtr = IntrusivePtr; +namespace telemetry { +class Gauge; +class Counter; +using GaugePtr = std::shared_ptr; +using CounterPtr = std::shared_ptr; +} // namespace telemetry + namespace detail { class Frame; @@ -187,7 +194,8 @@ public: private: using TriggerList = std::list; TriggerList* pending; - unsigned long total_triggers = 0; + telemetry::CounterPtr trigger_count; + telemetry::GaugePtr trigger_pending; }; } // namespace trigger