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 #ifndef FREEZE_JSON_GENERATOR_H 17 #define FREEZE_JSON_GENERATOR_H 18 19 #include <string> 20 21 namespace OHOS { 22 namespace HiviewDFX { 23 24 class FreezeJsonException { 25 public: 26 class Builder { 27 public: Builder()28 Builder() {}; ~Builder()29 ~Builder() {}; 30 Builder& InitName(const std::string& name); 31 Builder& InitMessage(const std::string& message); 32 FreezeJsonException Build() const; 33 34 private: 35 std::string name_ = ""; 36 std::string message_ = ""; 37 friend class FreezeJsonException; 38 }; 39 40 explicit FreezeJsonException(const FreezeJsonException::Builder& builder); ~FreezeJsonException()41 ~FreezeJsonException() {}; 42 std::string JsonStr() const; 43 44 private: 45 static constexpr const char* const jsonExceptionName = "name"; 46 static constexpr const char* const jsonExceptionMessage = "message"; 47 48 std::string name_; 49 std::string message_; 50 }; 51 52 class FreezeJsonMemory { 53 public: 54 class Builder { 55 public: Builder()56 Builder() {}; ~Builder()57 ~Builder() {}; 58 Builder& InitRss(uint64_t rss); 59 Builder& InitVss(uint64_t vss); 60 Builder& InitPss(uint64_t pss); 61 Builder& InitSysFreeMem(uint64_t sysFreeMem); 62 Builder& InitSysAvailMem(uint64_t sysAvailMem); 63 Builder& InitSysTotalMem(uint64_t sysTotalMem); 64 FreezeJsonMemory Build() const; 65 66 private: 67 uint64_t rss_ = 0; 68 uint64_t vss_ = 0; 69 uint64_t pss_ = 0; 70 uint64_t sysFreeMem_ = 0; 71 uint64_t sysAvailMem_ = 0; 72 uint64_t sysTotalMem_ = 0; 73 friend class FreezeJsonMemory; 74 }; 75 76 explicit FreezeJsonMemory(const FreezeJsonMemory::Builder& builder); ~FreezeJsonMemory()77 ~FreezeJsonMemory() {}; 78 std::string JsonStr() const; 79 80 private: 81 static constexpr const char* const jsonMemoryRss = "rss"; 82 static constexpr const char* const jsonMemoryVss = "vss"; 83 static constexpr const char* const jsonMemoryPss = "pss"; 84 static constexpr const char* const jsonMemorySysFreeMem = "sys_free_mem"; 85 static constexpr const char* const jsonMemorySysAvailMem = "sys_avail_mem"; 86 static constexpr const char* const jsonMemorySysTotalMem = "sys_total_mem"; 87 uint64_t rss_; 88 uint64_t vss_; 89 uint64_t pss_; 90 uint64_t sysFreeMem_; 91 uint64_t sysAvailMem_; 92 uint64_t sysTotalMem_; 93 }; 94 95 class FreezeJsonParams { 96 public: 97 class Builder { 98 public: Builder()99 Builder() {}; ~Builder()100 ~Builder() {}; 101 Builder& InitTime(unsigned long long time); 102 Builder& InitUuid(const std::string& uuid); 103 Builder& InitFreezeType(const std::string& freezeType); 104 Builder& InitForeground(bool foreground); 105 Builder& InitBundleVersion(const std::string& bundleVersion); 106 Builder& InitBundleName(const std::string& bundleName); 107 Builder& InitProcessName(const std::string& processName); 108 Builder& InitExternalLog(const std::string& externalLog); 109 Builder& InitPid(long pid); 110 Builder& InitUid(long uid); 111 Builder& InitAppRunningUniqueId(const std::string& appRunningUniqueId); 112 Builder& InitException(const std::string& exception); 113 Builder& InitHilog(const std::string& hilog); 114 Builder& InitEventHandler(const std::string& eventHandler); 115 Builder& InitEventHandlerSize3s(const std::string& eventHandlerSize3s); 116 Builder& InitEventHandlerSize6s(const std::string& eventHandlerSize6s); 117 Builder& InitPeerBinder(const std::string& peerBinder); 118 Builder& InitThreads(const std::string& threads); 119 Builder& InitMemory(const std::string& memory); 120 FreezeJsonParams Build() const; 121 122 private: 123 unsigned long long time_ = 0; 124 std::string uuid_ = ""; 125 std::string freezeType_ = ""; 126 bool foreground_ = false; 127 std::string bundleVersion_ = ""; 128 std::string bundleName_ = ""; 129 std::string processName_ = ""; 130 std::string externalLog_ = "[]"; 131 long pid_ = 0; 132 long uid_ = 0; 133 std::string appRunningUniqueId_ = ""; 134 std::string exception_ = "{}"; 135 std::string hilog_ = "[]"; 136 std::string eventHandler_ = "[]"; 137 std::string eventHandlerSize3s_ = ""; 138 std::string eventHandlerSize6s_ = ""; 139 std::string peerBinder_ = "[]"; 140 std::string threads_ = "[]"; 141 std::string memory_ = "{}"; 142 friend class FreezeJsonParams; 143 }; 144 145 explicit FreezeJsonParams(const FreezeJsonParams::Builder& builder); ~FreezeJsonParams()146 ~FreezeJsonParams() {}; 147 std::string JsonStr() const; 148 149 private: 150 static constexpr const char* const jsonParamsTime = "time"; 151 static constexpr const char* const jsonParamsUuid = "uuid"; 152 static constexpr const char* const jsonParamsFreezeType = "freeze_type"; 153 static constexpr const char* const jsonParamsForeground = "foreground"; 154 static constexpr const char* const jsonParamsBundleVersion = "bundle_version"; 155 static constexpr const char* const jsonParamsBundleName = "bundle_name"; 156 static constexpr const char* const jsonParamsProcessName = "process_name"; 157 static constexpr const char* const jsonParamsExternalLog = "external_log"; 158 static constexpr const char* const jsonParamsPid = "pid"; 159 static constexpr const char* const jsonParamsUid = "uid"; 160 static constexpr const char* const jsonParamsAppRunningUniqueId = "app_running_unique_id"; 161 static constexpr const char* const jsonParamsException = "exception"; 162 static constexpr const char* const jsonParamsHilog = "hilog"; 163 static constexpr const char* const jsonParamsEventHandler = "event_handler"; 164 static constexpr const char* const jsonParamsEventHandlerSize3s = "event_handler_size_3s"; 165 static constexpr const char* const jsonParamsEventHandlerSize6s = "event_handler_size_6s"; 166 static constexpr const char* const jsonParamsPeerBinder = "peer_binder"; 167 static constexpr const char* const jsonParamsThreads = "threads"; 168 static constexpr const char* const jsonParamsMemory = "memory"; 169 170 unsigned long long time_; 171 std::string uuid_; 172 std::string freezeType_; 173 bool foreground_; 174 std::string bundleVersion_; 175 std::string bundleName_; 176 std::string processName_; 177 std::string externalLog_ = ""; 178 long pid_ = 0; 179 long uid_ = 0; 180 std::string appRunningUniqueId_ = ""; 181 std::string exception_; 182 std::string hilog_; 183 std::string eventHandler_; 184 std::string eventHandlerSize3s_; 185 std::string eventHandlerSize6s_; 186 std::string peerBinder_; 187 std::string threads_; 188 std::string memory_; 189 }; 190 } // namespace HiviewDFX 191 } // namespace OHOS 192 #endif