cca4dc0c54
Current FaultAPIs (get_fault/get_faults/get_faults_by_id) cannot distinguish error and no data case. None will be returned for both case. To separate these two cases, and implement the code more as pythonic way, FaultAPIsV2 is added, which will raise exception for error case. In order to separate the cases, the C functions called by API are modified to return FALSE for error, and return None for no data. Test: Pass basic deploy test, and "fm alarm-*" cmd work as before. Use fm_api_test.py/fm_api_v2_test.py to manual trigger API call, confirm alarm could be created/get/deleted, and value is the same as "fm alarm-list". Modify fmManager to simulate error case, confirm exception is generated for FaultAPIsV2, and behavior is not changed for FaultAPIs. Story: 2004859 Task: 29097 Change-Id: Ic1c0a15eb8dfec6c368099b096d6a158da0d3c77 Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
108 lines
3.4 KiB
Python
108 lines
3.4 KiB
Python
# -*- encoding: utf-8 -*-
|
|
#
|
|
# Copyright (c) 2014 Wind River Systems, Inc.
|
|
#
|
|
# Author:
|
|
#
|
|
# 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 sys
|
|
from fm_api import fm_api
|
|
from fm_api import constants
|
|
|
|
ser = fm_api.FaultAPIs()
|
|
|
|
|
|
def print_alarm(alarm):
|
|
alarm_str = "alarm_id: " + alarm.alarm_id + ", "
|
|
alarm_str += "uuid: " + alarm.uuid + ", "
|
|
alarm_str += "alarm_type: " + alarm.alarm_type + "\n"
|
|
alarm_str += "state: " + alarm.alarm_state + ", "
|
|
alarm_str += "severity: " + alarm.severity + ", "
|
|
alarm_str += "entity_type_id: " + alarm.entity_type_id + ", "
|
|
alarm_str += "timestamp: " + alarm.timestamp + "\n"
|
|
alarm_str += "entity_instance_id: " + alarm.entity_instance_id + ", "
|
|
alarm_str += "probable cause:" + alarm.probable_cause + "\n"
|
|
print(alarm_str)
|
|
|
|
|
|
def create():
|
|
fault = fm_api.Fault(alarm_id=constants.FM_ALARM_ID_VM_FAILED,
|
|
alarm_state=constants.FM_ALARM_STATE_SET,
|
|
entity_type_id=constants.FM_ENTITY_TYPE_INSTANCE,
|
|
entity_instance_id=constants.FM_ENTITY_TYPE_INSTANCE + '=' + 'a4e4cdb7-2ee6-4818-84c8-5310fcd67b5d',
|
|
severity=constants.FM_ALARM_SEVERITY_CRITICAL,
|
|
reason_text="Unknown",
|
|
alarm_type=constants.FM_ALARM_TYPE_5,
|
|
probable_cause=constants.ALARM_PROBABLE_CAUSE_8,
|
|
proposed_repair_action=None,
|
|
service_affecting=False,
|
|
suppression=False)
|
|
uuid = ser.set_fault(fault)
|
|
print(uuid)
|
|
|
|
|
|
def delete(alarm_id, instance_id):
|
|
ret = ser.clear_fault(alarm_id, instance_id)
|
|
print("Delete fault return %s" % str(ret))
|
|
|
|
|
|
def del_all(instance_id):
|
|
ret = ser.clear_all(instance_id)
|
|
print("Delete faults return: %s" % str(ret))
|
|
|
|
|
|
def get(alarm_id, instance_id):
|
|
a = ser.get_fault(alarm_id, instance_id)
|
|
if a is not None:
|
|
print_alarm(a)
|
|
else:
|
|
print("Alarm not found")
|
|
|
|
|
|
def get_all(instance_id):
|
|
ll = ser.get_faults(instance_id)
|
|
if ll is not None:
|
|
print("Total alarm returned: %d\n"
|
|
% len(ll))
|
|
for i in ll:
|
|
print_alarm(i)
|
|
else:
|
|
print("No alarm returned")
|
|
|
|
|
|
def get_list(alarm_id):
|
|
ll = ser.get_faults_by_id(alarm_id)
|
|
if ll is not None:
|
|
print("Total alarm returned: %d\n"
|
|
% len(ll))
|
|
for i in ll:
|
|
print_alarm(i)
|
|
else:
|
|
print("No alarm returned")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if sys.argv[1] == "create":
|
|
sys.exit(create())
|
|
elif sys.argv[1] == "del":
|
|
sys.exit(delete(sys.argv[2], sys.argv[3]))
|
|
elif sys.argv[1] == "get":
|
|
sys.exit(get(sys.argv[2], sys.argv[3]))
|
|
elif sys.argv[1] == "get_all":
|
|
sys.exit(get_all(sys.argv[2]))
|
|
elif sys.argv[1] == "del_all":
|
|
sys.exit(del_all(sys.argv[2]))
|
|
elif sys.argv[1] == "get_list":
|
|
sys.exit(get_list(sys.argv[2]))
|