添加analysis_faultlog测试二进制

Signed-off-by: zhouquan <zhouquan63@huawei.com>
This commit is contained in:
zhouquan 2024-09-09 11:50:32 +08:00
parent fe1f0720f2
commit 7d0755df6b
3 changed files with 142 additions and 0 deletions

View File

@ -126,6 +126,7 @@ group("hiview_package") {
"$hiview_plugin/performance:xperformance", "$hiview_plugin/performance:xperformance",
"$hiview_plugin/plugin_build:adft", "$hiview_plugin/plugin_build:adft",
"$hiview_plugin/plugin_build:bdfr", "$hiview_plugin/plugin_build:bdfr",
"$hiview_root/utility/analysis_faultlog:analysis_faultlog",
] ]
if (enable_hiview_usage_event_report_build) { if (enable_hiview_usage_event_report_build) {

View File

@ -0,0 +1,40 @@
# Copyright (c) 2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# 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.
import("//base/hiviewdfx/hiview/hiview.gni")
import("//build/ohos.gni")
ohos_executable("analysis_faultlog") {
sanitize = {
cfi = true
cfi_cross_dso = true
cfi_vcall_icall_only = true
debug = false
}
install_enable = false
sources = [ "analysis_faultlog.cpp" ]
configs = [ "$hiview_root/utility/smart_parser:smart_parser_config" ]
deps = [
"$hiview_root/utility/common_utils:hiview_reliability_common_utils",
"$hiview_root/utility/smart_parser:smart_parser",
]
external_deps = [ "hilog:libhilog" ]
part_name = "hiview"
subsystem_name = "hiviewdfx"
}

View File

@ -0,0 +1,101 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* 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.
*/
#include <chrono>
#include <iostream>
#include <string>
#include "feature_analysis.h"
#include "file_util.h"
#include "hiview_logger.h"
#include "rule.h"
#include "smart_parser.h"
#include "tbox.h"
DEFINE_LOG_TAG("SmartParser");
static const char* const SMART_PARSER_PATH = "/system/etc/hiview/";
static void PrintEventInfo(std::map<std::string, std::string> eventInfo, std::string msg)
{
HIVIEW_LOGI("%{public}s >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", msg.c_str());
HIVIEW_LOGI("eventInfo size : %{public}s", std::to_string(eventInfo.size()).c_str());
for (auto &[key, val] : eventInfo) {
std::istringstream iss(val);
std::string line;
while (std::getline(iss, line)) {
HIVIEW_LOGI("[%{public}s] : %{public}s", key.c_str(), line.c_str());
}
}
}
static std::map<std::string, std::string> SmartParser(const std::string& eventPath, const std::string& eventType)
{
auto startTime = std::chrono::high_resolution_clock::now();
auto eventInfos = OHOS::HiviewDFX::SmartParser::Analysis(eventPath, SMART_PARSER_PATH, eventType);
auto endTime = std::chrono::high_resolution_clock::now();
auto diffTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
std::cout << "SmartParser::Analysis running time : " << diffTime << " ms" << std::endl;
PrintEventInfo(eventInfos, "SmartParser::Analysis result:");
return eventInfos;
}
static void Tbox(std::map<std::string, std::string>& eventInfo, std::string& eventType)
{
auto startTime = std::chrono::high_resolution_clock::now();
OHOS::HiviewDFX::Tbox::FilterTrace(eventInfo, eventType);
auto endTime = std::chrono::high_resolution_clock::now();
auto diffTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
std::cout << "Tbox::FilterTrace running time : " << diffTime << " ms" << std::endl;
PrintEventInfo(eventInfo, "Tbox::FilterTrace result:");
}
int main(int argc, char *argv[])
{
std::string eventType;
std::string logPath;
for (int i = 1; i < argc; i++) {
if (std::string(argv[i]) == "-t") {
if (i + 1 < argc) {
eventType = argv[i + 1];
}
} else if (std::string(argv[i]) == "-f") {
if (i + 1 < argc) {
logPath = argv[i + 1];
}
}
}
if (eventType.empty() || logPath.empty()) {
std::cout << "Usage:" << std::endl;
std::cout << "\t" << argv[0] << "-t eventType -f filePath" << std::endl;
std::cout << "\teventType\t" <<
"The event name must match the event name configured in the configuration file." << std::endl;
std::cout << "\tfilePath\t" <<
"The parsed file path must match the path matching rule configured in the configuration file." << std::endl;
return -1;
}
std::cout << ">>>>> eventType : " << eventType << std::endl;
std::cout << ">>>>> logPath : " << logPath << std::endl;
std::cout << std::endl;
auto eventInfos = SmartParser(logPath, eventType);
Tbox(eventInfos, eventType);
return 0;
}