odissey: fix periodic stats diff and sanity check

This commit is contained in:
Dmitry Simonenko 2017-08-21 13:25:38 +03:00
parent b5922d5951
commit f1a9a203dd
1 changed files with 12 additions and 7 deletions

View File

@ -87,14 +87,17 @@ od_periodic_stats(od_router_t *router)
/* calculate average between previous sample and the /* calculate average between previous sample and the
current one */ current one */
int64_t reqs_diff;
reqs_diff = stats.count_request - route->periodic_stats.count_request;
uint64_t recv_client = 0; uint64_t recv_client = 0;
uint64_t recv_server = 0; uint64_t recv_server = 0;
uint64_t reqs = 0; uint64_t reqs = 0;
uint64_t query_time = 0; uint64_t query_time = 0;
if (reqs_diff >= 0)
/* ensure server stats not changed due to a
* server connection close */
int64_t reqs_diff_sanity;
reqs_diff_sanity = (stats.count_request - route->periodic_stats.count_request);
if (reqs_diff_sanity >= 0)
{ {
/* request count */ /* request count */
uint64_t reqs_prev = 0; uint64_t reqs_prev = 0;
@ -105,8 +108,10 @@ od_periodic_stats(od_router_t *router)
reqs_current = stats.count_request / reqs_current = stats.count_request /
instance->scheme.stats_interval; instance->scheme.stats_interval;
reqs = (reqs_current - reqs_prev) / int64_t reqs_diff;
instance->scheme.stats_interval; reqs_diff = reqs_current - reqs_prev;
reqs = reqs_diff / instance->scheme.stats_interval;
/* recv client */ /* recv client */
uint64_t recv_client_prev = 0; uint64_t recv_client_prev = 0;
@ -135,7 +140,7 @@ od_periodic_stats(od_router_t *router)
/* query time */ /* query time */
if (reqs_diff > 0) if (reqs_diff > 0)
query_time = (stats.query_time - route->periodic_stats.query_time) / query_time = (stats.query_time - route->periodic_stats.query_time) /
(reqs_current - reqs_prev); reqs_diff;
} }
/* update stats */ /* update stats */