Fix: Fetching granularized data usage issue. 00/140600/1
authorNishant Chaprana <n.chaprana@samsung.com>
Tue, 25 Jul 2017 13:31:31 +0000 (19:01 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Tue, 25 Jul 2017 13:31:31 +0000 (19:01 +0530)
Description: This patch fixes the scenario where multiple entries
are sent to upper layer because of granularity, also this patch fixes
faulty fill operation when data is fetched from database.

Change-Id: Ifbd7fcd646f461277bdd8bc90379f452032b05fe
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
interfaces/stcmanager-iface-statistics.xml
packaging/stc-manager.spec
src/database/tables/table-statistics.c
src/stc-statistics.c

index 42b5c80..825da54 100644 (file)
@@ -12,7 +12,7 @@
                        <arg type='s' name='app_id' direction='in'/>
                        <arg type='a{sv}' name='select_rule' direction='in'/>
                        <arg type='i' name='error_code' direction='out'/>
-                       <arg type='a{sv}' name='statistics' direction='out'/>
+                       <arg type='aa{sv}' name='statistics' direction='out'/>
                </method>
 
                <method name='Reset'>
index 4668ee5..fafa1dd 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.26
+Version:    0.0.27
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index 0f5db95..9564d8e 100755 (executable)
 #define SELECT_CHUNKS "select binpath, hw_net_protocol_type, " \
        "is_roaming, sum(received) as received, " \
        "sum(sent) as sent, imsi, ground, iftype, ifname, " \
-       "time_stamp - time_stamp % ? as time_stamp " \
+       "time_stamp - time_stamp % ? as timestamp " \
        "from statistics where time_stamp between ? and ? " \
-       "group by binpath, time_stamp, imsi order by time_stamp"
+       "group by binpath, timestamp, imsi order by timestamp"
 
 #define SELECT_CHUNKS_IFACE "select binpath, hw_net_protocol_type, " \
        "is_roaming, sum(received) as received, " \
        "sum(sent) as sent, imsi, ground, iftype, ifname, " \
-       "time_stamp - time_stamp % ? as time_stamp " \
+       "time_stamp - time_stamp % ? as timestamp " \
        "from statistics where time_stamp between ? and ? and iftype=?" \
-       "group by binpath, time_stamp, imsi order by time_stamp"
+       "group by binpath, timestamp, imsi order by timestamp"
 
 #define SELECT_APP_DETAILS "select iftype, hw_net_protocol_type, " \
        "is_roaming, sum(received) as received, sum(sent) as sent, " \
@@ -557,9 +557,10 @@ stc_error_e table_statistics_per_app(const char *app_id,
                        data.cnt.out_bytes = sqlite3_column_int64(stmt, 4);
                        data.ifname = (char *)sqlite3_column_text(stmt, 5);
                        data.imsi = (char *)sqlite3_column_text(stmt, 6);
+                       data.ground = sqlite3_column_int(stmt, 7);
 
                        if (rule->granularity) {
-                               interval.from = sqlite3_column_int64(stmt, 7);
+                               interval.from = sqlite3_column_int64(stmt, 8);
                                interval.to = interval.from + rule->granularity;
                        }
 
index ec52aeb..b20e3bb 100755 (executable)
@@ -167,11 +167,13 @@ void __stc_statistics_app_info_builder_add(GVariantBuilder *builder,
                return;
        }
 
-       g_variant_builder_add(builder, "{sv}", "app_id",
-                             g_variant_new_string(info->app_id));
+       if (info->app_id)
+               g_variant_builder_add(builder, "{sv}", "app_id",
+                                     g_variant_new_string(info->app_id));
 
-       g_variant_builder_add(builder, "{sv}", "ifname",
-                             g_variant_new_string(info->ifname));
+       if (info->ifname)
+               g_variant_builder_add(builder, "{sv}", "ifname",
+                                     g_variant_new_string(info->ifname));
 
        g_variant_builder_add(builder, "{sv}", "imsi",
                              g_variant_new_string(info->imsi));
@@ -232,14 +234,18 @@ stc_cb_ret_e __table_statistics_per_app_cb(const table_statistics_info *info,
 {
        __STC_LOG_FUNC_ENTER__;
        GVariantBuilder *builder = (GVariantBuilder *)user_data;
+       GVariantBuilder sub_builder;
 
        if (!info || !builder) {
                __STC_LOG_FUNC_EXIT__;
                return STC_CANCEL;
        }
 
-       __stc_statistics_app_info_builder_add(builder, info);
+       g_variant_builder_init(&sub_builder, G_VARIANT_TYPE("a{sv}"));
+       __stc_statistics_app_info_builder_add(&sub_builder, info);
        __stc_statistics_print_app_info(info);
+       g_variant_builder_add_value(builder,
+                                   g_variant_builder_end(&sub_builder));
 
        __STC_LOG_FUNC_EXIT__;
        return STC_CONTINUE;
@@ -346,7 +352,7 @@ gboolean handle_statistics_get(StcStatistics *object,
                STC_LOGD("No selection rule, using default selection rule.");
        }
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
 
        ret = table_statistics_per_app(app_id, &rule,
                                       __table_statistics_per_app_cb,
@@ -358,7 +364,7 @@ gboolean handle_statistics_get(StcStatistics *object,
                return TRUE;
        }
 
-       return_parameters = g_variant_new("(ia{sv})", STC_ERROR_NONE, builder);
+       return_parameters = g_variant_new("(iaa{sv})", STC_ERROR_NONE, builder);
        g_variant_builder_unref(builder);
 
        DEBUG_GDBUS_VARIANT("Return parameters: ", return_parameters);