15f9996aaSopenharmony_ci#!/usr/bin/env python 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright (c) 2021-2023 Huawei Device Co., Ltd. 45f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 55f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 65f9996aaSopenharmony_ci# You may obtain a copy of the License at 75f9996aaSopenharmony_ci# 85f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 95f9996aaSopenharmony_ci# 105f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 115f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 125f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 145f9996aaSopenharmony_ci# limitations under the License. 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_ciimport sys 175f9996aaSopenharmony_ciimport os 185f9996aaSopenharmony_ciimport stat 195f9996aaSopenharmony_ciimport json 205f9996aaSopenharmony_ciimport argparse 215f9996aaSopenharmony_ciimport zipfile 225f9996aaSopenharmony_ci 235f9996aaSopenharmony_cifrom collections import Counter 245f9996aaSopenharmony_ci 255f9996aaSopenharmony_cisys.path.append( 265f9996aaSopenharmony_ci os.path.dirname( 275f9996aaSopenharmony_ci os.path.dirname( 285f9996aaSopenharmony_ci os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) 295f9996aaSopenharmony_ci 305f9996aaSopenharmony_cifrom third_party.PyYAML.lib import yaml # noqa: E402 315f9996aaSopenharmony_ci 325f9996aaSopenharmony_ci_DUPLICATE_KEY_DEF = "duplicate key definition" 335f9996aaSopenharmony_ci_EMPTY_YAML = "empty yaml file input" 345f9996aaSopenharmony_ci_INVALID_YAML = "invalid yaml format" 355f9996aaSopenharmony_ci_DUPLICATE_DOMAIN = "duplicate domain" 365f9996aaSopenharmony_ci_INVALID_DOMAIN_NUMBER = "invalid domain number" 375f9996aaSopenharmony_ci_INVALID_DOMAIN_LENGTH = "invalid domain length" 385f9996aaSopenharmony_ci_INVALID_DOMAIN_CHAR = "invalid domain character" 395f9996aaSopenharmony_ci_INVALID_DOMAIN_CHAR_HEAD = "invalid domain character head" 405f9996aaSopenharmony_ci_INVALID_EVENT_NUMBER = "invalid event number" 415f9996aaSopenharmony_ci_INVALID_EVENT_LENGTH = "invalid event length" 425f9996aaSopenharmony_ci_INVALID_EVENT_CHAR = "invalid event character" 435f9996aaSopenharmony_ci_INVALID_EVENT_CHAR_HEAD = "invalid event character head" 445f9996aaSopenharmony_ci_MISSING_EVENT_BASE = "missing event base" 455f9996aaSopenharmony_ci_MISSING_EVENT_TYPE = "missing event type" 465f9996aaSopenharmony_ci_INVALID_EVENT_TYPE = "invalid event type" 475f9996aaSopenharmony_ci_MISSING_EVENT_LEVEL = "missing event level" 485f9996aaSopenharmony_ci_INVALID_EVENT_LEVEL = "invalid event level" 495f9996aaSopenharmony_ci_MISSING_EVENT_DESC = "missing event desc" 505f9996aaSopenharmony_ci_INVALID_EVENT_DESC_LENGTH = "invalid event desc length" 515f9996aaSopenharmony_ci_INVALID_EVENT_TAG_NUM = "invalid event tag number" 525f9996aaSopenharmony_ci_INVALID_EVENT_TAG_LEN = "invalid event tag length" 535f9996aaSopenharmony_ci_INVALID_EVENT_TAG_CHAR = "invalid event tag character" 545f9996aaSopenharmony_ci_DUPLICATE_EVENT_TAG = "duplicate event tag" 555f9996aaSopenharmony_ci_INVALID_EVENT_BASE_KEY = "invalid event base key" 565f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_NUM = "invalid event param number" 575f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_LEN = "invalid event param length" 585f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_CHAR = "invalid event param character" 595f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_CHAR_HEAD = "invalid event param character head" 605f9996aaSopenharmony_ci_MISSING_EVENT_PARAM_TYPE = "missing event param type" 615f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_TYPE = "invalid event param type" 625f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_ARRSIZE = "invalid event param arrsize" 635f9996aaSopenharmony_ci_MISSING_EVENT_PARAM_DESC = "missing event param desc" 645f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_DESC_LEN = "invalid event param desc length" 655f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_KEY = "invalid event param key" 665f9996aaSopenharmony_ci_DEPRECATED_EVENT_NAME_PREFIX = "deprecated event name prefix" 675f9996aaSopenharmony_ci_DEPRECATED_PARAM_NAME_PREFIX = "deprecated param name prefix" 685f9996aaSopenharmony_ci_DEPRECATED_TAG_NAME = "deprecated tag name" 695f9996aaSopenharmony_ci_DEPRECATED_EVENT_DESC_NAME = "deprecated event desc name" 705f9996aaSopenharmony_ci_DEPRECATED_PARAM_DESC_NAME = "deprecated param desc name" 715f9996aaSopenharmony_ci_INVALID_DOMAIN_DEF = "invalid definition type for domain" 725f9996aaSopenharmony_ci_INVALID_EVENT_DEF = "invalid definition type for event" 735f9996aaSopenharmony_ci_INVALID_EVENT_BASE_DEF = "invalid definition type for event base" 745f9996aaSopenharmony_ci_INVALID_EVENT_TYPE_DEF = "invalid definition type for event type" 755f9996aaSopenharmony_ci_INVALID_EVENT_LEVEL_DEF = "invalid definition type for event level" 765f9996aaSopenharmony_ci_INVALID_EVENT_DESC_DEF = "invalid definition type for event desc" 775f9996aaSopenharmony_ci_INVALID_EVENT_TAG_DEF = "invalid definition type for event tag" 785f9996aaSopenharmony_ci_INVALID_EVENT_PRESERVE_DEF = "invalid definition type for event preserve" 795f9996aaSopenharmony_ci_INVALID_EVENT_PARAM_DEF = "invalid definition type for event param" 805f9996aaSopenharmony_ci_INVALID_PARAM_TYPE_DEF = "invalid definition type for param type" 815f9996aaSopenharmony_ci_INVALID_PARAM_ARRSIZE_DEF = "invalid definition type for param arrsize" 825f9996aaSopenharmony_ci_INVALID_PARAM_DESC_DEF = "invalid definition type for param desc" 835f9996aaSopenharmony_ci_WARNING_MAP = { 845f9996aaSopenharmony_ci _EMPTY_YAML : 855f9996aaSopenharmony_ci "The yaml file list is empty.", 865f9996aaSopenharmony_ci _INVALID_YAML : 875f9996aaSopenharmony_ci "Invalid yaml file, error message: <<%s>>.", 885f9996aaSopenharmony_ci _DUPLICATE_DOMAIN : 895f9996aaSopenharmony_ci "Domain <<%s>> is already defined in <<%s>>.", 905f9996aaSopenharmony_ci _INVALID_DOMAIN_NUMBER : 915f9996aaSopenharmony_ci "The domain definition is missing in the yaml file.", 925f9996aaSopenharmony_ci _INVALID_DOMAIN_LENGTH : 935f9996aaSopenharmony_ci "The length of the domain must be between [1, 16], "\ 945f9996aaSopenharmony_ci "but the actual length of the domain <<%s>> is <<%d>>.", 955f9996aaSopenharmony_ci _INVALID_DOMAIN_CHAR : 965f9996aaSopenharmony_ci "The character of the domain must be in [A-Z0-9_], "\ 975f9996aaSopenharmony_ci "but the domain <<%s>> actually has <<%c>>.", 985f9996aaSopenharmony_ci _INVALID_DOMAIN_CHAR_HEAD : 995f9996aaSopenharmony_ci "The header of the domain must be in [A-Z], "\ 1005f9996aaSopenharmony_ci "but the actual header of the domain <<%s>> is <<%c>>.", 1015f9996aaSopenharmony_ci _INVALID_EVENT_NUMBER : 1025f9996aaSopenharmony_ci "The number of the events must be between [1, 4096], ."\ 1035f9996aaSopenharmony_ci "but there are actually <<%d>> events.", 1045f9996aaSopenharmony_ci _INVALID_EVENT_LENGTH : 1055f9996aaSopenharmony_ci "The length of the event must be between [1, 32], "\ 1065f9996aaSopenharmony_ci "but the actual length of the event <<%s>> is <<%d>>.", 1075f9996aaSopenharmony_ci _INVALID_EVENT_CHAR : 1085f9996aaSopenharmony_ci "The character of the event must be in [A-Z0-9_], "\ 1095f9996aaSopenharmony_ci "but the event <<%s>> actually has <<%c>>.", 1105f9996aaSopenharmony_ci _INVALID_EVENT_CHAR_HEAD : 1115f9996aaSopenharmony_ci "The header of the event must be in [A-Z], "\ 1125f9996aaSopenharmony_ci "but the actual header of the event <<%s>> is <<%c>>.", 1135f9996aaSopenharmony_ci _MISSING_EVENT_BASE : 1145f9996aaSopenharmony_ci "Event <<%s>> is missing __BASE definition.", 1155f9996aaSopenharmony_ci _MISSING_EVENT_TYPE : 1165f9996aaSopenharmony_ci "__BASE for event <<%s>> is missing type definition.", 1175f9996aaSopenharmony_ci _INVALID_EVENT_TYPE : 1185f9996aaSopenharmony_ci "The type of the event <<%s>> must be in "\ 1195f9996aaSopenharmony_ci "[FAULT, STATISTIC, SECURITY, BEHAVIOR], "\ 1205f9996aaSopenharmony_ci "but the actual event type is <<%s>>.", 1215f9996aaSopenharmony_ci _MISSING_EVENT_LEVEL : 1225f9996aaSopenharmony_ci "__BASE for event <<%s>> is missing level definition.", 1235f9996aaSopenharmony_ci _INVALID_EVENT_LEVEL : 1245f9996aaSopenharmony_ci "The level of the event <<%s>> must be in [CRITICAL, MINOR], "\ 1255f9996aaSopenharmony_ci "but the actual event level is <<%s>>.", 1265f9996aaSopenharmony_ci _MISSING_EVENT_DESC : 1275f9996aaSopenharmony_ci "__BASE for event <<%s>> is missing desc definition.", 1285f9996aaSopenharmony_ci _INVALID_EVENT_DESC_LENGTH : 1295f9996aaSopenharmony_ci "The length of the event desc must be between [3, 128], "\ 1305f9996aaSopenharmony_ci "but the actual length of the event <<%s>> desc <<%s>> is <<%d>>.", 1315f9996aaSopenharmony_ci _INVALID_EVENT_TAG_NUM : 1325f9996aaSopenharmony_ci "The number of the event tags must be between [0, 5], "\ 1335f9996aaSopenharmony_ci "but actually the event <<%s>> tag <<%s>> has <<%d>> tags.", 1345f9996aaSopenharmony_ci _INVALID_EVENT_TAG_LEN : 1355f9996aaSopenharmony_ci "The length of the event tag must be between [1, 16], "\ 1365f9996aaSopenharmony_ci "but the actual length of the event <<%s>> tag <<%s>> is <<%d>>.", 1375f9996aaSopenharmony_ci _INVALID_EVENT_TAG_CHAR : 1385f9996aaSopenharmony_ci "The character of the event tag must be in [A-Za-z0-9], "\ 1395f9996aaSopenharmony_ci "but the event <<%s>> tag <<%s>> actually has <<%c>>.", 1405f9996aaSopenharmony_ci _DUPLICATE_EVENT_TAG : 1415f9996aaSopenharmony_ci "Event tag should not be duplicated, "\ 1425f9996aaSopenharmony_ci "but tag <<%s>> for event <<%s>> has multiple identical.", 1435f9996aaSopenharmony_ci _INVALID_EVENT_BASE_KEY : 1445f9996aaSopenharmony_ci "Event <<%s>> __BASE key should be [type, level, tag, desc], "\ 1455f9996aaSopenharmony_ci "but actually has an invalid key <<%s>>.", 1465f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_NUM : 1475f9996aaSopenharmony_ci "The number of the event param must be between [0, 128], "\ 1485f9996aaSopenharmony_ci "but actually the event <<%s>> has <<%d>> params.", 1495f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_LEN : 1505f9996aaSopenharmony_ci "The length of the event param must be between [1, 32], "\ 1515f9996aaSopenharmony_ci "but the actual length of the event <<%s>> param <<%s>> is <<%d>>.", 1525f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_CHAR : 1535f9996aaSopenharmony_ci "The character of the event param must be in [A-Z0-9_], "\ 1545f9996aaSopenharmony_ci "but the event <<%s>> param <<%s>> actually has <<%c>>.", 1555f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_CHAR_HEAD: 1565f9996aaSopenharmony_ci "The header of the event param must be in [A-Z], "\ 1575f9996aaSopenharmony_ci "but the actual header of the event <<%s>> param <<%s>> is <<%c>>.", 1585f9996aaSopenharmony_ci _MISSING_EVENT_PARAM_TYPE : 1595f9996aaSopenharmony_ci "Event <<%s>> param <<%s>> is missing type definition.", 1605f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_TYPE : 1615f9996aaSopenharmony_ci "The type of the event <<%s>> param <<%s>> must be in "\ 1625f9996aaSopenharmony_ci "[BOOL, INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, "\ 1635f9996aaSopenharmony_ci "FLOAT, DOUBLE, STRING], but the actual type is <<%s>>.", 1645f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_ARRSIZE : 1655f9996aaSopenharmony_ci "The arrsize of the event param must be between [1, 100], "\ 1665f9996aaSopenharmony_ci "but the actual arrsize of the event <<%s>> param <<%s>> is <<%d>>.", 1675f9996aaSopenharmony_ci _MISSING_EVENT_PARAM_DESC : 1685f9996aaSopenharmony_ci "Event <<%s>> param <<%s>> is missing desc definition.", 1695f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_DESC_LEN : 1705f9996aaSopenharmony_ci "The length of the event param desc must be between [3, 128], "\ 1715f9996aaSopenharmony_ci "but the actual length of the event <<%s>> param <<%s>> "\ 1725f9996aaSopenharmony_ci "desc <<%s>> is <<%d>>.", 1735f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_KEY : 1745f9996aaSopenharmony_ci "Event <<%s>> param <<%s>> key should be [type, arrsize, desc], "\ 1755f9996aaSopenharmony_ci "but actually has an invalid key <<%s>>.", 1765f9996aaSopenharmony_ci _DEPRECATED_EVENT_NAME_PREFIX : 1775f9996aaSopenharmony_ci "Event <<%s>> should not start with domain <<%s>>.", 1785f9996aaSopenharmony_ci _DEPRECATED_PARAM_NAME_PREFIX : 1795f9996aaSopenharmony_ci "Event param <<%s>> should not start with event <<%s>>.", 1805f9996aaSopenharmony_ci _DEPRECATED_TAG_NAME : 1815f9996aaSopenharmony_ci "Event tag <<%s>> should not be same as %s <<%s>>.", 1825f9996aaSopenharmony_ci _DEPRECATED_EVENT_DESC_NAME : 1835f9996aaSopenharmony_ci "Event desc <<%s>> should not be same as event <<%s>> and "\ 1845f9996aaSopenharmony_ci "should be more detailed.", 1855f9996aaSopenharmony_ci _DEPRECATED_PARAM_DESC_NAME : 1865f9996aaSopenharmony_ci "Event param desc <<%s>> should not be same as event <<%s>> "\ 1875f9996aaSopenharmony_ci "param <<%s>> and should be more detailed.", 1885f9996aaSopenharmony_ci _INVALID_DOMAIN_DEF : 1895f9996aaSopenharmony_ci "The definition type of the domain must be string.", 1905f9996aaSopenharmony_ci _INVALID_EVENT_DEF : 1915f9996aaSopenharmony_ci "The definition type of the event <<%s>> must be dictionary.", 1925f9996aaSopenharmony_ci _INVALID_EVENT_BASE_DEF : 1935f9996aaSopenharmony_ci "The definition type of the event <<%s>> __BASE must be dictionary.", 1945f9996aaSopenharmony_ci _INVALID_EVENT_TYPE_DEF : 1955f9996aaSopenharmony_ci "The definition type of the event <<%s>> type must be string.", 1965f9996aaSopenharmony_ci _INVALID_EVENT_LEVEL_DEF : 1975f9996aaSopenharmony_ci "The definition type of the event <<%s>> level must be string.", 1985f9996aaSopenharmony_ci _INVALID_EVENT_DESC_DEF : 1995f9996aaSopenharmony_ci "The definition type of the event <<%s>> desc must be string.", 2005f9996aaSopenharmony_ci _INVALID_EVENT_TAG_DEF : 2015f9996aaSopenharmony_ci "The definition type of the event <<%s>> tag must be string.", 2025f9996aaSopenharmony_ci _INVALID_EVENT_PRESERVE_DEF : 2035f9996aaSopenharmony_ci "The definition type of the event <<%s>> preserve must be bool.", 2045f9996aaSopenharmony_ci _INVALID_EVENT_PARAM_DEF : 2055f9996aaSopenharmony_ci "The definition type of the event <<%s>> param <<%s>> "\ 2065f9996aaSopenharmony_ci "must be dictionary.", 2075f9996aaSopenharmony_ci _INVALID_PARAM_TYPE_DEF : 2085f9996aaSopenharmony_ci "The definition type of the event <<%s>> param <<%s>> "\ 2095f9996aaSopenharmony_ci "type must be string.", 2105f9996aaSopenharmony_ci _INVALID_PARAM_ARRSIZE_DEF : 2115f9996aaSopenharmony_ci "The definition type of the event <<%s>> param <<%s>> "\ 2125f9996aaSopenharmony_ci "arrsize must be integer.", 2135f9996aaSopenharmony_ci _INVALID_PARAM_DESC_DEF : 2145f9996aaSopenharmony_ci "The definition type of the event <<%s>> param <<%s>> "\ 2155f9996aaSopenharmony_ci "desc must be string.", 2165f9996aaSopenharmony_ci _DUPLICATE_KEY_DEF : 2175f9996aaSopenharmony_ci "Duplicate key <<%s>> exists%s.", 2185f9996aaSopenharmony_ci} 2195f9996aaSopenharmony_ci 2205f9996aaSopenharmony_ci 2215f9996aaSopenharmony_ci_domain_dict = {} 2225f9996aaSopenharmony_ci_warning_dict = {} 2235f9996aaSopenharmony_ci_warning_file_path = "" 2245f9996aaSopenharmony_ci_yaml_file_path = "" 2255f9996aaSopenharmony_ci_warning_file = None 2265f9996aaSopenharmony_ci_hisysevent_parse_res = True 2275f9996aaSopenharmony_ci_deprecated_dict = {} 2285f9996aaSopenharmony_ci 2295f9996aaSopenharmony_ci 2305f9996aaSopenharmony_ciclass _UniqueKeySafeLoader(yaml.SafeLoader): 2315f9996aaSopenharmony_ci def construct_mapping(self, node, deep=False): 2325f9996aaSopenharmony_ci mapping = [] 2335f9996aaSopenharmony_ci for key_node, value_node in node.value: 2345f9996aaSopenharmony_ci key = self.construct_object(key_node, deep=deep) 2355f9996aaSopenharmony_ci if (key in mapping): 2365f9996aaSopenharmony_ci _build_warning_info(_DUPLICATE_KEY_DEF, 2375f9996aaSopenharmony_ci (key, key_node.start_mark)) 2385f9996aaSopenharmony_ci global _hisysevent_parse_res 2395f9996aaSopenharmony_ci _hisysevent_parse_res = False 2405f9996aaSopenharmony_ci continue 2415f9996aaSopenharmony_ci mapping.append(key) 2425f9996aaSopenharmony_ci return super().construct_mapping(node, deep) 2435f9996aaSopenharmony_ci 2445f9996aaSopenharmony_ci 2455f9996aaSopenharmony_cidef _build_header(info_dict: dict): 2465f9996aaSopenharmony_ci table_header = "HiSysEvent yaml file: <<%s>>" % _yaml_file_path 2475f9996aaSopenharmony_ci info_dict[_yaml_file_path] = [table_header] 2485f9996aaSopenharmony_ci table_boundary = "-".rjust(100, '-') 2495f9996aaSopenharmony_ci info_dict[_yaml_file_path].append(table_boundary) 2505f9996aaSopenharmony_ci table_title = "Failed Item".ljust(50) + "| " + "Failed Reason" 2515f9996aaSopenharmony_ci info_dict[_yaml_file_path].append(table_title) 2525f9996aaSopenharmony_ci info_dict[_yaml_file_path].append(table_boundary) 2535f9996aaSopenharmony_ci 2545f9996aaSopenharmony_ci 2555f9996aaSopenharmony_cidef _build_warning_header(): 2565f9996aaSopenharmony_ci global _warning_dict 2575f9996aaSopenharmony_ci _build_header(_warning_dict) 2585f9996aaSopenharmony_ci 2595f9996aaSopenharmony_ci 2605f9996aaSopenharmony_cidef _build_deprecated_header(): 2615f9996aaSopenharmony_ci global _deprecated_dict 2625f9996aaSopenharmony_ci _build_header(_deprecated_dict) 2635f9996aaSopenharmony_ci 2645f9996aaSopenharmony_ci 2655f9996aaSopenharmony_cidef _build_warning_info(item, values): 2665f9996aaSopenharmony_ci detail = _WARNING_MAP[item] % values 2675f9996aaSopenharmony_ci content = item.ljust(50) + "| " + detail 2685f9996aaSopenharmony_ci global _warning_dict 2695f9996aaSopenharmony_ci _warning_dict[_yaml_file_path].append(content) 2705f9996aaSopenharmony_ci 2715f9996aaSopenharmony_ci 2725f9996aaSopenharmony_ci# Current set to warning, subsequent set to error. 2735f9996aaSopenharmony_cidef _build_deprecated_info(item, values): 2745f9996aaSopenharmony_ci _build_deprecated_header() 2755f9996aaSopenharmony_ci detail = _WARNING_MAP[item] % values 2765f9996aaSopenharmony_ci content = item.ljust(50) + "| " + detail 2775f9996aaSopenharmony_ci global _deprecated_dict 2785f9996aaSopenharmony_ci _deprecated_dict[_yaml_file_path].append(content) 2795f9996aaSopenharmony_ci 2805f9996aaSopenharmony_ci 2815f9996aaSopenharmony_cidef _open_warning_file(output_path: str): 2825f9996aaSopenharmony_ci global _warning_file_path 2835f9996aaSopenharmony_ci _warning_file_path = os.path.join(output_path, 'hisysevent_warning.txt') 2845f9996aaSopenharmony_ci global _warning_file 2855f9996aaSopenharmony_ci _warning_file = open(_warning_file_path, 'w+') 2865f9996aaSopenharmony_ci 2875f9996aaSopenharmony_ci 2885f9996aaSopenharmony_cidef _close_warning_file(): 2895f9996aaSopenharmony_ci if not _warning_file: 2905f9996aaSopenharmony_ci _warning_file.close() 2915f9996aaSopenharmony_ci 2925f9996aaSopenharmony_ci 2935f9996aaSopenharmony_cidef _output_warning(): 2945f9996aaSopenharmony_ci for warning_list in _warning_dict.values(): 2955f9996aaSopenharmony_ci if len(warning_list) > 4 or len(warning_list) == 1: 2965f9996aaSopenharmony_ci warning_list.append("") 2975f9996aaSopenharmony_ci for content in warning_list: 2985f9996aaSopenharmony_ci print(content) 2995f9996aaSopenharmony_ci print(content, file=_warning_file) 3005f9996aaSopenharmony_ci 3015f9996aaSopenharmony_ci 3025f9996aaSopenharmony_cidef _output_deprecated(output_path: str): 3035f9996aaSopenharmony_ci deprecated_file = open(os.path.join(output_path, 'hisysevent_deprecated.txt'), 'w+') 3045f9996aaSopenharmony_ci for deprecated_list in _deprecated_dict.values(): 3055f9996aaSopenharmony_ci deprecated_list.append("") 3065f9996aaSopenharmony_ci for content in deprecated_list: 3075f9996aaSopenharmony_ci print(content, file=deprecated_file) 3085f9996aaSopenharmony_ci if not deprecated_file: 3095f9996aaSopenharmony_ci deprecated_file.close() 3105f9996aaSopenharmony_ci 3115f9996aaSopenharmony_ci 3125f9996aaSopenharmony_cidef _exit_sys(): 3135f9996aaSopenharmony_ci print("Failed to parse the yaml file. For details about the error "\ 3145f9996aaSopenharmony_ci "information, see file %s." % (_warning_file_path)) 3155f9996aaSopenharmony_ci _output_warning() 3165f9996aaSopenharmony_ci _close_warning_file() 3175f9996aaSopenharmony_ci sys.exit(1) 3185f9996aaSopenharmony_ci 3195f9996aaSopenharmony_ci 3205f9996aaSopenharmony_cidef _is_valid_length(content: str, len_min: int, len_max: int) -> bool: 3215f9996aaSopenharmony_ci return len(content) >= len_min and len(content) <= len_max 3225f9996aaSopenharmony_ci 3235f9996aaSopenharmony_ci 3245f9996aaSopenharmony_cidef _is_valid_header(content: str) -> bool: 3255f9996aaSopenharmony_ci return len(content) == 0 or (content[0] >= 'A' and content[0] <= 'Z') 3265f9996aaSopenharmony_ci 3275f9996aaSopenharmony_ci 3285f9996aaSopenharmony_cidef _is_invalid_char(ch) -> bool: 3295f9996aaSopenharmony_ci return (ch >= 'A' and ch <= 'Z') or (ch >= '0' and ch <= '9') or ch == '_' 3305f9996aaSopenharmony_ci 3315f9996aaSopenharmony_ci 3325f9996aaSopenharmony_cidef _check_invalid_char(content: str): 3335f9996aaSopenharmony_ci for ch in iter(content): 3345f9996aaSopenharmony_ci if not _is_invalid_char(ch): 3355f9996aaSopenharmony_ci return ch 3365f9996aaSopenharmony_ci return None 3375f9996aaSopenharmony_ci 3385f9996aaSopenharmony_ci 3395f9996aaSopenharmony_cidef _check_domain_duplicate(domain: str) -> bool: 3405f9996aaSopenharmony_ci if domain in _domain_dict: 3415f9996aaSopenharmony_ci _build_warning_info(_DUPLICATE_DOMAIN, (domain, _domain_dict[domain])) 3425f9996aaSopenharmony_ci return False 3435f9996aaSopenharmony_ci else: 3445f9996aaSopenharmony_ci _domain_dict[domain] = _yaml_file_path 3455f9996aaSopenharmony_ci return True 3465f9996aaSopenharmony_ci 3475f9996aaSopenharmony_ci 3485f9996aaSopenharmony_cidef _check_event_domain(yaml_info: dict) -> bool: 3495f9996aaSopenharmony_ci if not "domain" in yaml_info: 3505f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_NUMBER, ()) 3515f9996aaSopenharmony_ci return False 3525f9996aaSopenharmony_ci if not isinstance(yaml_info["domain"], str): 3535f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_DEF, ()) 3545f9996aaSopenharmony_ci return False 3555f9996aaSopenharmony_ci domain = yaml_info["domain"] 3565f9996aaSopenharmony_ci check_res = True 3575f9996aaSopenharmony_ci if not _is_valid_length(domain, 1, 16): 3585f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_LENGTH, (domain, len(domain))) 3595f9996aaSopenharmony_ci check_res = False 3605f9996aaSopenharmony_ci if not _is_valid_header(domain): 3615f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_CHAR_HEAD, (domain, domain[0])) 3625f9996aaSopenharmony_ci check_res = False 3635f9996aaSopenharmony_ci invalid_ch = _check_invalid_char(domain) 3645f9996aaSopenharmony_ci if invalid_ch: 3655f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_CHAR, (domain, invalid_ch)) 3665f9996aaSopenharmony_ci check_res = False 3675f9996aaSopenharmony_ci if not _check_domain_duplicate(domain): 3685f9996aaSopenharmony_ci check_res = False 3695f9996aaSopenharmony_ci return check_res 3705f9996aaSopenharmony_ci 3715f9996aaSopenharmony_ci 3725f9996aaSopenharmony_cidef _check_yaml_format(yaml_info) -> bool: 3735f9996aaSopenharmony_ci if not yaml_info: 3745f9996aaSopenharmony_ci _build_warning_info(_INVALID_YAML, ("The yaml file is empty")) 3755f9996aaSopenharmony_ci return False 3765f9996aaSopenharmony_ci if not isinstance(yaml_info, dict): 3775f9996aaSopenharmony_ci _build_warning_info(_INVALID_YAML, 3785f9996aaSopenharmony_ci ("The content of yaml file is invalid")) 3795f9996aaSopenharmony_ci return False 3805f9996aaSopenharmony_ci return True 3815f9996aaSopenharmony_ci 3825f9996aaSopenharmony_ci 3835f9996aaSopenharmony_cidef _check_event_name(domain: str, event_name: str) -> bool: 3845f9996aaSopenharmony_ci check_res = True 3855f9996aaSopenharmony_ci if not _is_valid_length(event_name, 1, 32): 3865f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_LENGTH, 3875f9996aaSopenharmony_ci (event_name, len(event_name))) 3885f9996aaSopenharmony_ci check_res = False 3895f9996aaSopenharmony_ci if len(domain) > 0 and event_name.startswith(domain): 3905f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_EVENT_NAME_PREFIX, 3915f9996aaSopenharmony_ci (event_name, domain)) 3925f9996aaSopenharmony_ci if not _is_valid_header(event_name): 3935f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_CHAR_HEAD, 3945f9996aaSopenharmony_ci (event_name, event_name[0])) 3955f9996aaSopenharmony_ci check_res = False 3965f9996aaSopenharmony_ci invalid_ch = _check_invalid_char(event_name) 3975f9996aaSopenharmony_ci if invalid_ch: 3985f9996aaSopenharmony_ci _build_warning_info(_INVALID_DOMAIN_CHAR, (event_name, invalid_ch)) 3995f9996aaSopenharmony_ci check_res = False 4005f9996aaSopenharmony_ci return check_res 4015f9996aaSopenharmony_ci 4025f9996aaSopenharmony_ci 4035f9996aaSopenharmony_cidef _check_event_type(event_name: str, event_base: dict) -> bool: 4045f9996aaSopenharmony_ci if not "type" in event_base: 4055f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_TYPE, (event_name)) 4065f9996aaSopenharmony_ci return False 4075f9996aaSopenharmony_ci else: 4085f9996aaSopenharmony_ci if not isinstance(event_base["type"], str): 4095f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TYPE_DEF, event_name) 4105f9996aaSopenharmony_ci return False 4115f9996aaSopenharmony_ci type_list = ["FAULT", "STATISTIC", "SECURITY", "BEHAVIOR"] 4125f9996aaSopenharmony_ci if not event_base["type"] in type_list: 4135f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TYPE, 4145f9996aaSopenharmony_ci (event_name, event_base["type"])) 4155f9996aaSopenharmony_ci return False 4165f9996aaSopenharmony_ci return True 4175f9996aaSopenharmony_ci 4185f9996aaSopenharmony_ci 4195f9996aaSopenharmony_cidef _check_event_level(event_name: str, event_base: dict) -> bool: 4205f9996aaSopenharmony_ci if not "level" in event_base: 4215f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_LEVEL, (event_name)) 4225f9996aaSopenharmony_ci return False 4235f9996aaSopenharmony_ci else: 4245f9996aaSopenharmony_ci if not isinstance(event_base["level"], str): 4255f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_LEVEL_DEF, event_name) 4265f9996aaSopenharmony_ci return False 4275f9996aaSopenharmony_ci level_list = ["CRITICAL", "MINOR"] 4285f9996aaSopenharmony_ci if not event_base["level"] in level_list: 4295f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_LEVEL, 4305f9996aaSopenharmony_ci (event_name, event_base["level"])) 4315f9996aaSopenharmony_ci return False 4325f9996aaSopenharmony_ci return True 4335f9996aaSopenharmony_ci 4345f9996aaSopenharmony_ci 4355f9996aaSopenharmony_cidef _check_event_desc(event_name: str, event_base: dict) -> bool: 4365f9996aaSopenharmony_ci if not "desc" in event_base: 4375f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_DESC, (event_name)) 4385f9996aaSopenharmony_ci return False 4395f9996aaSopenharmony_ci else: 4405f9996aaSopenharmony_ci event_desc = event_base["desc"] 4415f9996aaSopenharmony_ci if not isinstance(event_desc, str): 4425f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_DESC_DEF, event_name) 4435f9996aaSopenharmony_ci return False 4445f9996aaSopenharmony_ci check_res = True 4455f9996aaSopenharmony_ci if event_desc.lower() == event_name.lower(): 4465f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_EVENT_DESC_NAME, 4475f9996aaSopenharmony_ci (event_desc, event_name)) 4485f9996aaSopenharmony_ci if not _is_valid_length(event_desc, 3, 128): 4495f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_DESC_LENGTH, 4505f9996aaSopenharmony_ci (event_name, event_desc, len(event_desc))) 4515f9996aaSopenharmony_ci check_res = False 4525f9996aaSopenharmony_ci return check_res 4535f9996aaSopenharmony_ci 4545f9996aaSopenharmony_ci 4555f9996aaSopenharmony_cidef _check_tag_char(event_tag: list): 4565f9996aaSopenharmony_ci for ch in iter(event_tag): 4575f9996aaSopenharmony_ci if not ch.isalnum(): 4585f9996aaSopenharmony_ci return ch 4595f9996aaSopenharmony_ci return None 4605f9996aaSopenharmony_ci 4615f9996aaSopenharmony_ci 4625f9996aaSopenharmony_cidef _check_tag_name(event_name: str, event_base: dict, tag_name: str) -> bool: 4635f9996aaSopenharmony_ci check_res = True 4645f9996aaSopenharmony_ci if tag_name.lower() == event_name.lower(): 4655f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_TAG_NAME, 4665f9996aaSopenharmony_ci (tag_name, "event", event_name)) 4675f9996aaSopenharmony_ci if "type" in event_base and tag_name.lower() == event_base["type"].lower(): 4685f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_TAG_NAME, 4695f9996aaSopenharmony_ci (tag_name, "event type", event_base["type"])) 4705f9996aaSopenharmony_ci if not _is_valid_length(tag_name, 1, 16): 4715f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TAG_LEN, 4725f9996aaSopenharmony_ci (event_name, tag_name, len(tag_name))) 4735f9996aaSopenharmony_ci check_res = False 4745f9996aaSopenharmony_ci invalid_ch = _check_tag_char(tag_name) 4755f9996aaSopenharmony_ci if invalid_ch: 4765f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TAG_CHAR, 4775f9996aaSopenharmony_ci (event_name, tag_name, invalid_ch)) 4785f9996aaSopenharmony_ci check_res = False 4795f9996aaSopenharmony_ci return check_res 4805f9996aaSopenharmony_ci 4815f9996aaSopenharmony_ci 4825f9996aaSopenharmony_cidef _get_duplicate_tag(tag_list: list): 4835f9996aaSopenharmony_ci tag_dict = dict(Counter(tag_list)) 4845f9996aaSopenharmony_ci for key, value in tag_dict.items(): 4855f9996aaSopenharmony_ci if value > 1: 4865f9996aaSopenharmony_ci return key 4875f9996aaSopenharmony_ci return None 4885f9996aaSopenharmony_ci 4895f9996aaSopenharmony_ci 4905f9996aaSopenharmony_cidef _check_event_tag(event_name: str, event_base: dict) -> bool: 4915f9996aaSopenharmony_ci if not "tag" in event_base: 4925f9996aaSopenharmony_ci return True 4935f9996aaSopenharmony_ci event_tag = event_base["tag"] 4945f9996aaSopenharmony_ci if not isinstance(event_tag, str): 4955f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TAG_DEF, event_name) 4965f9996aaSopenharmony_ci return False 4975f9996aaSopenharmony_ci tag_list = event_tag.split() 4985f9996aaSopenharmony_ci if not _is_valid_length(tag_list, 1, 5): 4995f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_TAG_NUM, 5005f9996aaSopenharmony_ci (event_name, event_tag, len(tag_list))) 5015f9996aaSopenharmony_ci return False 5025f9996aaSopenharmony_ci check_res = True 5035f9996aaSopenharmony_ci for each_tag in tag_list: 5045f9996aaSopenharmony_ci if not _check_tag_name(event_name, event_base, each_tag): 5055f9996aaSopenharmony_ci check_res = False 5065f9996aaSopenharmony_ci dup_tag = _get_duplicate_tag(tag_list) 5075f9996aaSopenharmony_ci if dup_tag: 5085f9996aaSopenharmony_ci _build_warning_info(_DUPLICATE_EVENT_TAG, (dup_tag, event_name)) 5095f9996aaSopenharmony_ci check_res = False 5105f9996aaSopenharmony_ci return check_res 5115f9996aaSopenharmony_ci 5125f9996aaSopenharmony_ci 5135f9996aaSopenharmony_cidef _check_event_preserve(event_name: str, event_base: dict) -> bool: 5145f9996aaSopenharmony_ci if not "preserve" in event_base: 5155f9996aaSopenharmony_ci return True 5165f9996aaSopenharmony_ci event_preserve = event_base["preserve"] 5175f9996aaSopenharmony_ci if not isinstance(event_preserve, bool): 5185f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PRESERVE_DEF, event_name) 5195f9996aaSopenharmony_ci return False 5205f9996aaSopenharmony_ci return True 5215f9996aaSopenharmony_ci 5225f9996aaSopenharmony_ci 5235f9996aaSopenharmony_cidef _check_base_key(event_name: str, event_base: dict) -> bool: 5245f9996aaSopenharmony_ci key_list = ["type", "level", "tag", "desc", "preserve"] 5255f9996aaSopenharmony_ci for base_key in event_base.keys(): 5265f9996aaSopenharmony_ci if not base_key in key_list: 5275f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_BASE_KEY, 5285f9996aaSopenharmony_ci (event_name, base_key)) 5295f9996aaSopenharmony_ci return False 5305f9996aaSopenharmony_ci return True 5315f9996aaSopenharmony_ci 5325f9996aaSopenharmony_ci 5335f9996aaSopenharmony_cidef _check_event_base(event_name: str, event_def: str) -> bool: 5345f9996aaSopenharmony_ci if not "__BASE" in event_def: 5355f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_BASE, (event_name)) 5365f9996aaSopenharmony_ci return False 5375f9996aaSopenharmony_ci event_base = event_def["__BASE"] 5385f9996aaSopenharmony_ci if not isinstance(event_base, dict): 5395f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_BASE_DEF, (event_name)) 5405f9996aaSopenharmony_ci return False 5415f9996aaSopenharmony_ci check_res = True 5425f9996aaSopenharmony_ci if not _check_event_type(event_name, event_base): 5435f9996aaSopenharmony_ci check_res = False 5445f9996aaSopenharmony_ci if not _check_event_level(event_name, event_base): 5455f9996aaSopenharmony_ci check_res = False 5465f9996aaSopenharmony_ci if not _check_event_desc(event_name, event_base): 5475f9996aaSopenharmony_ci check_res = False 5485f9996aaSopenharmony_ci if not _check_event_tag(event_name, event_base): 5495f9996aaSopenharmony_ci check_res = False 5505f9996aaSopenharmony_ci if not _check_event_preserve(event_name, event_base): 5515f9996aaSopenharmony_ci check_res = False 5525f9996aaSopenharmony_ci if not _check_base_key(event_name, event_base): 5535f9996aaSopenharmony_ci check_res = False 5545f9996aaSopenharmony_ci return check_res 5555f9996aaSopenharmony_ci 5565f9996aaSopenharmony_ci 5575f9996aaSopenharmony_cidef _check_param_name(event_name: str, name: str) -> bool: 5585f9996aaSopenharmony_ci check_res = True 5595f9996aaSopenharmony_ci if not _is_valid_length(name, 1, 32): 5605f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_LEN, 5615f9996aaSopenharmony_ci (event_name, name, len(name))) 5625f9996aaSopenharmony_ci check_res = False 5635f9996aaSopenharmony_ci if len(event_name) > 0 and name.startswith(event_name): 5645f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_PARAM_NAME_PREFIX, (name, event_name)) 5655f9996aaSopenharmony_ci if not _is_valid_header(name): 5665f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_CHAR_HEAD, 5675f9996aaSopenharmony_ci (event_name, name, name[0])) 5685f9996aaSopenharmony_ci check_res = False 5695f9996aaSopenharmony_ci invalid_ch = _check_invalid_char(name) 5705f9996aaSopenharmony_ci if invalid_ch: 5715f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_CHAR, 5725f9996aaSopenharmony_ci (event_name, name, invalid_ch)) 5735f9996aaSopenharmony_ci check_res = False 5745f9996aaSopenharmony_ci return check_res 5755f9996aaSopenharmony_ci 5765f9996aaSopenharmony_ci 5775f9996aaSopenharmony_cidef _check_param_type(event_name: str, param_name: str, param_info: dict) -> bool: 5785f9996aaSopenharmony_ci if not "type" in param_info: 5795f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_PARAM_TYPE, 5805f9996aaSopenharmony_ci (event_name, param_name)) 5815f9996aaSopenharmony_ci return False 5825f9996aaSopenharmony_ci else: 5835f9996aaSopenharmony_ci if not isinstance(param_info["type"], str): 5845f9996aaSopenharmony_ci _build_warning_info(_INVALID_PARAM_TYPE_DEF, 5855f9996aaSopenharmony_ci (event_name, param_name)) 5865f9996aaSopenharmony_ci return False 5875f9996aaSopenharmony_ci type_list = ["BOOL", "INT8", "UINT8", "INT16", "UINT16", "INT32", 5885f9996aaSopenharmony_ci "UINT32", "INT64", "UINT64", "FLOAT", "DOUBLE", "STRING"] 5895f9996aaSopenharmony_ci if not param_info["type"] in type_list: 5905f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_TYPE, 5915f9996aaSopenharmony_ci (event_name, param_name, param_info["type"])) 5925f9996aaSopenharmony_ci return False 5935f9996aaSopenharmony_ci return True 5945f9996aaSopenharmony_ci 5955f9996aaSopenharmony_ci 5965f9996aaSopenharmony_cidef _check_param_arrsize(event_name: str, param_name: str, param_info: dict) -> bool: 5975f9996aaSopenharmony_ci if not "arrsize" in param_info: 5985f9996aaSopenharmony_ci return True 5995f9996aaSopenharmony_ci arrsize = param_info["arrsize"] 6005f9996aaSopenharmony_ci if not isinstance(arrsize, int): 6015f9996aaSopenharmony_ci _build_warning_info(_INVALID_PARAM_ARRSIZE_DEF, 6025f9996aaSopenharmony_ci (event_name, param_name)) 6035f9996aaSopenharmony_ci return False 6045f9996aaSopenharmony_ci if not (arrsize >= 1 and arrsize <= 100): 6055f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_ARRSIZE, 6065f9996aaSopenharmony_ci (event_name, param_name, arrsize)) 6075f9996aaSopenharmony_ci return False 6085f9996aaSopenharmony_ci return True 6095f9996aaSopenharmony_ci 6105f9996aaSopenharmony_ci 6115f9996aaSopenharmony_cidef _check_param_desc(event_name: str, param_name: str, param_info: dict) -> bool: 6125f9996aaSopenharmony_ci if not "desc" in param_info: 6135f9996aaSopenharmony_ci _build_warning_info(_MISSING_EVENT_PARAM_DESC, 6145f9996aaSopenharmony_ci (event_name, param_name)) 6155f9996aaSopenharmony_ci return False 6165f9996aaSopenharmony_ci else: 6175f9996aaSopenharmony_ci param_desc = param_info["desc"] 6185f9996aaSopenharmony_ci if not isinstance(param_desc, str): 6195f9996aaSopenharmony_ci _build_warning_info(_INVALID_PARAM_DESC_DEF, 6205f9996aaSopenharmony_ci (event_name, param_name)) 6215f9996aaSopenharmony_ci return False 6225f9996aaSopenharmony_ci check_res = True 6235f9996aaSopenharmony_ci if param_desc.lower() == param_name.lower(): 6245f9996aaSopenharmony_ci _build_deprecated_info(_DEPRECATED_PARAM_DESC_NAME, 6255f9996aaSopenharmony_ci (param_desc, event_name, param_name)) 6265f9996aaSopenharmony_ci if not _is_valid_length(param_desc, 3, 128): 6275f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_DESC_LEN, 6285f9996aaSopenharmony_ci (event_name, param_name, param_desc, len(param_desc))) 6295f9996aaSopenharmony_ci check_res = False 6305f9996aaSopenharmony_ci return check_res 6315f9996aaSopenharmony_ci 6325f9996aaSopenharmony_ci 6335f9996aaSopenharmony_cidef _check_param_key(event_name: str, param_name: str, param_info: dict) -> bool: 6345f9996aaSopenharmony_ci key_list = ["type", "arrsize", "desc"] 6355f9996aaSopenharmony_ci for key in param_info.keys(): 6365f9996aaSopenharmony_ci if not key in key_list: 6375f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_KEY, 6385f9996aaSopenharmony_ci (event_name, param_name, key)) 6395f9996aaSopenharmony_ci return False 6405f9996aaSopenharmony_ci return True 6415f9996aaSopenharmony_ci 6425f9996aaSopenharmony_ci 6435f9996aaSopenharmony_cidef _check_param_info(event_name: str, param_name: str, param_info: dict) -> bool: 6445f9996aaSopenharmony_ci check_res = True 6455f9996aaSopenharmony_ci if not _check_param_type(event_name, param_name, param_info): 6465f9996aaSopenharmony_ci check_res = False 6475f9996aaSopenharmony_ci if not _check_param_arrsize(event_name, param_name, param_info): 6485f9996aaSopenharmony_ci check_res = False 6495f9996aaSopenharmony_ci if not _check_param_desc(event_name, param_name, param_info): 6505f9996aaSopenharmony_ci check_res = False 6515f9996aaSopenharmony_ci if not _check_param_key(event_name, param_name, param_info): 6525f9996aaSopenharmony_ci check_res = False 6535f9996aaSopenharmony_ci return check_res 6545f9996aaSopenharmony_ci 6555f9996aaSopenharmony_ci 6565f9996aaSopenharmony_cidef _check_event_param(event_name: str, event_def: str) -> bool: 6575f9996aaSopenharmony_ci sub_num = (0, 1)["__BASE" in event_def] 6585f9996aaSopenharmony_ci check_res = True 6595f9996aaSopenharmony_ci if not _is_valid_length(event_def, 0 + sub_num, 128 + sub_num): 6605f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_NUM, 6615f9996aaSopenharmony_ci (event_name, (len(event_def) - sub_num))) 6625f9996aaSopenharmony_ci check_res = False 6635f9996aaSopenharmony_ci for param_name in event_def.keys(): 6645f9996aaSopenharmony_ci if param_name == "__BASE": 6655f9996aaSopenharmony_ci continue 6665f9996aaSopenharmony_ci if not _check_param_name(event_name, param_name): 6675f9996aaSopenharmony_ci check_res = False 6685f9996aaSopenharmony_ci param_info = event_def[param_name] 6695f9996aaSopenharmony_ci if not isinstance(param_info, dict): 6705f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_PARAM_DEF, 6715f9996aaSopenharmony_ci (event_name, param_name)) 6725f9996aaSopenharmony_ci check_res = False 6735f9996aaSopenharmony_ci continue 6745f9996aaSopenharmony_ci if not _check_param_info(event_name, param_name, param_info): 6755f9996aaSopenharmony_ci check_res = False 6765f9996aaSopenharmony_ci return check_res 6775f9996aaSopenharmony_ci 6785f9996aaSopenharmony_ci 6795f9996aaSopenharmony_cidef _check_event_def(event_name: str, event_def: str) -> bool: 6805f9996aaSopenharmony_ci check_res = True 6815f9996aaSopenharmony_ci if not _check_event_base(event_name, event_def): 6825f9996aaSopenharmony_ci check_res = False 6835f9996aaSopenharmony_ci if not _check_event_param(event_name, event_def): 6845f9996aaSopenharmony_ci check_res = False 6855f9996aaSopenharmony_ci return check_res 6865f9996aaSopenharmony_ci 6875f9996aaSopenharmony_ci 6885f9996aaSopenharmony_cidef _check_event_info(domain: str, event_info: list) -> bool: 6895f9996aaSopenharmony_ci event_name = event_info[0] 6905f9996aaSopenharmony_ci event_def = event_info[1] 6915f9996aaSopenharmony_ci check_res = True 6925f9996aaSopenharmony_ci if not isinstance(event_def, dict): 6935f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_DEF, (event_name)) 6945f9996aaSopenharmony_ci return False 6955f9996aaSopenharmony_ci if not _check_event_name(domain, event_name): 6965f9996aaSopenharmony_ci check_res = False 6975f9996aaSopenharmony_ci if not _check_event_def(event_name, event_def): 6985f9996aaSopenharmony_ci check_res = False 6995f9996aaSopenharmony_ci return check_res 7005f9996aaSopenharmony_ci 7015f9996aaSopenharmony_ci 7025f9996aaSopenharmony_cidef _check_events_info(domain: str, yaml_info: str) -> bool: 7035f9996aaSopenharmony_ci event_num = len(yaml_info) 7045f9996aaSopenharmony_ci if not (event_num >= 1 and event_num <= 4096): 7055f9996aaSopenharmony_ci _build_warning_info(_INVALID_EVENT_NUMBER, (event_num)) 7065f9996aaSopenharmony_ci return False 7075f9996aaSopenharmony_ci check_res = True 7085f9996aaSopenharmony_ci for event_info in yaml_info.items(): 7095f9996aaSopenharmony_ci if not _check_event_info(domain, event_info): 7105f9996aaSopenharmony_ci check_res = False 7115f9996aaSopenharmony_ci return check_res 7125f9996aaSopenharmony_ci 7135f9996aaSopenharmony_ci 7145f9996aaSopenharmony_cidef merge_hisysevent_config(yaml_list: str, output_path: str) -> str: 7155f9996aaSopenharmony_ci if (len(output_path) == 0): 7165f9996aaSopenharmony_ci present_path = os.path.dirname(os.path.abspath(__file__)) 7175f9996aaSopenharmony_ci output_path = present_path 7185f9996aaSopenharmony_ci if (len(yaml_list) == 0): 7195f9996aaSopenharmony_ci _build_warning_info(_EMPTY_YAML, ()) 7205f9996aaSopenharmony_ci _exit_sys() 7215f9996aaSopenharmony_ci if not os.path.exists(output_path): 7225f9996aaSopenharmony_ci os.makedirs(output_path, exist_ok=True) 7235f9996aaSopenharmony_ci _open_warning_file(output_path) 7245f9996aaSopenharmony_ci 7255f9996aaSopenharmony_ci yaml_info_dict = {} 7265f9996aaSopenharmony_ci global _hisysevent_parse_res 7275f9996aaSopenharmony_ci for yaml_path in yaml_list: 7285f9996aaSopenharmony_ci global _yaml_file_path 7295f9996aaSopenharmony_ci _yaml_file_path = yaml_path.replace("../", "") 7305f9996aaSopenharmony_ci _build_warning_header() 7315f9996aaSopenharmony_ci with os.fdopen(os.open(yaml_path, os.O_RDWR | os.O_CREAT, stat.S_IWUSR | stat.S_IRUSR), 7325f9996aaSopenharmony_ci 'r', encoding='utf-8') as yaml_file: 7335f9996aaSopenharmony_ci yaml_info = yaml.load(yaml_file, Loader=_UniqueKeySafeLoader) 7345f9996aaSopenharmony_ci if not _check_yaml_format(yaml_info): 7355f9996aaSopenharmony_ci _hisysevent_parse_res = False 7365f9996aaSopenharmony_ci continue 7375f9996aaSopenharmony_ci if not _check_event_domain(yaml_info): 7385f9996aaSopenharmony_ci _hisysevent_parse_res = False 7395f9996aaSopenharmony_ci continue 7405f9996aaSopenharmony_ci domain = yaml_info["domain"] 7415f9996aaSopenharmony_ci del yaml_info["domain"] 7425f9996aaSopenharmony_ci if not _check_events_info(domain, yaml_info): 7435f9996aaSopenharmony_ci _hisysevent_parse_res = False 7445f9996aaSopenharmony_ci continue 7455f9996aaSopenharmony_ci yaml_info_dict[domain] = yaml_info 7465f9996aaSopenharmony_ci _output_deprecated(output_path) 7475f9996aaSopenharmony_ci if not _hisysevent_parse_res: 7485f9996aaSopenharmony_ci _exit_sys() 7495f9996aaSopenharmony_ci 7505f9996aaSopenharmony_ci hisysevent_def_file = os.path.join(output_path, 'hisysevent.def') 7515f9996aaSopenharmony_ci with open(hisysevent_def_file, 'w') as j: 7525f9996aaSopenharmony_ci json.dump(yaml_info_dict, j, indent=4) 7535f9996aaSopenharmony_ci print("The hisysevent.def {} is generated successfully." 7545f9996aaSopenharmony_ci .format(hisysevent_def_file)) 7555f9996aaSopenharmony_ci _close_warning_file() 7565f9996aaSopenharmony_ci 7575f9996aaSopenharmony_ci # zip def file 7585f9996aaSopenharmony_ci hisysevent_def_zip_file = os.path.join(output_path, 'hisysevent.zip') 7595f9996aaSopenharmony_ci def_zip_file = zipfile.ZipFile(hisysevent_def_zip_file, "w", zipfile.ZIP_DEFLATED) 7605f9996aaSopenharmony_ci def_zip_file.write(hisysevent_def_file, arcname=os.path.basename(hisysevent_def_file)) 7615f9996aaSopenharmony_ci def_zip_file.close() 7625f9996aaSopenharmony_ci # remove def file 7635f9996aaSopenharmony_ci os.remove(hisysevent_def_file) 7645f9996aaSopenharmony_ci 7655f9996aaSopenharmony_ci return hisysevent_def_zip_file 7665f9996aaSopenharmony_ci 7675f9996aaSopenharmony_ci 7685f9996aaSopenharmony_cidef main(argv) -> int: 7695f9996aaSopenharmony_ci parser = argparse.ArgumentParser(description='yaml list') 7705f9996aaSopenharmony_ci parser.add_argument("--yaml-list", nargs='+', required=True) 7715f9996aaSopenharmony_ci parser.add_argument("--def-path", required=True) 7725f9996aaSopenharmony_ci args = parser.parse_args(argv) 7735f9996aaSopenharmony_ci hisysevent_def_file = merge_hisysevent_config(args.yaml_list, 7745f9996aaSopenharmony_ci args.def_path) 7755f9996aaSopenharmony_ci print(hisysevent_def_file) 7765f9996aaSopenharmony_ci return 0 7775f9996aaSopenharmony_ci 7785f9996aaSopenharmony_ci 7795f9996aaSopenharmony_ciif __name__ == '__main__': 7805f9996aaSopenharmony_ci sys.exit(main(sys.argv[1:])) 781