7bdf6fd47c
Enable test for pep8 and use flake8 as check tool. Story: 2003310 Task: 24446 Change-Id: Idf5cbde46dc1a2a579587438b83f2dcb7b9352bb Signed-off-by: chenyan <yan.chen@intel.com>
200 lines
6.4 KiB
Python
Executable File
200 lines
6.4 KiB
Python
Executable File
#
|
|
# Copyright (c) 2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
# Python3 compatibility
|
|
from __future__ import print_function
|
|
|
|
import sys
|
|
import os
|
|
|
|
import yaml
|
|
import constants
|
|
|
|
# Record Format (for full description see events.yaml)
|
|
#
|
|
# 100.001:
|
|
# Type: Alarm
|
|
# Description: "Degrade: <hostname> is experiencing an intermittent 'Management Network' communication failure."
|
|
# Entity_Instance_ID: host=<hostname>
|
|
# Severity: critical
|
|
# Proposed_Repair_Action: "Check Host's board management configuration and connectivity."
|
|
# Maintenance_Action: auto recover
|
|
# Inhibit_Alarms: True
|
|
# Alarm_Type: operational-violation
|
|
# Probable_Cause: timing-problem
|
|
# Service_Affecting: False
|
|
# Suppression: True
|
|
# Management_Affecting_Severity: warning
|
|
# Degrade_Affecting_Severity: none
|
|
#
|
|
|
|
type_FieldName = 'Type'
|
|
type_FieldValue_Alarm = 'Alarm'
|
|
type_FieldValues = [type_FieldValue_Alarm, 'Log']
|
|
|
|
description_FieldName = 'Description'
|
|
description_FieldValues = [] # arbitrary string
|
|
|
|
entityInstanceId_FieldName = 'Entity_Instance_ID'
|
|
entityInstanceId_FieldValues = [] # arbitrary string
|
|
|
|
severity_FieldName = 'Severity'
|
|
severity_FieldValues = constants.ALARM_SEVERITY
|
|
|
|
proposedRepairAction_FieldName = 'Proposed_Repair_Action'
|
|
proposedRepairAction_FieldValues = [] # arbitrary string
|
|
|
|
maintenanceAction_FieldName = 'Maintenance_Action'
|
|
maintenanceAction_FieldValues = [] # arbitrary string
|
|
|
|
inhibitAlarms_FieldName = 'Inhibit_Alarms'
|
|
inhibitAlarms_FieldValues = [True, False]
|
|
|
|
alarmType_FieldName = 'Alarm_Type'
|
|
alarmType_FieldValues = constants.ALARM_TYPE
|
|
|
|
probableCause_FieldName = 'Probable_Cause'
|
|
probableCause_FieldValues = constants.ALARM_PROBABLE_CAUSE
|
|
|
|
serviceAffecting_FieldName = 'Service_Affecting'
|
|
serviceAffecting_FieldValues = [True, False]
|
|
|
|
suppression_FieldName = 'Suppression'
|
|
suppression_FieldValues = [True, False]
|
|
|
|
managementAffectingSeverity_FieldName = 'Management_Affecting_Severity'
|
|
managementAffectingSeverity_FieldValues = constants.ALARM_SEVERITY.append('none')
|
|
|
|
degradeAffecting_FieldName = 'Degrade_Affecting_Severity'
|
|
degradeAffecting_FieldValues = constants.ALARM_SEVERITY.append('none')
|
|
|
|
alarmFields = {
|
|
type_FieldName: type_FieldValues,
|
|
description_FieldName: description_FieldValues,
|
|
entityInstanceId_FieldName: entityInstanceId_FieldValues,
|
|
severity_FieldName: severity_FieldValues,
|
|
proposedRepairAction_FieldName: proposedRepairAction_FieldValues,
|
|
maintenanceAction_FieldName: maintenanceAction_FieldValues,
|
|
inhibitAlarms_FieldName: inhibitAlarms_FieldValues,
|
|
alarmType_FieldName: alarmType_FieldValues,
|
|
probableCause_FieldName: probableCause_FieldValues,
|
|
serviceAffecting_FieldName: serviceAffecting_FieldValues,
|
|
suppression_FieldName: suppression_FieldValues,
|
|
managementAffectingSeverity_FieldName: managementAffectingSeverity_FieldValues,
|
|
degradeAffecting_FieldName: degradeAffecting_FieldValues
|
|
}
|
|
|
|
logFields = {
|
|
type_FieldName: type_FieldValues,
|
|
description_FieldName: description_FieldValues,
|
|
entityInstanceId_FieldName: entityInstanceId_FieldValues,
|
|
severity_FieldName: severity_FieldValues,
|
|
alarmType_FieldName: alarmType_FieldValues,
|
|
probableCause_FieldName: probableCause_FieldValues,
|
|
serviceAffecting_FieldName: serviceAffecting_FieldValues
|
|
}
|
|
|
|
|
|
def checkField(fieldKey, fieldValues, key, event):
|
|
if fieldKey not in event:
|
|
print("\n ERROR: %s missing \'%s\' field." % (key, fieldKey))
|
|
return False
|
|
# print("START: %s :END" % event[fieldKey])
|
|
|
|
if type(event[fieldKey]) is str:
|
|
if not fieldValues:
|
|
return True
|
|
if event[fieldKey] in fieldValues:
|
|
return True
|
|
else:
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' field value." % (event[fieldKey], fieldKey))
|
|
print(" Valid values are:", fieldValues)
|
|
return False
|
|
|
|
if type(event[fieldKey]) is list:
|
|
if not fieldValues:
|
|
return True
|
|
for listvalue in event[fieldKey]:
|
|
if listvalue not in fieldValues:
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' field value." % (listvalue, fieldKey))
|
|
print(" Valid values are:", fieldValues)
|
|
return False
|
|
|
|
if type(event[fieldKey]) is dict:
|
|
for dictKey, dictValue in event[fieldKey].items():
|
|
if dictKey not in severity_FieldValues:
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' index value." % (dictKey, fieldKey))
|
|
print(" Valid index values are:", severity_FieldValues)
|
|
return False
|
|
if fieldValues:
|
|
if dictValue not in fieldValues:
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' field value." % (dictValue, fieldKey))
|
|
print(" Valid values are:", fieldValues)
|
|
return False
|
|
return True
|
|
|
|
|
|
def checkTypeField(key, event):
|
|
if type_FieldName not in event:
|
|
print("\n ERROR: %s missing \'%s\' field." % (key, type_FieldName))
|
|
return False
|
|
if event[type_FieldName] in type_FieldValues:
|
|
return True
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' field value." % (event[type_FieldName], type_FieldName))
|
|
return False
|
|
|
|
|
|
def checkFields(key, event):
|
|
isOk = True
|
|
if not checkTypeField(key, event):
|
|
return False
|
|
isAlarm = (event[type_FieldName] == type_FieldValue_Alarm)
|
|
eventFields = alarmFields if isAlarm else logFields
|
|
|
|
for fieldKey, fieldValues in eventFields.items():
|
|
if not checkField(fieldKey, fieldValues, key, event):
|
|
isOk = False
|
|
|
|
for itemKey, itemValue in event.items():
|
|
if itemKey not in eventFields:
|
|
print("\n ERROR: \'%s\' is not a valid \'%s\' field." % (itemKey, ("Alarm" if isAlarm else "Log")))
|
|
isOk = False
|
|
|
|
return isOk
|
|
|
|
|
|
#
|
|
# 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)
|
|
|
|
with open(sys.argv[1], 'r') as stream:
|
|
try:
|
|
events = yaml.load(stream)
|
|
exitValue = 0
|
|
|
|
for key in events:
|
|
print("%6.3f: checking ... " % key)
|
|
if not checkFields(key, events[key]):
|
|
print()
|
|
exitValue = 1
|
|
else:
|
|
print('OK.')
|
|
|
|
print('Done.')
|
|
|
|
except yaml.YAMLError as exc:
|
|
print(exc)
|
|
|
|
exit(exitValue)
|