From: hyunuk.tak Date: Thu, 12 Mar 2020 03:40:24 +0000 (+0900) Subject: Measure datausage more accurately X-Git-Tag: accepted/tizen/unified/20200315.214827 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20200315.214827;p=platform%2Fcore%2Fconnectivity%2Fstc-manager.git Measure datausage more accurately Add some signal for app status (launch and terminate) Change in datausage measurement when interface Change-Id: I76656633a357d7feb3361f9eb67aff1655caf6c5 Signed-off-by: hyunuk.tak --- diff --git a/data/exceptions b/data/exceptions index c3d4cbe..6438de0 100644 --- a/data/exceptions +++ b/data/exceptions @@ -53,3 +53,4 @@ dbus-daemon:sys dlogsend:sys sync:sys reboot:sys +dlog-log-critical:sys diff --git a/packaging/stc-manager.spec b/packaging/stc-manager.spec index 69cbe48..bc30e18 100644 --- a/packaging/stc-manager.spec +++ b/packaging/stc-manager.spec @@ -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 diff --git a/plugin/appstatus/stc-plugin-appstatus.c b/plugin/appstatus/stc-plugin-appstatus.c index ced6be6..7036271 100755 --- a/plugin/appstatus/stc-plugin-appstatus.c +++ b/plugin/appstatus/stc-plugin-appstatus.c @@ -31,6 +31,10 @@ #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, diff --git a/plugin/monitor/stc-plugin-monitor-app.c b/plugin/monitor/stc-plugin-monitor-app.c index ca4a88f..a5804da 100755 --- a/plugin/monitor/stc-plugin-monitor-app.c +++ b/plugin/monitor/stc-plugin-monitor-app.c @@ -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); diff --git a/plugin/monitor/stc-plugin-monitor-proc.c b/plugin/monitor/stc-plugin-monitor-proc.c index 12cfe65..b4564c0 100755 --- a/plugin/monitor/stc-plugin-monitor-proc.c +++ b/plugin/monitor/stc-plugin-monitor-proc.c @@ -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) { diff --git a/plugin/procfs/stc-plugin-procfs.c b/plugin/procfs/stc-plugin-procfs.c index 9538a61..f54794a 100755 --- a/plugin/procfs/stc-plugin-procfs.c +++ b/plugin/procfs/stc-plugin-procfs.c @@ -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); diff --git a/src/helper/helper-net-cls.c b/src/helper/helper-net-cls.c index 350dfb6..88041cc 100755 --- a/src/helper/helper-net-cls.c +++ b/src/helper/helper-net-cls.c @@ -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;