X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Frua_stat.c;h=e47db46abd74da88ae7ea429b1f2b77193863ed6;hb=7d58423e56cb278e782e4c89623594b4e381250e;hp=094e39ce6ba7a1146cb6eefb2bfe229d813001c8;hpb=2bc145e7a5ec58f1ecb6c738625bca5e99057621;p=platform%2Fcore%2Fappfw%2Flibrua.git diff --git a/src/rua_stat.c b/src/rua_stat.c old mode 100755 new mode 100644 index 094e39c..e47db46 --- a/src/rua_stat.c +++ b/src/rua_stat.c @@ -1,7 +1,5 @@ /* - * RUA - * - * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +12,6 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ /* @@ -26,354 +23,104 @@ #include #include #include +#include +#include -#include - -/* For multi-user support */ -#include - -#include "rua_stat.h" -#include "db-schema.h" -#include "perf-measure.h" - +#include +#include #include -#ifdef LOG_TAG -#undef LOG_TAG -#endif - -#define LOG_TAG "RUA" - -#define RUA_STAT_DB_NAME ".rua_stat.db" -#define QUERY_MAXLEN 4096 -#define WIN_SCORE 100 -#define LOSE_SCORE_RATE 0.7f - -static sqlite3 *_db = NULL; -static int __exec(sqlite3 *db, char *query); -static sqlite3 *__db_init(char *root, int flags); - - -int __rua_stat_insert(char *caller, char *rua_stat_tag) { - - int r; - char query[QUERY_MAXLEN]; - sqlite3_stmt *stmt = NULL; - sqlite3_snprintf(QUERY_MAXLEN, query, - "INSERT INTO rua_panel_stat (caller_panel, rua_stat_tag, score) VALUES (?,?,?)"); - - r = sqlite3_prepare(_db, query, sizeof(query), &stmt, NULL); - if (r != SQLITE_OK) { - LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(_db), sqlite3_errmsg(_db)); - goto out; - } - - r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("caller bind error(%d) \n", r); - goto out; - } - - r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("rua_stat_tag bind error(%d) \n", r); - goto out; - } - - r = sqlite3_bind_int(stmt, 3, WIN_SCORE); - if(r != SQLITE_OK) { - LOGE("arg bind error(%d) \n", r); - goto out; - } - - r = sqlite3_step(stmt); - if (r != SQLITE_DONE) { - LOGE("step error(%d) \n", r); - goto out; - } - - -out : - if(stmt) - sqlite3_finalize(stmt); - - return r; -} - -int __rua_stat_lose_score_update(char *caller, char *rua_stat_tag) { - - int r; - char query[QUERY_MAXLEN]; - sqlite3_stmt *stmt = NULL; - sqlite3_snprintf(QUERY_MAXLEN, query, - "UPDATE rua_panel_stat SET score = score * %f WHERE caller_panel = ? AND rua_stat_tag != ?", - LOSE_SCORE_RATE); - - LOGD("lose score update sql : %s", query); - - r = sqlite3_prepare(_db, query, sizeof(query), &stmt, NULL); - if (r != SQLITE_OK) { - LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(_db), sqlite3_errmsg(_db)); - goto out; - } - - r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("caller bind error(%d) \n", r); - goto out; - } - - r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("rua_stat_tag bind error(%d) \n", r); - goto out; - } - - r = sqlite3_step(stmt); - if (r != SQLITE_DONE) { - LOGE("step error(%d) \n", r); - goto out; - } - - -out : - if(stmt) - sqlite3_finalize(stmt); - - return r; - -} - -int __rua_stat_win_score_update(char *caller, char *rua_stat_tag) { - - int r; - char query[QUERY_MAXLEN]; - sqlite3_stmt *stmt = NULL; - sqlite3_snprintf(QUERY_MAXLEN, query, - "UPDATE rua_panel_stat SET score = score + %d WHERE caller_panel = ? AND rua_stat_tag = ?", - WIN_SCORE); - - LOGD("win score update sql : %s", query); - - r = sqlite3_prepare(_db, query, sizeof(query), &stmt, NULL); - if (r != SQLITE_OK) { - LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(_db), sqlite3_errmsg(_db)); - goto out; - } - - r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("caller bind error(%d) \n", r); - goto out; - } - - r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC); - if(r != SQLITE_OK) { - LOGE("rua_stat_tag bind error(%d) \n", r); - goto out; - } - - r = sqlite3_step(stmt); - if (r != SQLITE_DONE) { - LOGE("step error(%d) \n", r); - goto out; - } - - -out : - if(stmt) - sqlite3_finalize(stmt); - - return r; - -} +#include "rua_util.h" +#include "rua_private.h" -int rua_stat_update(char *caller, char *rua_stat_tag) +API int rua_stat_update_for_uid(char *caller, char *tag, uid_t uid) { int r; - int affected_rows = 0; - sqlite3_stmt *stmt = NULL; + bundle *b = NULL; - LOGD("rua_stat_update start"); + r = _rua_util_check_uid(uid); + if (r == -1) + return r; - r = __rua_stat_init(SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE); - if (r == -1) { - LOGE("__rua_stat_init fail"); + if (caller == NULL || tag == NULL) { + LOGE("invalid param"); return -1; } - if (_db == NULL) { - LOGE("rua_stat is not initialized"); + b = bundle_create(); + if (b == NULL) { + LOGE("bundle_create fail out of memory."); return -1; } - - if (caller == NULL) { - LOGE("caller is null"); - return -1; - } - - if (rua_stat_tag == NULL) { - LOGE("rua_stat_tag is null"); - return -1; - } - - - r = __rua_stat_lose_score_update(caller, rua_stat_tag); - if (r != SQLITE_DONE) { - LOGE("__rua_stat_lose_score_insert fail."); - return -1; - } - - r = __rua_stat_win_score_update(caller, rua_stat_tag); - affected_rows = sqlite3_changes(_db); - if ((r != SQLITE_DONE) || (affected_rows == 0)) { - r = __rua_stat_insert(caller, rua_stat_tag); - - if (r != SQLITE_DONE) { - LOGE("__rua_stat_insert fail."); - return -1; - } - } - - __rua_stat_fini(); - LOGD("rua_stat_update done"); - + bundle_add_str(b, AUL_SVC_K_RUA_STAT_CALLER, caller); + bundle_add_str(b, AUL_SVC_K_RUA_STAT_TAG, tag); + r = aul_update_rua_stat_for_uid(b, uid); + LOGI("rua_add_history_for_uid result : %d ", r); + bundle_free(b); return r; - } - -int rua_stat_get_stat_tags(char *caller, int (*rua_stat_tag_iter_fn)(const char *rua_stat_tag, void *data), - void *data) { - +static int __get_stat_tags_for_uid(sqlite3 *db, const char *caller, + int (*rua_stat_tag_iter_fn)( + const char *rua_stat_tag, void *data), + void *data, uid_t uid) +{ + static const char query[] = + "SELECT rua_stat_tag FROM rua_panel_stat " + "WHERE caller_panel=? ORDER BY score DESC"; int r; sqlite3_stmt *stmt; - char query[QUERY_MAXLEN]; const unsigned char *ct; - r = __rua_stat_init(SQLITE_OPEN_READONLY); - if (r == -1) { - LOGE("__rua_stat_init fail"); - return -1; - } - - sqlite3_snprintf(QUERY_MAXLEN, query, - "SELECT rua_stat_tag FROM rua_panel_stat WHERE caller_panel = ? ORDER BY score DESC"); - - if (!_db) - return -1; - - r = sqlite3_prepare(_db, query, sizeof(query), &stmt, NULL); - if (r != SQLITE_OK) { - LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(_db), sqlite3_errmsg(_db)); - goto out; - } - - r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC); + r = sqlite3_prepare(db, query, strlen(query), &stmt, NULL); if (r != SQLITE_OK) { - LOGE("caller bind error(%d) \n", r); - goto out; + LOGE("prepare failed: %s", sqlite3_errmsg(db)); + return -1; } - while(sqlite3_step(stmt) == SQLITE_ROW) { + __BIND_TEXT(db, stmt, 1, caller); + while (sqlite3_step(stmt) == SQLITE_ROW) { ct = sqlite3_column_text(stmt, 0); - if (ct == NULL || ct[0] == '\0') { + if (ct == NULL || ct[0] == '\0') LOGW("sqlite3_column_text null"); - } - rua_stat_tag_iter_fn(ct, data); - } - -out: - if (stmt) - sqlite3_finalize(stmt); - __rua_stat_fini(); - - return r; -} - -int __rua_stat_init(int flags) -{ - - if (_db) { - return 0; + rua_stat_tag_iter_fn((const char *)ct, data); } - char defname[FILENAME_MAX]; - const char *rua_stat_db_path = tzplatform_getenv(TZ_USER_DB); - snprintf(defname, sizeof(defname), "%s/%s", rua_stat_db_path, RUA_STAT_DB_NAME); - _db = __db_init(defname, flags); - - if (_db == NULL) { - LOGW("__rua_stat_init error"); - return -1; - } + sqlite3_finalize(stmt); - return 0; -} - -int __rua_stat_fini(void) -{ - - if (_db) { - db_util_close(_db); - _db = NULL; - } - - return 0; + return r; } -static int __exec(sqlite3 *db, char *query) +API int rua_stat_get_stat_tags_for_uid(char *caller, + int (*rua_stat_tag_iter_fn)(const char *rua_stat_tag, void *data), + void *data, uid_t uid) { int r; - char *errmsg = NULL; + sqlite3 *db; - if (db == NULL) - return -1; + r = _rua_util_check_uid(uid); + if (r == -1) + return r; - r = sqlite3_exec(db, query, NULL, NULL, &errmsg); - if (r != SQLITE_OK) { - SECURE_LOGE("query(%s) exec error(%s)", query, errmsg); - sqlite3_free(errmsg); + r = _rua_util_open_db(&db, SQLITE_OPEN_READONLY, uid, RUA_STAT_DB_NAME); + if (r == -1) { + LOGE("open rua stat db failed"); return -1; } - return 0; -} - -static int __create_table(sqlite3 *db) -{ - int r; + r = __get_stat_tags_for_uid(db, caller, rua_stat_tag_iter_fn, data, + uid); - r = __exec(db, CREATE_RUA_STAT_TABLE); - if (r == -1) { - LOGE("create table error"); - return -1; - } + sqlite3_close_v2(db); - return 0; + return r; } -static sqlite3 *__db_init(char *root, int flags) +API int rua_stat_get_stat_tags(char *caller, + int (*rua_stat_tag_iter_fn)(const char *rua_stat_tag, void *data), + void *data) { - int r; - sqlite3 *db = NULL; - - r = db_util_open_with_options(root, &db, flags, NULL); - if (r) { - LOGE("db util open error(%d/%d/%d/%s)", r, - sqlite3_errcode(db), - sqlite3_extended_errcode(db), - sqlite3_errmsg(db)); - return NULL; - - } - r = __create_table(db); - if (r) { - db_util_close(db); - return NULL; - } - - return db; + return rua_stat_get_stat_tags_for_uid(caller, rua_stat_tag_iter_fn, data, getuid()); }