diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-03-27 16:24:48 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-04-10 11:45:03 +0000 |
commit | f325ef59020b0acc33b6d05e96c8df7b58373715 (patch) | |
tree | 820d9d192275a6f95f4b150eb6fefb11d99f7cb5 /src | |
parent | b3ec30403fb813cf3902a02350289e769858f10e (diff) |
api,bearer: add 'attempts' and 'failed-attempts' statistics
When we're reusing over and over the same bearer object, we can
provide statistical information about the number of connection
attempts that have been done and how many of them failed.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-base-bearer.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 461c4058..718956fd 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -254,18 +254,19 @@ bearer_update_interface_stats (MMBaseBearer *self) } static void -bearer_reset_interface_stats (MMBaseBearer *self) +bearer_reset_ongoing_interface_stats (MMBaseBearer *self) { - g_clear_object (&self->priv->stats); - mm_gdbus_bearer_set_stats (MM_GDBUS_BEARER (self), NULL); + mm_bearer_stats_set_duration (self->priv->stats, 0); + mm_bearer_stats_set_tx_bytes (self->priv->stats, 0); + mm_bearer_stats_set_rx_bytes (self->priv->stats, 0); + bearer_update_interface_stats (self); } static void bearer_stats_stop (MMBaseBearer *self) { if (self->priv->duration_timer) { - if (self->priv->stats) - mm_bearer_stats_set_duration (self->priv->stats, (guint64) g_timer_elapsed (self->priv->duration_timer, NULL)); + mm_bearer_stats_set_duration (self->priv->stats, (guint64) g_timer_elapsed (self->priv->duration_timer, NULL)); g_timer_destroy (self->priv->duration_timer); self->priv->duration_timer = NULL; } @@ -337,11 +338,6 @@ stats_update_cb (MMBaseBearer *self) static void bearer_stats_start (MMBaseBearer *self) { - /* Allocate new stats object. If there was one already created from a - * previous run, deallocate it */ - g_assert (!self->priv->stats); - self->priv->stats = mm_bearer_stats_new (); - /* Start duration timer */ g_assert (!self->priv->duration_timer); self->priv->duration_timer = g_timer_new (); @@ -731,7 +727,13 @@ connect_ready (MMBaseBearer *self, /* NOTE: connect() implementations *MUST* handle cancellations themselves */ result = MM_BASE_BEARER_GET_CLASS (self)->connect_finish (self, res, &error); if (!result) { - mm_obj_dbg (self, "couldn't connect: '%s'", error->message); + mm_obj_dbg (self, "couldn't connect: %s", error->message); + + /* Update failed attempts */ + mm_bearer_stats_set_failed_attempts (self->priv->stats, + mm_bearer_stats_get_failed_attempts (self->priv->stats) + 1); + bearer_update_interface_stats (self); + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { /* Will launch disconnection */ launch_disconnect = TRUE; @@ -862,11 +864,15 @@ mm_base_bearer_connect (MMBaseBearer *self, return; } + /* Update total attempts */ + mm_bearer_stats_set_attempts (self->priv->stats, + mm_bearer_stats_get_attempts (self->priv->stats) + 1); + bearer_reset_ongoing_interface_stats (self); + /* Connecting! */ mm_obj_dbg (self, "connecting..."); self->priv->connect_cancellable = g_cancellable_new (); bearer_update_status (self, MM_BEARER_STATUS_CONNECTING); - bearer_reset_interface_stats (self); MM_BASE_BEARER_GET_CLASS (self)->connect ( self, self->priv->connect_cancellable, @@ -1450,6 +1456,7 @@ mm_base_bearer_init (MMBaseBearer *self) self->priv->reason_3gpp = CONNECTION_FORBIDDEN_REASON_NONE; self->priv->reason_cdma = CONNECTION_FORBIDDEN_REASON_NONE; self->priv->default_ip_family = MM_BEARER_IP_FAMILY_IPV4; + self->priv->stats = mm_bearer_stats_new (); /* Set defaults */ mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL); @@ -1462,6 +1469,7 @@ mm_base_bearer_init (MMBaseBearer *self) mm_bearer_ip_config_get_dictionary (NULL)); mm_gdbus_bearer_set_ip6_config (MM_GDBUS_BEARER (self), mm_bearer_ip_config_get_dictionary (NULL)); + bearer_update_interface_stats (self); } static void |