Move trigger stats to telemetry instruments

This commit is contained in:
Tim Wojtulewicz 2024-05-28 16:53:10 -07:00
parent 77c05357b5
commit 8b4af06484
2 changed files with 25 additions and 4 deletions

View file

@ -13,6 +13,7 @@
#include "zeek/Traverse.h" #include "zeek/Traverse.h"
#include "zeek/Val.h" #include "zeek/Val.h"
#include "zeek/iosource/Manager.h" #include "zeek/iosource/Manager.h"
#include "zeek/telemetry/Manager.h"
using namespace zeek::detail; using namespace zeek::detail;
using namespace zeek::detail::trigger; using namespace zeek::detail::trigger;
@ -437,7 +438,19 @@ Manager::Manager() : iosource::IOSource() { pending = new TriggerList(); }
Manager::~Manager() { delete pending; } 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<double>(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; } 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() ) { if ( std::find(pending->begin(), pending->end(), trigger) == pending->end() ) {
Ref(trigger); Ref(trigger);
pending->push_back(trigger); pending->push_back(trigger);
total_triggers++; trigger_count->Inc();
iosource_mgr->Wakeup(Tag()); iosource_mgr->Wakeup(Tag());
} }
} }
void Manager::GetStats(Stats* stats) { void Manager::GetStats(Stats* stats) {
stats->total = total_triggers; stats->total = static_cast<unsigned long>(trigger_count->Value());
stats->pending = pending->size(); stats->pending = pending->size();
} }

View file

@ -18,6 +18,13 @@ class Val;
using ValPtr = IntrusivePtr<Val>; using ValPtr = IntrusivePtr<Val>;
namespace telemetry {
class Gauge;
class Counter;
using GaugePtr = std::shared_ptr<Gauge>;
using CounterPtr = std::shared_ptr<Counter>;
} // namespace telemetry
namespace detail { namespace detail {
class Frame; class Frame;
@ -187,7 +194,8 @@ public:
private: private:
using TriggerList = std::list<Trigger*>; using TriggerList = std::list<Trigger*>;
TriggerList* pending; TriggerList* pending;
unsigned long total_triggers = 0; telemetry::CounterPtr trigger_count;
telemetry::GaugePtr trigger_pending;
}; };
} // namespace trigger } // namespace trigger