1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ci#ifndef METRICS_H 17fb726d48Sopenharmony_ci#define METRICS_H 18fb726d48Sopenharmony_ci#include <functional> 19fb726d48Sopenharmony_ci#include <map> 20fb726d48Sopenharmony_ci#include <string> 21fb726d48Sopenharmony_ci#include <vector> 22fb726d48Sopenharmony_ci#include "json.hpp" 23fb726d48Sopenharmony_ci#include "memAggStrategy.h" 24fb726d48Sopenharmony_ci#include "memStrategy.h" 25fb726d48Sopenharmony_ci#include "metaDataStrategy.h" 26fb726d48Sopenharmony_ci#include "sysCallStrategy.h" 27fb726d48Sopenharmony_ci#include "traceStateStrategy.h" 28fb726d48Sopenharmony_ci#include "traceTaskStrategy.h" 29fb726d48Sopenharmony_ci#include "ts_common.h" 30fb726d48Sopenharmony_ci 31fb726d48Sopenharmony_cienum METRICS_INDEX { 32fb726d48Sopenharmony_ci METRICS_TRACE_MEM, 33fb726d48Sopenharmony_ci METRICS_TRACE_MEM_TOP_TEN, 34fb726d48Sopenharmony_ci METRICS_TRACE_MEM_UNAGG, 35fb726d48Sopenharmony_ci METRICS_TRACE_TASK_NAMES, 36fb726d48Sopenharmony_ci METRICS_TRACE_STATS, 37fb726d48Sopenharmony_ci METRICS_TRACE_METADATA, 38fb726d48Sopenharmony_ci METRICS_SYS_CALLS, 39fb726d48Sopenharmony_ci}; 40fb726d48Sopenharmony_ci 41fb726d48Sopenharmony_cinamespace SysTuning { 42fb726d48Sopenharmony_cinamespace TraceStreamer { 43fb726d48Sopenharmony_ciconst std::string TRACE_MEM = "trace_mem"; 44fb726d48Sopenharmony_ciconst std::string TRACE_MEM_TOP_TEN = "trace_mem_top10"; 45fb726d48Sopenharmony_ciconst std::string TRACE_MEM_UNAGG = "trace_mem_unagg"; 46fb726d48Sopenharmony_ciconst std::string TRACE_TASK_NAMES = "trace_task_names"; 47fb726d48Sopenharmony_ciconst std::string TRACE_STATS = "trace_stats"; 48fb726d48Sopenharmony_ciconst std::string TRACE_METADATA = "trace_metadata"; 49fb726d48Sopenharmony_ciconst std::string SYS_CALLS = "sys_calls"; 50fb726d48Sopenharmony_ciconst std::string PROCESS_METRICES = "process_metrics:{"; 51fb726d48Sopenharmony_ciconst std::string PROCESS_NAME = "process_name:"; 52fb726d48Sopenharmony_ciconst std::string OVERALL_COUNTERS = "overall_counters:{"; 53fb726d48Sopenharmony_ciconst std::string ANON_RSS = "anon_rss:{"; 54fb726d48Sopenharmony_ciconst std::string MIN = "min:"; 55fb726d48Sopenharmony_ciconst std::string MAX = "max:"; 56fb726d48Sopenharmony_ciconst std::string AVG = "avg:"; 57fb726d48Sopenharmony_ciconst std::string PROCESS_VALUES = "process_value:{"; 58fb726d48Sopenharmony_ciconst std::string TS = "ts:"; 59fb726d48Sopenharmony_ciconst std::string OOM_SCORE = "oom_score:"; 60fb726d48Sopenharmony_ciconst std::string VALUE = "value:"; 61fb726d48Sopenharmony_ciconst std::string FILE_RSS = "file_rss:{"; 62fb726d48Sopenharmony_ciconst std::string SWAP = "swap:{"; 63fb726d48Sopenharmony_ciconst std::string ANON_AND_SWAP = "anon_and_swap:{"; 64fb726d48Sopenharmony_ciconst std::string PROCESS = "process:{"; 65fb726d48Sopenharmony_ciconst std::string PID = "pid:"; 66fb726d48Sopenharmony_ciconst std::string THREAD_NAME = "thread_name:"; 67fb726d48Sopenharmony_ciconst std::string STAT = "stat:{"; 68fb726d48Sopenharmony_ciconst std::string NAME = "name:"; 69fb726d48Sopenharmony_ciconst std::string COUNT = "count:"; 70fb726d48Sopenharmony_ciconst std::string SOURCE = "source:"; 71fb726d48Sopenharmony_ciconst std::string SEVERITY = "severity:"; 72fb726d48Sopenharmony_ciconst std::string FUNCTION = "function:{"; 73fb726d48Sopenharmony_ciconst std::string FUNCTION_NAME = "function_name:"; 74fb726d48Sopenharmony_ciconst std::string DUR_MAX = "dur_max:"; 75fb726d48Sopenharmony_ciconst std::string DUR_MIN = "dur_min:"; 76fb726d48Sopenharmony_ciconst std::string DUR_AVG = "dur_avg:"; 77fb726d48Sopenharmony_ciusing json = nlohmann::json; 78fb726d48Sopenharmony_ciclass Metrics { 79fb726d48Sopenharmony_cipublic: 80fb726d48Sopenharmony_ci Metrics(); 81fb726d48Sopenharmony_ci ~Metrics() {} 82fb726d48Sopenharmony_ci using ResultCallBack = std::function<void(const std::string /* json result */, int32_t)>; 83fb726d48Sopenharmony_ci void ParserJson(const std::string &metrics, std::string &result); 84fb726d48Sopenharmony_ci void PrintMetricsResult(uint32_t metricsIndex, ResultCallBack callback); 85fb726d48Sopenharmony_ci const auto GetMetricsMap() 86fb726d48Sopenharmony_ci { 87fb726d48Sopenharmony_ci return initMetricsMap_; 88fb726d48Sopenharmony_ci } 89fb726d48Sopenharmony_ci 90fb726d48Sopenharmony_ciprivate: 91fb726d48Sopenharmony_ci using FuncCall = std::function<void(const std::string &result)>; 92fb726d48Sopenharmony_ci std::map<std::string, FuncCall> metricsFunction_ = {}; 93fb726d48Sopenharmony_ci void InitMemoryStrategy(const std::string &result); 94fb726d48Sopenharmony_ci void InitMemoryUnAggStrategy(const std::string &result); 95fb726d48Sopenharmony_ci void InitMemoryTaskNameStrategy(const std::string &result); 96fb726d48Sopenharmony_ci void InitTraceStatsStrategy(const std::string &result); 97fb726d48Sopenharmony_ci void InitTraceMetaDataStrategy(const std::string &result); 98fb726d48Sopenharmony_ci void InitSysCallStrategy(const std::string &result); 99fb726d48Sopenharmony_ci std::string JsonFormat(std::string json); 100fb726d48Sopenharmony_ci std::string GetLevelSpace(int level); 101fb726d48Sopenharmony_ci void UpdataRepeateValueByTraceMem(std::string &repeateValue, std::string &metricsName); 102fb726d48Sopenharmony_ci void UpdataRepeateValueByTopTen(std::string &repeateValue, std::string &metricsName); 103fb726d48Sopenharmony_ci void UpdataRepeateValueByMemUnagg(std::string &repeateValue, std::string &metricsName); 104fb726d48Sopenharmony_ci void UpdataRepeateValueByTaskNames(std::string &repeateValue, std::string &metricsName); 105fb726d48Sopenharmony_ci void UpdataRepeateValueByStats(std::string &repeateValue, std::string &metricsName); 106fb726d48Sopenharmony_ci void UpdataRepeateValueByMetadata(std::string &repeateValue, std::string &metricsName); 107fb726d48Sopenharmony_ci void UpdataRepeateValueBySysCalls(std::string &repeateValue, std::string &metricsName); 108fb726d48Sopenharmony_ci std::vector<ProcessMetricsItems> memStrategy_ = {}; 109fb726d48Sopenharmony_ci std::vector<ProcessValuesItem> memAggStrategy_ = {}; 110fb726d48Sopenharmony_ci std::vector<TaskProcessItem> taskNameStrategy_ = {}; 111fb726d48Sopenharmony_ci std::vector<StatItem> statStrategy_ = {}; 112fb726d48Sopenharmony_ci std::vector<TraceMetadataItem> metaDataStrategy_ = {}; 113fb726d48Sopenharmony_ci std::vector<FunctionItem> sysCallStrategy_ = {}; 114fb726d48Sopenharmony_ci std::map<int, std::string> initMetricsMap_ = {}; 115fb726d48Sopenharmony_ci}; 116fb726d48Sopenharmony_ci} // namespace TraceStreamer 117fb726d48Sopenharmony_ci} // namespace SysTuning 118fb726d48Sopenharmony_ci 119fb726d48Sopenharmony_ci#endif // METRICS_H