From e4fc91dde1760dbcf1c5eff12ac5aaa8b6fb3f08 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Tue, 2 Oct 2012 23:59:11 +0200 Subject: [PATCH] Made the network statistics work again. --- src/core/hub.c | 38 ++++++++++++++++++++++++++++++ src/core/hub.h | 1 + src/core/usermanager.c | 53 ------------------------------------------ src/core/usermanager.h | 3 --- 4 files changed, 39 insertions(+), 56 deletions(-) diff --git a/src/core/hub.c b/src/core/hub.c index 7229e76..714f8ec 100644 --- a/src/core/hub.c +++ b/src/core/hub.c @@ -600,6 +600,31 @@ static void hub_event_dispatcher(void* callback_data, struct event_data* message } } + +static void hub_update_stats(struct hub_info* hub) +{ + const int factor = TIMEOUT_STATS; + struct net_statistics* total; + struct net_statistics* intermediate; + net_stats_get(&intermediate, &total); + + hub->stats.net_tx = (intermediate->tx / factor); + hub->stats.net_rx = (intermediate->rx / factor); + hub->stats.net_tx_peak = MAX(hub->stats.net_tx, hub->stats.net_tx_peak); + hub->stats.net_rx_peak = MAX(hub->stats.net_rx, hub->stats.net_rx_peak); + hub->stats.net_tx_total = total->tx; + hub->stats.net_rx_total = total->rx; + + net_stats_reset(); +} + +static void hub_timer_statistics(struct timeout_evt* t) +{ + struct hub_info* hub = (struct hub_info*) t->ptr; + hub_update_stats(hub); + timeout_queue_reschedule(net_backend_get_timeout_queue(), hub->stats.timeout, TIMEOUT_STATS); +} + static struct net_connection* start_listening_socket(const char* bind_addr, uint16_t port, int backlog, struct hub_info* hub) { struct net_connection* server; @@ -816,6 +841,13 @@ struct hub_info* hub_start_service(struct hub_config* config) g_hub = hub; + if (net_backend_get_timeout_queue()) + { + hub->stats.timeout = hub_malloc_zero(sizeof(struct timeout_evt)); + timeout_evt_initialize(hub->stats.timeout, hub_timer_statistics, hub); + timeout_queue_insert(net_backend_get_timeout_queue(), hub->stats.timeout, TIMEOUT_STATS); + } + // Start the hub command sub-system hub->commands = command_initialize(hub); return hub; @@ -826,6 +858,12 @@ void hub_shutdown_service(struct hub_info* hub) { LOG_DEBUG("hub_shutdown_service()"); + if (net_backend_get_timeout_queue()) + { + timeout_queue_remove(net_backend_get_timeout_queue(), hub->stats.timeout); + hub_free(hub->stats.timeout); + } + #ifdef SSL_SUPPORT unload_ssl_certificates(hub); #endif diff --git a/src/core/hub.h b/src/core/hub.h index ae2d369..b0edee0 100644 --- a/src/core/hub.h +++ b/src/core/hub.h @@ -81,6 +81,7 @@ struct hub_stats size_t net_rx_peak; size_t net_tx_total; size_t net_rx_total; + struct timeout_evt* timeout; /**<< "Timeout handler for statistics" */ }; struct hub_logout_info diff --git a/src/core/usermanager.c b/src/core/usermanager.c index cd934fd..1d462fe 100644 --- a/src/core/usermanager.c +++ b/src/core/usermanager.c @@ -38,42 +38,6 @@ static void clear_user_list_callback(void* ptr) } } -#ifdef STATS_SUPPORT -void uman_update_stats(struct hub_user_manager* users) -{ - const int factor = TIMEOUT_STATS; - struct net_statistics* total; - struct net_statistics* intermediate; - net_stats_get(&intermediate, &total); - - users->stats.net_tx = (intermediate->tx / factor); - users->stats.net_rx = (intermediate->rx / factor); - users->stats.net_tx_peak = MAX(users->stats.net_tx, users->stats.net_tx_peak); - users->stats.net_rx_peak = MAX(users->stats.net_rx, users->stats.net_rx_peak); - users->stats.net_tx_total = total->tx; - users->stats.net_rx_total = total->rx; - - net_stats_reset(); -} - -void uman_print_stats(struct hub_user_manager* users) -{ - LOG_INFO("Statistics users=" PRINTF_SIZE_T " (peak_users=" PRINTF_SIZE_T "), net_tx=%d KB/s, net_rx=%d KB/s (peak_tx=%d KB/s, peak_rx=%d KB/s)", - users->users->count, - users->users->count_peak, - (int) users->stats.net_tx / 1024, - (int) users->stats.net_rx / 1024, - (int) users->stats.net_tx_peak / 1024, - (int) users->stats.net_rx_peak / 1024); -} - -static void timer_statistics(struct timeout_evt* t) -{ - struct hub_user_manager* users = (struct hub_user_manager*) t->ptr; - uman_update_stats(users); - timeout_queue_reschedule(net_backend_get_timeout_queue(), users->timeout, TIMEOUT_STATS); -} -#endif // STATS_SUPPORT struct hub_user_manager* uman_init() { @@ -91,15 +55,6 @@ struct hub_user_manager* uman_init() return NULL; } -#ifdef STATS_SUPPORT - if (net_backend_get_timeout_queue()) - { - users->timeout = hub_malloc_zero(sizeof(struct timeout_evt)); - timeout_evt_initialize(users->timeout, timer_statistics, hub); - timeout_queue_insert(net_backend_get_timeout_queue(), users->timeout, TIMEOUT_STATS); - } -#endif // STATS_SUPPORT - return users; } @@ -109,14 +64,6 @@ int uman_shutdown(struct hub_user_manager* users) if (!users) return -1; -#ifdef STATS_SUPPORT - if (net_backend_get_timeout_queue()) - { - timeout_queue_remove(net_backend_get_timeout_queue(), users->timeout); - hub_free(users->timeout); - } -#endif - if (users->list) { list_clear(users->list, &clear_user_list_callback); diff --git a/src/core/usermanager.h b/src/core/usermanager.h index 5971447..28d9e12 100644 --- a/src/core/usermanager.h +++ b/src/core/usermanager.h @@ -28,9 +28,6 @@ struct hub_user_manager uint64_t shared_size; /**<< "The total number of shared bytes among fully connected users." */ uint64_t shared_files; /**<< "The total number of shared files among fully connected users." */ struct linked_list* list; /**<< "Contains all logged in users" */ -#ifdef STATS_SUPPORT - struct timeout_evt* timeout; /**<< "Timeout handler for statistics" */ -#endif }; /**