
New API methods have been added to allow getting, setting, and clearing faults by providing both alarm_id and entity_instance_id. Changes in this commit: - For clear_fault operation, the query has been updated to allow the removal of multiple rows with a single query. The entity_instance_id parameter can now be a prefix, enabling the matching of multiple alarms with the same alarm_id. This change does not affect existing use cases. - New method get_faults_by_id_n_eid, This method allows API clients to retrieve a list of alarms that match an alarm_id and a prefix of entity_instance_id, thereby matching multiple alarms. - New method set_faults. This method accepts a list of alarms as a parameter and calls the same core set_fault function for each alarm. [PASS] Build and install packages [PASS] Remove several alarms that matches 'alarm_id', 'entity_instance_id=%' [PASS] Get list of alarms that match 'alarm_id' and 'entity_instance_id=%' [PASS] Verify that the new behavior for removing alarms does not affect previous use cases. [PASS] Test set_faults API function providing a list of alarms. Verify the alarms in the list are being created. [PASS] Enable debug mode to verify that queries are as expected. Story: 2011106 task: 50756 Change-Id: Ib9dcfa97960a5d50865133a61810681e5a09edbe Signed-off-by: fperez <fabrizio.perez@windriver.com>
121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
# -*- encoding: utf-8 -*-
|
|
#
|
|
# Copyright (c) 2014-2022 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_all_by_id_n_eid(alarm_id, instance_id):
|
|
ll = ser.get_faults_by_id_n_eid(alarm_id, 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]))
|
|
elif sys.argv[1] == "get_list_id_eid":
|
|
sys.exit(get_all_by_id_n_eid(sys.argv[2], sys.argv[3]))
|