diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index 767c33cb1a..c1f73949cc 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -797,9 +797,9 @@ type ReporterStats: record { ## .. zeek:see:: get_event_handler_call_counts type EventNameCounter: record { ## Name of the zeek event. - name: string &log; - ## Times it was queued, as captured by event hook. - times_queued: count &log; + name: string &log; + ## Times it was called, as counted by the event handlers. + times_called: count &log; } &log; type EventNameStats: vector of EventNameCounter; diff --git a/src/stats.bif b/src/stats.bif index 9adc49b16c..0cf113b921 100644 --- a/src/stats.bif +++ b/src/stats.bif @@ -485,17 +485,15 @@ function get_reporter_stats%(%): ReporterStats return r; %} -## Returns a list of event handlers that were called and the number of times -## each was called. +## Returns statistics about calls to event handlers. ## ## Returns: A record with event call statistics. ## -function get_event_handler_call_counts%(%): EventNameStats +function get_event_handler_stats%(%): EventNameStats %{ auto rval = zeek::make_intrusive(zeek::id::find_type("EventNameStats")); const auto& recordType = zeek::id::find_type("EventNameCounter"); - int i = 0; const auto& events = event_registry->UsedHandlers(); for ( const auto& name : events ) { @@ -507,8 +505,7 @@ function get_event_handler_call_counts%(%): EventNameStats auto eventStatRecord = zeek::make_intrusive(recordType); eventStatRecord->Assign(0, zeek::make_intrusive(name)); eventStatRecord->Assign(1, zeek::val_mgr->Count(handler->CallCount())); - rval->Assign(i, std::move(eventStatRecord)); - i++; + rval->Append(std::move(eventStatRecord)); } } diff --git a/testing/btest/Baseline/bifs.event-handler-stats/out b/testing/btest/Baseline/bifs.event-handler-stats/out new file mode 100644 index 0000000000..90d679233f --- /dev/null +++ b/testing/btest/Baseline/bifs.event-handler-stats/out @@ -0,0 +1 @@ +[[name=Broker::log_flush, times_called=2], [name=ChecksumOffloading::check, times_called=2], [name=NetControl::init, times_called=1], [name=analyzer_confirmation_info, times_called=1], [name=connection_established, times_called=1], [name=connection_state_remove, times_called=1], [name=file_new, times_called=1], [name=file_over_new_connection, times_called=1], [name=file_sniff, times_called=1], [name=file_state_remove, times_called=1], [name=filter_change_tracking, times_called=3], [name=get_file_handle, times_called=4], [name=http_begin_entity, times_called=2], [name=http_end_entity, times_called=2], [name=http_header, times_called=13], [name=http_message_done, times_called=2], [name=http_reply, times_called=1], [name=http_request, times_called=1], [name=net_done, times_called=1], [name=new_connection, times_called=1], [name=run_sync_hook, times_called=2], [name=zeek_done, times_called=1], [name=zeek_init, times_called=1]] diff --git a/testing/btest/bifs/event-handler-stats.zeek b/testing/btest/bifs/event-handler-stats.zeek new file mode 100644 index 0000000000..129a5d8809 --- /dev/null +++ b/testing/btest/bifs/event-handler-stats.zeek @@ -0,0 +1,7 @@ +# @TEST-EXEC: zeek -r $TRACES/http/get.trace %INPUT >out +# @TEST-EXEC: btest-diff out + +event zeek_done() +{ + print(get_event_handler_stats()); +} \ No newline at end of file