diff --git a/scripts/base/frameworks/sumstats/non-cluster.bro b/scripts/base/frameworks/sumstats/non-cluster.bro index 9cf4041fc0..9fdd012404 100644 --- a/scripts/base/frameworks/sumstats/non-cluster.bro +++ b/scripts/base/frameworks/sumstats/non-cluster.bro @@ -37,9 +37,21 @@ event SumStats::finish_epoch(ss: SumStat) if ( ss?$epoch_result ) { local data = result_store[ss$name]; - event SumStats::process_epoch_result(ss, network_time(), data); - } + local now = network_time(); + if ( bro_is_terminating() ) + { + for ( key in data ) + ss$epoch_result(now, key, data[key]); + if ( ss?$epoch_finished ) + ss$epoch_finished(now); + } + else + { + event SumStats::process_epoch_result(ss, now, data); + } + } + # We can reset here because we know that the reference # to the data will be maintained by the process_epoch_result # event. diff --git a/testing/btest/scripts/base/frameworks/sumstats/basic.bro b/testing/btest/scripts/base/frameworks/sumstats/basic.bro index 6b153dfe39..d2cd51cc9e 100644 --- a/testing/btest/scripts/base/frameworks/sumstats/basic.bro +++ b/testing/btest/scripts/base/frameworks/sumstats/basic.bro @@ -23,8 +23,7 @@ event bro_init() &priority=5 local r = result["test.metric"]; print fmt("Host: %s - num:%d - sum:%.1f - var:%.1f - avg:%.1f - max:%.1f - min:%.1f - std_dev:%.1f - unique:%d - hllunique:%d", key$host, r$num, r$sum, r$variance, r$average, r$max, r$min, r$std_dev, r$unique, r$hll_unique); terminate(); - } - ]) + }]); SumStats::observe("test.metric", [$host=1.2.3.4], [$num=5]); SumStats::observe("test.metric", [$host=1.2.3.4], [$num=22]);