summaryrefslogtreecommitdiff
path: root/libmm-glib
diff options
context:
space:
mode:
authorFrederic Martinsons <frederic.martinsons@sigfox.com>2021-10-15 08:38:50 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-10-22 13:48:13 +0200
commit0510e9aef8818eeaa445aea246b670871c671ddb (patch)
tree131380f2a6d70eeb880cbe9b216ef006b4eb1604 /libmm-glib
parent53bcdaa8c3962abbf2a2f638c64173a7657ab560 (diff)
api,bearer: new 'start-date' field in bearer statistics
It stores the epoch timestamp of the current bearer session start. If there is no connected bearer, it is set to 0 and not displayed in mmcli output. Signed-off-by: Frederic Martinsons <frederic.martinsons@sigfox.com> Includes updates by Aleksander Morgado to fix coding style issues.
Diffstat (limited to 'libmm-glib')
-rw-r--r--libmm-glib/mm-bearer-stats.c43
-rw-r--r--libmm-glib/mm-bearer-stats.h2
-rw-r--r--libmm-glib/mm-common-helpers.c41
-rw-r--r--libmm-glib/mm-common-helpers.h1
4 files changed, 87 insertions, 0 deletions
diff --git a/libmm-glib/mm-bearer-stats.c b/libmm-glib/mm-bearer-stats.c
index 49bebc0b..f7e339c6 100644
--- a/libmm-glib/mm-bearer-stats.c
+++ b/libmm-glib/mm-bearer-stats.c
@@ -36,6 +36,7 @@ G_DEFINE_TYPE (MMBearerStats, mm_bearer_stats, G_TYPE_OBJECT)
#define PROPERTY_DURATION "duration"
#define PROPERTY_RX_BYTES "rx-bytes"
#define PROPERTY_TX_BYTES "tx-bytes"
+#define PROPERTY_START_DATE "start-date"
#define PROPERTY_ATTEMPTS "attempts"
#define PROPERTY_FAILED_ATTEMPTS "failed-attempts"
#define PROPERTY_TOTAL_DURATION "total-duration"
@@ -46,6 +47,7 @@ struct _MMBearerStatsPrivate {
guint duration;
guint64 rx_bytes;
guint64 tx_bytes;
+ guint64 start_date;
guint attempts;
guint failed_attempts;
guint total_duration;
@@ -152,6 +154,39 @@ mm_bearer_stats_set_tx_bytes (MMBearerStats *self,
/*****************************************************************************/
/**
+ * mm_bearer_stats_get_start_date:
+ * @self: a #MMBearerStats.
+ *
+ * Gets the start date of the current connection as a timestamp in seconds
+ * since the epoch.
+ *
+ * Returns: a #guint64.
+ *
+ * Since: 1.20
+ */
+guint64
+mm_bearer_stats_get_start_date (MMBearerStats *self)
+{
+ g_return_val_if_fail (MM_IS_BEARER_STATS (self), 0);
+
+ return self->priv->start_date;
+}
+
+/**
+ * mm_bearer_stats_set_start_date: (skip)
+ */
+void
+mm_bearer_stats_set_start_date (MMBearerStats *self,
+ guint64 start_date)
+{
+ g_return_if_fail (MM_IS_BEARER_STATS (self));
+
+ self->priv->start_date = start_date;
+}
+
+/*****************************************************************************/
+
+/**
* mm_bearer_stats_get_attempts:
* @self: a #MMBearerStats.
*
@@ -340,6 +375,10 @@ mm_bearer_stats_get_dictionary (MMBearerStats *self)
g_variant_new_uint64 (self->priv->tx_bytes));
g_variant_builder_add (&builder,
"{sv}",
+ PROPERTY_START_DATE,
+ g_variant_new_uint64 (self->priv->start_date));
+ g_variant_builder_add (&builder,
+ "{sv}",
PROPERTY_ATTEMPTS,
g_variant_new_uint32 (self->priv->attempts));
g_variant_builder_add (&builder,
@@ -403,6 +442,10 @@ mm_bearer_stats_new_from_dictionary (GVariant *dictionary,
mm_bearer_stats_set_tx_bytes (
self,
g_variant_get_uint64 (value));
+ } else if (g_str_equal (key, PROPERTY_START_DATE)) {
+ mm_bearer_stats_set_start_date (
+ self,
+ g_variant_get_uint64 (value));
} else if (g_str_equal (key, PROPERTY_ATTEMPTS)) {
mm_bearer_stats_set_attempts (
self,
diff --git a/libmm-glib/mm-bearer-stats.h b/libmm-glib/mm-bearer-stats.h
index bfaba1dd..b993945c 100644
--- a/libmm-glib/mm-bearer-stats.h
+++ b/libmm-glib/mm-bearer-stats.h
@@ -61,6 +61,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBearerStats, g_object_unref)
guint mm_bearer_stats_get_duration (MMBearerStats *self);
guint64 mm_bearer_stats_get_rx_bytes (MMBearerStats *self);
guint64 mm_bearer_stats_get_tx_bytes (MMBearerStats *self);
+guint64 mm_bearer_stats_get_start_date (MMBearerStats *self);
guint mm_bearer_stats_get_attempts (MMBearerStats *self);
guint mm_bearer_stats_get_failed_attempts (MMBearerStats *self);
guint mm_bearer_stats_get_total_duration (MMBearerStats *self);
@@ -81,6 +82,7 @@ MMBearerStats *mm_bearer_stats_new_from_dictionary (GVariant *dictionary,
void mm_bearer_stats_set_duration (MMBearerStats *self, guint duration);
void mm_bearer_stats_set_rx_bytes (MMBearerStats *self, guint64 rx_bytes);
void mm_bearer_stats_set_tx_bytes (MMBearerStats *self, guint64 tx_bytes);
+void mm_bearer_stats_set_start_date (MMBearerStats *self, guint64 stats);
void mm_bearer_stats_set_attempts (MMBearerStats *self, guint attempts);
void mm_bearer_stats_set_failed_attempts (MMBearerStats *self, guint failed_attempts);
void mm_bearer_stats_set_total_duration (MMBearerStats *self, guint duration);
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c
index 1f146f6f..6f0a4929 100644
--- a/libmm-glib/mm-common-helpers.c
+++ b/libmm-glib/mm-common-helpers.c
@@ -1661,6 +1661,47 @@ mm_get_string_unquoted_from_match_info (GMatchInfo *match_info,
return str;
}
+gchar *
+mm_format_iso8601 (guint64 timestamp)
+{
+ gchar *format_date = NULL;
+ GDateTime *datetime = NULL;
+
+ datetime = g_date_time_new_from_unix_utc ((gint64)timestamp);
+
+#if GLIB_CHECK_VERSION (2, 62, 0)
+ format_date = g_date_time_format_iso8601 (datetime);
+#else
+ {
+ GString *outstr = NULL;
+ gchar *main_date = NULL;
+ gint64 offset = 0;
+
+ main_date = g_date_time_format (datetime, "%Y-%m-%dT%H:%M:%S");
+ outstr = g_string_new (main_date);
+ g_free (main_date);
+
+ /* Timezone. Format it as `%:::z` unless the offset is zero, in which case
+ * we can simply use `Z`. */
+ offset = g_date_time_get_utc_offset (datetime);
+
+ if (offset == 0) {
+ g_string_append_c (outstr, 'Z');
+ } else {
+ gchar *time_zone;
+
+ time_zone = g_date_time_format (datetime, "%:::z");
+ g_string_append (outstr, time_zone);
+ g_free (time_zone);
+ }
+
+ format_date = g_string_free (outstr, FALSE);
+ }
+#endif
+ g_date_time_unref (datetime);
+ return format_date;
+}
+
/*****************************************************************************/
/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
diff --git a/libmm-glib/mm-common-helpers.h b/libmm-glib/mm-common-helpers.h
index 719ab2c1..c4720e58 100644
--- a/libmm-glib/mm-common-helpers.h
+++ b/libmm-glib/mm-common-helpers.h
@@ -190,6 +190,7 @@ gboolean mm_get_double_from_match_info (GMatchInfo *match_info,
gdouble *out);
gchar *mm_get_string_unquoted_from_match_info (GMatchInfo *match_info,
guint32 match_index);
+gchar *mm_format_iso8601 (guint64 timestamp);
/******************************************************************************/
/* Type checkers and conversion utilities */