Measure datausage more accurately 38/227438/2 accepted/tizen/unified/20200315.214827 submit/tizen/20200313.000056
authorhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 12 Mar 2020 03:40:24 +0000 (12:40 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 12 Mar 2020 06:13:00 +0000 (15:13 +0900)
Add some signal for app status (launch and terminate)
Change in datausage measurement when interface

Change-Id: I76656633a357d7feb3361f9eb67aff1655caf6c5
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
data/exceptions
packaging/stc-manager.spec
plugin/appstatus/stc-plugin-appstatus.c
plugin/monitor/stc-plugin-monitor-app.c
plugin/monitor/stc-plugin-monitor-proc.c
plugin/procfs/stc-plugin-procfs.c
src/helper/helper-net-cls.c

index c3d4cbe..6438de0 100644 (file)
@@ -53,3 +53,4 @@ dbus-daemon:sys
 dlogsend:sys
 sync:sys
 reboot:sys
+dlog-log-critical:sys
index 69cbe48..bc30e18 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.96
+Version:    0.0.97
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index ced6be6..7036271 100755 (executable)
 #define AUL_APP_STATUS_DBUS_SIGNAL_INTERFACE       "org.tizen.aul.AppStatus"
 #define AUL_APP_STATUS_BUS_NAME                    AUL_APP_STATUS_DBUS_SIGNAL_INTERFACE
 
+#define AUL_APP_STATUS_DBUS_LAUNCH_REQUEST         "AppLaunch"
+#define AUL_APP_STATUS_DBUS_LAUNCH_REQUEST_TYPE    "(isss)"
+#define AUL_APP_STATUS_DBUS_TERMINATE_REQUEST      "AppTerminate"
+#define AUL_APP_STATUS_DBUS_TERMINATE_REQUEST_TYPE "(isss)"
 #define AUL_APP_STATUS_DBUS_STATUS_CHANGE          "AppStatusChange"
 #define AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE     "(issss)"
 
@@ -59,43 +63,106 @@ static void __stc_gdbus_handle_aul_changestate(GDBusConnection *connection,
        pid_t pid;
        stc_cmd_type_e status;
        stc_app_type_e apptype;
-       gchar *appid, *pkgid, *statstr, *pkgtype;
-
-       if (g_strcmp0(g_variant_get_type_string(parameters),
-                     AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE)) {
-               STC_LOGE("Dbus type not matching, do not process");
-               return;
-       }
-
-       g_variant_get(parameters, AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE,
+       gchar *appid = NULL;
+       gchar *pkgid = NULL;
+       gchar *statstr = NULL;
+       gchar *pkgtype = NULL;
+
+       if (g_strcmp0(signal_name, AUL_APP_STATUS_DBUS_LAUNCH_REQUEST) == 0) {
+               if (g_strcmp0(g_variant_get_type_string(parameters),
+                             AUL_APP_STATUS_DBUS_LAUNCH_REQUEST_TYPE)) {
+                       STC_LOGE("Dbus type not matching, do not process");
+                       return;
+               }
+
+               g_variant_get(parameters, AUL_APP_STATUS_DBUS_LAUNCH_REQUEST_TYPE,
+                       &pid, &appid, &pkgid, &pkgtype);
+
+               status = STC_CMD_SET_APP_LAUNCHED;
+
+               if (!strncmp(pkgtype, "svc", 3))
+                       apptype = STC_APP_TYPE_SERVICE;
+               else if (!strncmp(pkgtype, "widget", 6))
+                       apptype = STC_APP_TYPE_WIDGET;
+               else if (!strncmp(pkgtype, "watch", 5))
+                       apptype = STC_APP_TYPE_WATCH;
+               else
+                       apptype = STC_APP_TYPE_GUI;
+
+               if (STC_STAT_LOG) {
+                       STC_LOGD("APP STATUS[\033[1;34mlaunch\033[0;m] PkgID[\033[0;34m%s\033[0;m] "
+                               "AppID[\033[0;32m%s\033[0;m] PID[\033[1;33m%d\033[0;m] Type[%s]",
+                               pkgid, appid, pid, pkgtype);
+               }
+
+               if (state_changed_cb)
+                       state_changed_cb(status, pid, appid, pkgid, apptype);
+       } else if (g_strcmp0(signal_name, AUL_APP_STATUS_DBUS_TERMINATE_REQUEST) == 0) {
+               if (g_strcmp0(g_variant_get_type_string(parameters),
+                             AUL_APP_STATUS_DBUS_TERMINATE_REQUEST_TYPE)) {
+                       STC_LOGE("Dbus type not matching, do not process");
+                       return;
+               }
+
+               g_variant_get(parameters, AUL_APP_STATUS_DBUS_TERMINATE_REQUEST_TYPE,
+                       &pid, &appid, &pkgid, &pkgtype);
+
+               status = STC_CMD_SET_TERMINATED;
+
+               if (!strncmp(pkgtype, "svc", 3))
+                       apptype = STC_APP_TYPE_SERVICE;
+               else if (!strncmp(pkgtype, "widget", 6))
+                       apptype = STC_APP_TYPE_WIDGET;
+               else if (!strncmp(pkgtype, "watch", 5))
+                       apptype = STC_APP_TYPE_WATCH;
+               else
+                       apptype = STC_APP_TYPE_GUI;
+
+               if (STC_STAT_LOG) {
+                       STC_LOGD("APP STATUS[\033[1;34mterminate\033[0;m] PkgID[\033[0;34m%s\033[0;m] "
+                               "AppID[\033[0;32m%s\033[0;m] PID[\033[1;33m%d\033[0;m] Type[%s]",
+                               pkgid, appid, pid, pkgtype);
+               }
+
+               if (state_changed_cb)
+                       state_changed_cb(status, pid, appid, pkgid, apptype);
+       } else if (g_strcmp0(signal_name, AUL_APP_STATUS_DBUS_STATUS_CHANGE) == 0) {
+               if (g_strcmp0(g_variant_get_type_string(parameters),
+                             AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE)) {
+                       STC_LOGE("Dbus type not matching, do not process");
+                       return;
+               }
+
+               g_variant_get(parameters, AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE,
                      &pid, &appid, &pkgid, &statstr, &pkgtype);
 
-       if (!strncmp(statstr, "fg", 2)) {
-               status = STC_CMD_SET_FOREGRD;
-       } else if (!strncmp(statstr, "bg", 2)) {
-               status = STC_CMD_SET_BACKGRD;
-       } else {
-               goto out;
-       }
-
-       if (!strncmp(pkgtype, "svc", 3))
-               apptype = STC_APP_TYPE_SERVICE;
-       else if (!strncmp(pkgtype, "widget", 6))
-               apptype = STC_APP_TYPE_WIDGET;
-       else if (!strncmp(pkgtype, "watch", 5))
-               apptype = STC_APP_TYPE_WATCH;
-       else
-               apptype = STC_APP_TYPE_GUI;
-
-       if (STC_STAT_LOG) {
-               STC_LOGD("\033[1;34mAPP STATUS\033[0;m: PkgID[\033[0;34m%s\033[0;m] "
-                       "AppID[\033[0;32m%s\033[0;m] PID[\033[1;33m%d\033[0;m] Status[%s] Type[%s]",
-                       pkgid, appid, pid, statstr, pkgtype);
+               if (!strncmp(statstr, "fg", 2)) {
+                       status = STC_CMD_SET_FOREGRD;
+               } else if (!strncmp(statstr, "bg", 2)) {
+                       status = STC_CMD_SET_BACKGRD;
+               } else {
+                       goto out;
+               }
+
+               if (!strncmp(pkgtype, "svc", 3))
+                       apptype = STC_APP_TYPE_SERVICE;
+               else if (!strncmp(pkgtype, "widget", 6))
+                       apptype = STC_APP_TYPE_WIDGET;
+               else if (!strncmp(pkgtype, "watch", 5))
+                       apptype = STC_APP_TYPE_WATCH;
+               else
+                       apptype = STC_APP_TYPE_GUI;
+
+               if (STC_STAT_LOG) {
+                       STC_LOGD("APP STATUS[\033[1;34m%s\033[0;m] PkgID[\033[0;34m%s\033[0;m] "
+                               "AppID[\033[0;32m%s\033[0;m] PID[\033[1;33m%d\033[0;m] Type[%s]",
+                               (status == STC_CMD_SET_FOREGRD) ? "Foregrd" : "Backgrd", pkgid, appid, pid, pkgtype);
+               }
+
+               if (state_changed_cb)
+                       state_changed_cb(status, pid, appid, pkgid, apptype);
        }
 
-       if (state_changed_cb)
-               state_changed_cb(status, pid, appid, pkgid, apptype);
-
 out:
        FREE(appid);
        FREE(pkgid);
@@ -110,6 +177,24 @@ signal_map_s signal_map[] = {
                0,
                AUL_APP_STATUS_DBUS_PATH,
                AUL_APP_STATUS_DBUS_SIGNAL_INTERFACE,
+               AUL_APP_STATUS_DBUS_LAUNCH_REQUEST,
+               AUL_APP_STATUS_DBUS_LAUNCH_REQUEST_TYPE,
+               __stc_gdbus_handle_aul_changestate,
+               NULL
+       },
+       {
+               0,
+               AUL_APP_STATUS_DBUS_PATH,
+               AUL_APP_STATUS_DBUS_SIGNAL_INTERFACE,
+               AUL_APP_STATUS_DBUS_TERMINATE_REQUEST,
+               AUL_APP_STATUS_DBUS_TERMINATE_REQUEST_TYPE,
+               __stc_gdbus_handle_aul_changestate,
+               NULL
+       },
+       {
+               0,
+               AUL_APP_STATUS_DBUS_PATH,
+               AUL_APP_STATUS_DBUS_SIGNAL_INTERFACE,
                AUL_APP_STATUS_DBUS_STATUS_CHANGE,
                AUL_APP_STATUS_DBUS_STATUS_CHANGE_TYPE,
                __stc_gdbus_handle_aul_changestate,
index ca4a88f..a5804da 100755 (executable)
@@ -31,7 +31,7 @@ static void __print_app(gpointer key, gpointer value,
 {
        stc_app_value_s *app_value = (stc_app_value_s *)value;
 
-       STC_LOGD("PkgID[%s] AppID[\033[0;32m%s\033[0;m] "
+       STC_LOGD("PkgID[\033[0;34m%s\033[0;m] AppID[\033[0;32m%s\033[0;m] "
                "type[%d] state[%d] classid[\033[1;36m%d\033[0;m] "
                "counter[in(%lld) out(%lld)]",
                 app_value->pkg_id, app_value->app_id,
@@ -417,15 +417,13 @@ void stc_monitor_app_update_counter(stc_app_value_s *value,
        switch (context->counter->iotype) {
        case NFACCT_COUNTER_IN:
                value->data_usage.in_bytes += context->bytes;
-               value->counter.in_bytes = context->bytes;
+               value->counter.in_bytes += context->bytes;
                stc_monitor_set_apps_updated(TRUE);
-
                break;
        case NFACCT_COUNTER_OUT:
                value->data_usage.out_bytes += context->bytes;
-               value->counter.out_bytes = context->bytes;
+               value->counter.out_bytes += context->bytes;
                stc_monitor_set_apps_updated(TRUE);
-
                break;
        default:
                STC_LOGE("Unknown iotype");
@@ -434,6 +432,10 @@ void stc_monitor_app_update_counter(stc_app_value_s *value,
 
 void stc_monitor_app_update_iface_counter(classid_bytes_context_s *context)
 {
+       if (context->counter->classid != STC_TOTAL_IPV4_CLASSID &&
+               context->counter->classid != STC_TOTAL_IPV6_CLASSID)
+               return;
+
        switch (context->counter->iftype) {
        case STC_IFACE_DATACALL:
                __app_update_counter(context, STC_TOTAL_DATACALL_CLASSID);
index 12cfe65..b4564c0 100755 (executable)
@@ -217,6 +217,8 @@ API stc_error_e stc_plugin_monitor_proc_remove(uint32_t classid, pid_t pid)
        }
 
        pid_count = g_hash_table_size(app_lookup->processes);
+       if (classid == STC_UNKNOWN_CLASSID)
+               classid = app_lookup->classid;
 
        if (!pid_count) {
                for (; conn_list != NULL; conn_list = conn_list->next) {
index 9538a61..f54794a 100755 (executable)
@@ -321,7 +321,7 @@ static void __process_event_fork(int tgid, int pid)
 
                if (STC_STAT_LOG)
                        STC_LOGD("\033[1;32mFORK\033[0;m: tgid[\033[1;33m%d\033[0;m] "
-                       "ppid=[%s] cmdline[\033[0;34m%s\033[0;m] pid[%d]",
+                       "ppid[%s] cmdline[\033[0;34m%s\033[0;m] pid[%d]",
                        tgid, status[PROC_STATUS_PPID], cmdline, pid);
 
                __proc_tree_add(&key, &value);
@@ -602,9 +602,9 @@ stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd,
        switch (cmd) {
        case STC_CMD_SET_FOREGRD:
        {
-               uint32_t fg_classid;
-               uint32_t bg_classid;
-               char *bg_app_id;
+               uint32_t fg_classid = STC_UNKNOWN_CLASSID;
+               uint32_t bg_classid = STC_UNKNOWN_CLASSID;
+               char *bg_app_id = NULL;
                stc_app_value_s app_value;
                stc_proc_value_s proc_value;
 
@@ -635,9 +635,9 @@ stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd,
        }
        case STC_CMD_SET_BACKGRD:
        {
-               uint32_t bg_classid;
-               uint32_t fg_classid;
-               char *bg_app_id;
+               uint32_t bg_classid = STC_UNKNOWN_CLASSID;
+               uint32_t fg_classid = STC_UNKNOWN_CLASSID;
+               char *bg_app_id = NULL;
                stc_app_value_s app_value;
                stc_proc_value_s proc_value;
 
@@ -666,10 +666,33 @@ stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd,
                FREE(bg_app_id);
                break;
        }
+       case STC_CMD_SET_APP_LAUNCHED:
+       {
+               uint32_t classid = STC_UNKNOWN_CLASSID;
+               stc_app_value_s app_value;
+               stc_proc_value_s proc_value;
+
+               memset(&app_value, 0, sizeof(stc_app_value_s));
+               memset(&proc_value, 0, sizeof(stc_proc_value_s));
+
+               classid = get_classid_by_app_id(app_id, FALSE);
+
+               app_value.type = app_type;
+               app_value.state = STC_APP_STATE_FOREGROUND;
+               app_value.processes = NULL;
+
+               proc_value.pid = pid;
+               proc_value.ground = STC_APP_STATE_FOREGROUND;
+
+               stc_plugin_monitor_add_app(classid, app_id, pkg_id, app_value);
+               stc_plugin_monitor_add_proc(classid, app_id, proc_value);
+
+               break;
+       }
        case STC_CMD_SET_SERVICE_LAUNCHED:
        {
-               uint32_t classid;
-               char *bg_app_id;
+               uint32_t classid = STC_UNKNOWN_CLASSID;
+               char *bg_app_id = NULL;
                stc_app_value_s app_value;
                stc_proc_value_s proc_value;
                gboolean is_exist;
@@ -709,14 +732,16 @@ stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd,
        }
        case STC_CMD_SET_TERMINATED:
        {
-               uint32_t classid;
-               char *bg_app_id;
+               uint32_t classid = STC_UNKNOWN_CLASSID;
+               char *bg_app_id = NULL;
 
-               bg_app_id = g_strconcat(app_id, STC_BACKGROUND_APP_SUFFIX, NULL);
-               classid = get_classid_by_app_id(bg_app_id, FALSE);
+               if (app_type == STC_APP_TYPE_NONE) {
+                       bg_app_id = g_strconcat(app_id, STC_BACKGROUND_APP_SUFFIX, NULL);
+                       classid = get_classid_by_app_id(bg_app_id, FALSE);
+               }
 
                if (classid == STC_UNKNOWN_CLASSID)
-                       classid = get_classid_by_app_id(app_id, FALSE);
+                       classid = get_classid_by_app_id(bg_app_id, FALSE);
 
                stc_plugin_monitor_remove_proc(classid, pid);
 
index 350dfb6..88041cc 100755 (executable)
@@ -111,10 +111,8 @@ API uint32_t get_classid_by_app_id(const char *app_id, int create)
        uint32_t classid = STC_UNKNOWN_CLASSID;
        const char *path_to_net_cgroup_dir = NULL;
 
-       if (app_id == NULL) {
-               STC_LOGE("app_id must be not empty"); //LCOV_EXCL_LINE
-               return STC_UNKNOWN_CLASSID; //LCOV_EXCL_LINE
-       }
+       if (app_id == NULL)
+               return STC_UNKNOWN_CLASSID;
 
        if (!strcmp(app_id, STC_TOTAL_BACKGROUND))
                return STC_BACKGROUND_APP_CLASSID;