bd8857357b
The checkEventYaml script verifies if all contents are properly populated for the events.yaml file. This change ensures that check is done by zuul, rather than during the build. yaml.load after version 5.1 requires a Loader argument. The yaml.load in fm-doc are now updated to use safe_load intead Test Plan: PASS: tox -e linters PASS: remove 'context' field from an alarm and observe that tox -e linters reports a failure. PASS: build-pkgs -p fm-doc Story: 2010531 Task: 47549 Signed-off-by: Al Bailey <al.bailey@windriver.com> Change-Id: I369ffe4c74fcaf5fe4a916822fed18a78ead8ff8
116 lines
3.1 KiB
Python
116 lines
3.1 KiB
Python
#!/usr/bin/python
|
|
# Copyright (c) 2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
import sys
|
|
import os
|
|
|
|
import yaml
|
|
import collections
|
|
|
|
import constants as fm_constants
|
|
|
|
FM_ALARM_H = "fmAlarm.h"
|
|
|
|
|
|
def get_events_alarm_list(events):
|
|
for alarm_id in list(events):
|
|
if isinstance(alarm_id, float):
|
|
formatted_alarm_id = "{:.3f}".format(alarm_id) # force 3 digits after the point, to include trailing zero's (ex.: 200.010)
|
|
events[formatted_alarm_id] = events.pop(alarm_id)
|
|
|
|
events = collections.OrderedDict(sorted(events.items()))
|
|
|
|
events_alarm_list = []
|
|
|
|
for alarm_id in events:
|
|
if events.get(alarm_id).get('Type') == "Alarm":
|
|
events_alarm_list.append(str(alarm_id))
|
|
|
|
return events_alarm_list
|
|
|
|
|
|
def get_constants_alarms():
|
|
fm_constants_raw_dict = fm_constants.__dict__
|
|
|
|
fm_constants_alarms_dict = {k: v for k, v in fm_constants_raw_dict.items() if 'FM_ALARM_ID' in k}
|
|
del fm_constants_alarms_dict['FM_ALARM_ID_INDEX'] # this is not an alarm
|
|
|
|
fm_constants_alarms = []
|
|
for alarm_constant_name in fm_constants_alarms_dict:
|
|
alarm_constant_full_name = 'fm_constants.' + alarm_constant_name
|
|
fm_constants_alarms.append(eval(alarm_constant_full_name))
|
|
|
|
return fm_constants_alarms
|
|
|
|
|
|
def get_fm_alarms():
|
|
|
|
fm_alarm_group_lines = []
|
|
fm_alarm_groups = {}
|
|
fm_alarms = []
|
|
|
|
with open(FM_ALARM_H) as f:
|
|
fm_alarms_file = f.readlines()
|
|
|
|
fm_alarm_group_lines = [k for k in fm_alarms_file if 'define ALARM_GROUP_' in k]
|
|
|
|
for line in fm_alarm_group_lines:
|
|
group_name = line.split()[1]
|
|
group_value = line.split()[2]
|
|
group_value = group_value[1:-1] # remove quotes
|
|
fm_alarm_groups[group_name] = group_value
|
|
|
|
fm_alarm_lines = [k for k in fm_alarms_file if 'FM_ALARM_ID' in k]
|
|
|
|
for line in fm_alarm_lines:
|
|
# alarm_name = line.split()[1]
|
|
group_name = line.split()[2]
|
|
group_name = group_name[1:]
|
|
alarm_right_digits_value = line.split()[3]
|
|
alarm_right_digits_value = alarm_right_digits_value[1:-2]
|
|
alarm_left_digits_value = fm_alarm_groups[group_name]
|
|
alarm_value = alarm_left_digits_value + alarm_right_digits_value
|
|
fm_alarms.append(alarm_value)
|
|
|
|
return fm_alarms
|
|
|
|
|
|
#
|
|
# Main
|
|
#
|
|
|
|
if len(sys.argv) == 1:
|
|
print("Missing file argument.\n")
|
|
exit(1)
|
|
|
|
if not os.path.isfile(sys.argv[1]):
|
|
print("File \'%s\' does not exist.\n" % (sys.argv[1]))
|
|
exit(1)
|
|
|
|
exitValue = 0
|
|
|
|
with open(sys.argv[1], 'r') as stream:
|
|
try:
|
|
events = yaml.safe_load(stream)
|
|
events_alarm_list = get_events_alarm_list(events)
|
|
|
|
except yaml.YAMLError as exc:
|
|
print(exc)
|
|
|
|
constants_alarms = get_constants_alarms()
|
|
for alarm_id in constants_alarms:
|
|
if alarm_id not in events_alarm_list:
|
|
print("\n ERROR: constants.py alarm \'%s\' must be defined in file events.yaml.\n" % (alarm_id))
|
|
exitValue = 1
|
|
|
|
fm_alarms = get_fm_alarms()
|
|
for alarm_id in fm_alarms:
|
|
if alarm_id not in events_alarm_list:
|
|
print("\n ERROR: fmAlarm.h alarm \'%s\' must be defined in file events.yaml.\n" % (alarm_id))
|
|
exitValue = 1
|
|
|
|
exit(exitValue)
|