diff --git a/scripts/base/frameworks/measurement/main.bro b/scripts/base/frameworks/measurement/main.bro index 7685099068..db59a7ba85 100644 --- a/scripts/base/frameworks/measurement/main.bro +++ b/scripts/base/frameworks/measurement/main.bro @@ -293,14 +293,19 @@ function add_data(id: string, key: Key, point: DataPoint) key = r$normalize_key(copy(key)); local m = measurement_store[r$mid]; - local results = result_store[m$id]; + + if ( r$mid !in result_store ) + result_store[m$id] = table(); + local results = result_store[r$mid]; + if ( key !in results ) results[key] = table(); - if ( id !in results[key] ) - results[key][id] = init_resultval(r); - local result = results[key]; + + if ( id !in result ) + result[id] = init_resultval(r); local result_val = result[id]; + ++result_val$num; # Continually update the $end field. result_val$end=network_time(); diff --git a/scripts/base/frameworks/measurement/plugins/sample.bro b/scripts/base/frameworks/measurement/plugins/sample.bro index 399f572490..0187946d61 100644 --- a/scripts/base/frameworks/measurement/plugins/sample.bro +++ b/scripts/base/frameworks/measurement/plugins/sample.bro @@ -4,16 +4,16 @@ module Measurement; export { - redef record Reducer += { ## A number of sample DataPoints to collect. samples: count &default=0; }; redef record ResultVal += { - # This is the queue where samples - # are maintained. Use the :bro:see:`Measurement::get_samples` - ## function to get a vector of the samples. + ## This is the queue where samples + ## are maintained. Use the + ## :bro:see:`Measurement::get_samples` function + ## to get a vector of the samples. samples: Queue::Queue &optional; }; diff --git a/scripts/base/frameworks/measurement/plugins/std-dev.bro b/scripts/base/frameworks/measurement/plugins/std-dev.bro index bfcaa67910..63dcc62d4b 100644 --- a/scripts/base/frameworks/measurement/plugins/std-dev.bro +++ b/scripts/base/frameworks/measurement/plugins/std-dev.bro @@ -11,7 +11,7 @@ export { redef record ResultVal += { ## For numeric data, this calculates the standard deviation. - std_dev: double &optional; + std_dev: double &default=0.0; }; } @@ -28,8 +28,6 @@ hook add_to_reducer_hook(r: Reducer, val: double, data: DataPoint, rv: ResultVal { if ( rv?$variance ) calc_std_dev(rv); - else - rv$std_dev = 0.0; } } diff --git a/scripts/base/frameworks/measurement/plugins/variance.bro b/scripts/base/frameworks/measurement/plugins/variance.bro index 2868a8a3ad..3c2223430d 100644 --- a/scripts/base/frameworks/measurement/plugins/variance.bro +++ b/scripts/base/frameworks/measurement/plugins/variance.bro @@ -44,7 +44,8 @@ hook add_to_reducer_hook(r: Reducer, val: double, data: DataPoint, rv: ResultVal # Reduced priority since this depends on the average hook compose_resultvals_hook(result: ResultVal, rv1: ResultVal, rv2: ResultVal) &priority=-5 { - if ( rv1?$var_s && rv2?$var_s ) + if ( rv1?$var_s && rv1?$average && + rv2?$var_s && rv2?$average ) { local rv1_avg_sq = (rv1$average - result$average); rv1_avg_sq = rv1_avg_sq*rv1_avg_sq;