1 /*
2  * Copyright (c) 2023 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 "freeze_json_generator.h"
17 #include "freeze_json_util.h"
18 
19 #include <map>
20 #include <list>
21 #include <string>
22 
23 namespace OHOS {
24 namespace HiviewDFX {
25 
FreezeJsonException(const FreezeJsonException::Builder & builder)26 FreezeJsonException::FreezeJsonException(const FreezeJsonException::Builder& builder)
27     : name_(builder.name_),
28     message_(builder.message_)
29 {
30 }
31 
InitName(const std::string & name)32 FreezeJsonException::Builder& FreezeJsonException::Builder::InitName(const std::string& name)
33 {
34     name_ = name;
35     return *this;
36 }
37 
InitMessage(const std::string & message)38 FreezeJsonException::Builder& FreezeJsonException::Builder::InitMessage(const std::string& message)
39 {
40     message_ = message;
41     return *this;
42 }
43 
Build() const44 FreezeJsonException FreezeJsonException::Builder::Build() const
45 {
46     FreezeJsonException freezeJsonException = FreezeJsonException(*this);
47     return freezeJsonException;
48 }
49 
JsonStr() const50 std::string FreezeJsonException::JsonStr() const
51 {
52     std::map<std::string, std::string> exceptionMap;
53     exceptionMap[jsonExceptionName] = name_;
54     exceptionMap[jsonExceptionMessage] = message_;
55     return FreezeJsonUtil::GetStrByMap(exceptionMap);
56 }
57 
FreezeJsonMemory(const FreezeJsonMemory::Builder & builder)58 FreezeJsonMemory::FreezeJsonMemory(const FreezeJsonMemory::Builder& builder)
59     : rss_(builder.rss_),
60     vss_(builder.vss_),
61     pss_(builder.pss_),
62     sysFreeMem_(builder.sysFreeMem_),
63     sysAvailMem_(builder.sysAvailMem_),
64     sysTotalMem_(builder.sysTotalMem_)
65 {
66 }
67 
InitRss(unsigned long long rss)68 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitRss(unsigned long long rss)
69 {
70     rss_ = rss;
71     return *this;
72 }
73 
InitVss(unsigned long long vss)74 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitVss(unsigned long long vss)
75 {
76     vss_ = vss;
77     return *this;
78 }
79 
InitPss(unsigned long long pss)80 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitPss(unsigned long long pss)
81 {
82     pss_ = pss;
83     return *this;
84 }
85 
InitSysFreeMem(unsigned long long sysFreeMem)86 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitSysFreeMem(unsigned long long sysFreeMem)
87 {
88     sysFreeMem_ = sysFreeMem;
89     return *this;
90 }
91 
InitSysAvailMem(unsigned long long sysAvailMem)92 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitSysAvailMem(unsigned long long sysAvailMem)
93 {
94     sysAvailMem_ = sysAvailMem;
95     return *this;
96 }
97 
InitSysTotalMem(unsigned long long sysTotalMem)98 FreezeJsonMemory::Builder& FreezeJsonMemory::Builder::InitSysTotalMem(unsigned long long sysTotalMem)
99 {
100     sysTotalMem_ = sysTotalMem;
101     return *this;
102 }
103 
Build() const104 FreezeJsonMemory FreezeJsonMemory::Builder::Build() const
105 {
106     FreezeJsonMemory freezeJsonMemory = FreezeJsonMemory(*this);
107     return freezeJsonMemory;
108 }
109 
JsonStr() const110 std::string FreezeJsonMemory::JsonStr() const
111 {
112     std::map<std::string, unsigned long long> memoryMap;
113     memoryMap[jsonMemoryRss] = rss_;
114     memoryMap[jsonMemoryVss] = vss_;
115     memoryMap[jsonMemoryPss] = pss_;
116     memoryMap[jsonMemorySysFreeMem] = sysFreeMem_;
117     memoryMap[jsonMemorySysAvailMem] = sysAvailMem_;
118     memoryMap[jsonMemorySysTotalMem] = sysTotalMem_;
119     return FreezeJsonUtil::GetStrByMap(memoryMap);
120 }
121 
FreezeJsonParams(const FreezeJsonParams::Builder & builder)122 FreezeJsonParams::FreezeJsonParams(const FreezeJsonParams::Builder& builder)
123     : time_(builder.time_),
124     uuid_(builder.uuid_),
125     freezeType_(builder.freezeType_),
126     foreground_(builder.foreground_),
127     bundleVersion_(builder.bundleVersion_),
128     bundleName_(builder.bundleName_),
129     processName_(builder.processName_),
130     externalLog_(builder.externalLog_),
131     pid_(builder.pid_),
132     uid_(builder.uid_),
133     appRunningUniqueId_(builder.appRunningUniqueId_),
134     exception_(builder.exception_),
135     hilog_(builder.hilog_),
136     eventHandler_(builder.eventHandler_),
137     eventHandlerSize3s_(builder.eventHandlerSize3s_),
138     eventHandlerSize6s_(builder.eventHandlerSize6s_),
139     peerBinder_(builder.peerBinder_),
140     threads_(builder.threads_),
141     memory_(builder.memory_)
142 {
143 }
144 
InitTime(unsigned long long time)145 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitTime(unsigned long long time)
146 {
147     time_ = time;
148     return *this;
149 }
150 
InitUuid(const std::string & uuid)151 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitUuid(const std::string& uuid)
152 {
153     uuid_ = uuid;
154     return *this;
155 }
156 
InitFreezeType(const std::string & freezeType)157 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitFreezeType(const std::string& freezeType)
158 {
159     freezeType_ = freezeType;
160     return *this;
161 }
162 
InitForeground(bool foreground)163 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitForeground(bool foreground)
164 {
165     foreground_ = foreground;
166     return *this;
167 }
168 
InitBundleVersion(const std::string & bundleVersion)169 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitBundleVersion(const std::string& bundleVersion)
170 {
171     bundleVersion_ = bundleVersion;
172     return *this;
173 }
174 
InitBundleName(const std::string & bundleName)175 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitBundleName(const std::string& bundleName)
176 {
177     bundleName_ = bundleName;
178     return *this;
179 }
180 
InitProcessName(const std::string & processName)181 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitProcessName(const std::string& processName)
182 {
183     processName_ = processName;
184     return *this;
185 }
186 
InitExternalLog(const std::string & externalLog)187 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitExternalLog(const std::string& externalLog)
188 {
189     externalLog_ = externalLog;
190     return *this;
191 }
192 
InitPid(long pid)193 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitPid(long pid)
194 {
195     pid_ = pid;
196     return *this;
197 }
198 
InitUid(long uid)199 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitUid(long uid)
200 {
201     uid_ = uid;
202     return *this;
203 }
204 
InitAppRunningUniqueId(const std::string & appRunningUniqueId)205 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitAppRunningUniqueId(const std::string& appRunningUniqueId)
206 {
207     appRunningUniqueId_ = appRunningUniqueId;
208     return *this;
209 }
210 
InitException(const std::string & exception)211 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitException(const std::string& exception)
212 {
213     exception_ = exception;
214     return *this;
215 }
216 
InitHilog(const std::string & hilog)217 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitHilog(const std::string& hilog)
218 {
219     hilog_ = hilog;
220     return *this;
221 }
222 
InitEventHandler(const std::string & eventHandler)223 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitEventHandler(const std::string& eventHandler)
224 {
225     eventHandler_ = eventHandler;
226     return *this;
227 }
228 
InitEventHandlerSize3s(const std::string & eventHandlerSize3s)229 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitEventHandlerSize3s(const std::string& eventHandlerSize3s)
230 {
231     eventHandlerSize3s_ = eventHandlerSize3s;
232     return *this;
233 }
234 
InitEventHandlerSize6s(const std::string & eventHandlerSize6s)235 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitEventHandlerSize6s(const std::string& eventHandlerSize6s)
236 {
237     eventHandlerSize6s_ = eventHandlerSize6s;
238     return *this;
239 }
240 
InitPeerBinder(const std::string & peerBinder)241 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitPeerBinder(const std::string& peerBinder)
242 {
243     peerBinder_ = peerBinder;
244     return *this;
245 }
246 
InitThreads(const std::string & threads)247 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitThreads(const std::string& threads)
248 {
249     threads_ = threads;
250     return *this;
251 }
252 
InitMemory(const std::string & memory)253 FreezeJsonParams::Builder& FreezeJsonParams::Builder::InitMemory(const std::string& memory)
254 {
255     memory_ = memory;
256     return *this;
257 }
258 
Build() const259 FreezeJsonParams FreezeJsonParams::Builder::Build() const
260 {
261     FreezeJsonParams freezeJsonParams = FreezeJsonParams(*this);
262     return freezeJsonParams;
263 }
264 
JsonStr() const265 std::string FreezeJsonParams::JsonStr() const
266 {
267     std::list<std::string> list;
268     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsTime, time_));
269     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsUuid, uuid_));
270     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsForeground, foreground_));
271     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsBundleVersion, bundleVersion_));
272     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsBundleName, bundleName_));
273     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsProcessName, processName_));
274     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsExternalLog, externalLog_));
275     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsPid, pid_));
276     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsUid, uid_));
277     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsAppRunningUniqueId, appRunningUniqueId_));
278     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsException, exception_));
279     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsHilog, hilog_));
280     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsEventHandler, eventHandler_));
281     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsEventHandlerSize3s, eventHandlerSize3s_));
282     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsEventHandlerSize6s, eventHandlerSize6s_));
283     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsPeerBinder, peerBinder_));
284     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsThreads, threads_));
285     list.push_back(FreezeJsonUtil::GetStrByKeyValue(jsonParamsMemory, memory_));
286     return FreezeJsonUtil::MergeKeyValueList(list);
287 }
288 
289 } // namespace HiviewDFX
290 } // namespace OHOS