Fix to checking metrics thresholds at the end of the break interval ($every field).

This commit is contained in:
Seth Hall 2012-12-04 00:15:19 -05:00
parent 4bb8babb45
commit 3ca0333294

View file

@ -143,7 +143,7 @@ event Metrics::cluster_filter_request(uid: string, id: string, filter_name: stri
event Metrics::send_data(uid, id, filter_name, store[id, filter_name]); event Metrics::send_data(uid, id, filter_name, store[id, filter_name]);
# Lookup the actual filter and reset it, the reference to the data # Lookup the actual filter and reset it, the reference to the data
# currently stored will be maintained interally by the send_data event. # currently stored will be maintained internally by the send_data event.
reset(filter_store[id, filter_name]); reset(filter_store[id, filter_name]);
} }
@ -232,6 +232,10 @@ event Metrics::cluster_filter_response(uid: string, id: string, filter_name: str
{ {
#print fmt("MANAGER: receiving results from %s", get_event_peer()$descr); #print fmt("MANAGER: receiving results from %s", get_event_peer()$descr);
# Mark another worker as being "done" for this uid.
if ( done )
++done_with[uid];
local local_data = filter_results[uid, id, filter_name]; local local_data = filter_results[uid, id, filter_name];
for ( index in data ) for ( index in data )
{ {
@ -239,11 +243,18 @@ event Metrics::cluster_filter_response(uid: string, id: string, filter_name: str
local_data[index] = merge_result_vals(local_data[index], data[index]); local_data[index] = merge_result_vals(local_data[index], data[index]);
else else
local_data[index] = data[index]; local_data[index] = data[index];
}
# Mark another worker as being "done" for this uid. # If a filter is done being collected, thresholds for each index
if ( done ) # need to checked so we're doing it here to avoid doubly iterating
++done_with[uid]; # over each index.
if ( Cluster::worker_count == done_with[uid] )
{
if ( check_thresholds(filter_store[id, filter_name], index, local_data[index], 1.0) )
{
threshold_crossed(filter_store[id, filter_name], index, local_data[index]);
}
}
}
# If the data has been collected from all peers, we are done and ready to log. # If the data has been collected from all peers, we are done and ready to log.
if ( Cluster::worker_count == done_with[uid] ) if ( Cluster::worker_count == done_with[uid] )