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 #include "event_store_config.h" 16 17 #include <fstream> 18 19 #include "json/json.h" 20 21 namespace OHOS { 22 namespace HiviewDFX { 23 namespace EventStore { 24 namespace { 25 const char CONFIG_FILE_PATH[] = "/system/etc/hiview/event_store_config.json"; 26 const char KEY_STORE_DAY[] = "StoreDay"; 27 const char KEY_PAGE_SIZE[] = "PageSize"; 28 const char KEY_MAX_SIZE[] = "MaxSize"; 29 const char KEY_MAX_FILE_NUM[] = "MaxFileNum"; 30 const char KEY_MAX_FILE_SIZE[] = "MaxFileSize"; 31 const std::unordered_map<std::string, int> EVENT_TYPE_MAP = { 32 {"FAULT", 1}, {"STATISTIC", 2}, {"SECURITY", 3}, {"BEHAVIOR", 4} 33 }; 34 ParseUint32(const Json::Value & root,const std::string & key)35 uint32_t ParseUint32(const Json::Value& root, const std::string& key) 36 { 37 return (root.isMember(key) && root[key].isUInt()) ? root[key].asUInt() : 0; 38 } 39 } EventStoreConfig()40 EventStoreConfig::EventStoreConfig() 41 { 42 Init(); 43 } 44 Init()45 void EventStoreConfig::Init() 46 { 47 Json::Value root; 48 std::ifstream fin(CONFIG_FILE_PATH, std::ifstream::binary); 49 Json::CharReaderBuilder jsonRBuilder; 50 Json::CharReaderBuilder::strictMode(&jsonRBuilder.settings_); 51 JSONCPP_STRING errs; 52 if (!parseFromStream(jsonRBuilder, fin, &root, &errs)) { 53 return; 54 } 55 56 std::vector<std::string> members = root.getMemberNames(); 57 for (auto iter = members.begin(); iter != members.end(); ++iter) { 58 if (EVENT_TYPE_MAP.find(*iter) == EVENT_TYPE_MAP.end()) { 59 continue; 60 } 61 if (auto node = root[*iter]; node.type() == Json::objectValue) { 62 StoreConfig config = { 63 .storeDay = ParseUint32(node, KEY_STORE_DAY), 64 .pageSize = ParseUint32(node, KEY_PAGE_SIZE), 65 .maxFileSize = ParseUint32(node, KEY_MAX_FILE_SIZE), 66 .maxFileNum = ParseUint32(node, KEY_MAX_FILE_NUM), 67 .maxSize = ParseUint32(node, KEY_MAX_SIZE), 68 }; 69 configMap_.emplace(EVENT_TYPE_MAP.at(*iter), config); 70 } 71 } 72 } 73 Contain(int eventType)74 bool EventStoreConfig::Contain(int eventType) 75 { 76 return configMap_.find(eventType) != configMap_.end(); 77 } 78 GetStoreDay(int eventType)79 uint32_t EventStoreConfig::GetStoreDay(int eventType) 80 { 81 return Contain(eventType) ? configMap_[eventType].storeDay : 0; 82 } 83 GetMaxSize(int eventType)84 uint32_t EventStoreConfig::GetMaxSize(int eventType) 85 { 86 return Contain(eventType) ? configMap_[eventType].maxSize : 0; 87 } 88 GetMaxFileNum(int eventType)89 uint32_t EventStoreConfig::GetMaxFileNum(int eventType) 90 { 91 return Contain(eventType) ? configMap_[eventType].maxFileNum : 0; 92 } 93 GetPageSize(int eventType)94 uint32_t EventStoreConfig::GetPageSize(int eventType) 95 { 96 return Contain(eventType) ? configMap_[eventType].pageSize : 0; 97 } 98 GetMaxFileSize(int eventType)99 uint32_t EventStoreConfig::GetMaxFileSize(int eventType) 100 { 101 return Contain(eventType) ? configMap_[eventType].maxFileSize : 0; 102 } 103 } // EventStore 104 } // HiviewDFX 105 } // OHOS 106