• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "app_event_task_storage.h"
17 
18 #include "hiview_logger.h"
19 #include "sql_util.h"
20 
21 namespace OHOS::HiviewDFX {
22 DEFINE_LOG_TAG("AppEventTaskStorage");
23 namespace {
24 constexpr char TABLE_NAME_TASK[] = "unified_collection_task";
25 constexpr char COLUMN_ID[] = "id";
26 constexpr char COLUMN_TASK_DATE[] = "task_date";
27 constexpr char COLUMN_TASK_TYPE[] = "task_type";
28 constexpr char COLUMN_UID[] = "uid";
29 constexpr char COLUMN_PID[] = "pid";
30 constexpr char COLUMN_BUNDLE_NAME[] = "bundle_name";
31 constexpr char COLUMN_BUNDLE_VERSION[] = "bundle_version";
32 constexpr char COLUMN_START_TIME[] = "start_time";
33 constexpr char COLUMN_FINISH_TIME[] = "finish_time";
34 constexpr char COLUMN_RESOURCE_PATH[] = "resource_path";
35 constexpr char COLUMN_RESOURCE_SIZE[] = "resource_size";
36 constexpr char COLUMN_COST_CPU[] = "cost_cpu";
37 constexpr char COLUMN_STATE[] = "state";
38 
InnerGetAppTaskCondition(int32_t uid,int32_t eventDate,NativeRdb::AbsRdbPredicates & predicates)39 void InnerGetAppTaskCondition(int32_t uid, int32_t eventDate, NativeRdb::AbsRdbPredicates &predicates)
40 {
41     predicates.EqualTo(COLUMN_UID, uid);
42     predicates.EqualTo(COLUMN_TASK_DATE, eventDate);
43 }
44 
InnerGetAppTask(std::shared_ptr<NativeRdb::AbsSharedResultSet> resultSet,AppEventTask & appEventTask)45 bool InnerGetAppTask(std::shared_ptr<NativeRdb::AbsSharedResultSet> resultSet, AppEventTask &appEventTask)
46 {
47     while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
48         if (resultSet->GetLong(0, appEventTask.id_) != NativeRdb::E_OK) {
49             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_ID);
50         }
51         if (resultSet->GetLong(1, appEventTask.taskDate_) != NativeRdb::E_OK) { // 1: task date
52             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_TASK_DATE);
53         }
54         if (resultSet->GetInt(2, appEventTask.taskType_) != NativeRdb::E_OK) { // 2: task type
55             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_TASK_TYPE);
56         }
57         if (resultSet->GetInt(3, appEventTask.uid_) != NativeRdb::E_OK) { // 3: uid
58             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_UID);
59         }
60         if (resultSet->GetInt(4, appEventTask.pid_) != NativeRdb::E_OK) { // 4: pid
61             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_PID);
62         }
63         if (resultSet->GetString(5, appEventTask.bundleName_) != NativeRdb::E_OK) { // 5: bundle name
64             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_BUNDLE_NAME);
65         }
66         if (resultSet->GetString(6, appEventTask.bundleVersion_) != NativeRdb::E_OK) { // 6: bundle version
67             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_BUNDLE_VERSION);
68         }
69         if (resultSet->GetLong(7, appEventTask.startTime_) != NativeRdb::E_OK) { // 7: start time
70             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_START_TIME);
71         }
72         if (resultSet->GetLong(8, appEventTask.finishTime_) != NativeRdb::E_OK) { // 8: finish time
73             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_FINISH_TIME);
74         }
75         if (resultSet->GetString(9, appEventTask.resourePath_) != NativeRdb::E_OK) { // 9: resource path
76             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_RESOURCE_PATH);
77         }
78         if (resultSet->GetInt(10, appEventTask.resourceSize_) != NativeRdb::E_OK) { // 10: resource size
79             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_RESOURCE_SIZE);
80         }
81         if (resultSet->GetDouble(11, appEventTask.costCpu_) != NativeRdb::E_OK) { // 11: cost cpu
82             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_COST_CPU);
83         }
84         if (resultSet->GetInt(12, appEventTask.state_) != NativeRdb::E_OK) { // 12: state of cpature trace
85             HIVIEW_LOGI("failed to get %{public}s from resultSet", COLUMN_STATE);
86         }
87         break;
88     }
89     return true;
90 }
91 
InnerQueryAppTask(std::shared_ptr<NativeRdb::RdbStore> dbStore,NativeRdb::AbsRdbPredicates & predicates,AppEventTask & appEventTask)92 bool InnerQueryAppTask(std::shared_ptr<NativeRdb::RdbStore> dbStore, NativeRdb::AbsRdbPredicates &predicates,
93     AppEventTask &appEventTask)
94 {
95     appEventTask.id_ = 0;
96     std::shared_ptr<NativeRdb::AbsSharedResultSet> resultSet = dbStore->Query(predicates,
97         {
98             COLUMN_ID, COLUMN_TASK_DATE, COLUMN_TASK_TYPE, COLUMN_UID, COLUMN_PID,
99             COLUMN_BUNDLE_NAME, COLUMN_BUNDLE_VERSION, COLUMN_START_TIME, COLUMN_FINISH_TIME,
100             COLUMN_RESOURCE_PATH, COLUMN_RESOURCE_SIZE, COLUMN_COST_CPU, COLUMN_STATE
101         });
102     if (resultSet == nullptr) {
103         HIVIEW_LOGI("failed to query app task table=%{public}s", TABLE_NAME_TASK);
104         return false;
105     }
106     bool result = InnerGetAppTask(resultSet, appEventTask);
107     resultSet->Close();
108     return result;
109 }
110 }
111 
AppEventTaskStorage(std::shared_ptr<NativeRdb::RdbStore> dbStore)112 AppEventTaskStorage::AppEventTaskStorage(std::shared_ptr<NativeRdb::RdbStore> dbStore) : dbStore_(dbStore) {}
113 
GetAppEventTask(int32_t uid,int32_t eventDate,AppEventTask & appEventTask)114 bool AppEventTaskStorage::GetAppEventTask(int32_t uid, int32_t eventDate, AppEventTask &appEventTask)
115 {
116     if (dbStore_ == nullptr) {
117         HIVIEW_LOGE("db store is null,");
118         return false;
119     }
120     NativeRdb::AbsRdbPredicates predicates(TABLE_NAME_TASK);
121     InnerGetAppTaskCondition(uid, eventDate, predicates);
122     return InnerQueryAppTask(dbStore_, predicates, appEventTask);
123 }
124 
InsertAppEventTask(AppEventTask & appEventTask)125 bool AppEventTaskStorage::InsertAppEventTask(AppEventTask &appEventTask)
126 {
127     if (dbStore_ == nullptr) {
128         HIVIEW_LOGE("db store is null,");
129         return false;
130     }
131     NativeRdb::ValuesBucket bucket;
132     bucket.PutLong(COLUMN_TASK_DATE, appEventTask.taskDate_);
133     bucket.PutInt(COLUMN_TASK_TYPE, appEventTask.taskType_);
134     bucket.PutInt(COLUMN_UID, appEventTask.uid_);
135     bucket.PutInt(COLUMN_PID, appEventTask.pid_);
136     bucket.PutString(COLUMN_BUNDLE_NAME, appEventTask.bundleName_);
137     bucket.PutString(COLUMN_BUNDLE_VERSION, appEventTask.bundleVersion_);
138     bucket.PutLong(COLUMN_START_TIME, appEventTask.startTime_);
139     bucket.PutLong(COLUMN_FINISH_TIME, appEventTask.finishTime_);
140     bucket.PutString(COLUMN_RESOURCE_PATH, appEventTask.resourePath_);
141     bucket.PutInt(COLUMN_RESOURCE_SIZE, appEventTask.resourceSize_);
142     bucket.PutDouble(COLUMN_COST_CPU, appEventTask.costCpu_);
143     bucket.PutInt(COLUMN_STATE, appEventTask.state_);
144     int ret = dbStore_->Insert(appEventTask.id_, TABLE_NAME_TASK, bucket);
145     if (ret != NativeRdb::E_OK) {
146         HIVIEW_LOGE("failed to insert app event task, ret=%{public}d, uid=%{public}d", ret, appEventTask.uid_);
147         return false;
148     }
149     return true;
150 }
151 
RemoveAppEventTask(int32_t eventDate)152 void AppEventTaskStorage::RemoveAppEventTask(int32_t eventDate)
153 {
154     if (dbStore_ == nullptr) {
155         HIVIEW_LOGE("db store is null,");
156         return;
157     }
158     NativeRdb::AbsRdbPredicates predicates(TABLE_NAME_TASK);
159     predicates.LessThan(COLUMN_TASK_DATE, eventDate);
160     int32_t deleteRows = 0;
161     int ret = dbStore_->Delete(deleteRows, predicates);
162     if (ret != NativeRdb::E_OK) {
163         HIVIEW_LOGE("failed to insert app event task, ret=%{public}d", ret);
164     }
165 }
166 } // namespace OHOS
167