nfv/nfv/nfv-plugins/nfv_plugins/nfvi_plugins/openstack/fm.py

136 lines
4.0 KiB
Python
Executable File

#
# Copyright (c) 2018 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from nfv_common import debug
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
import json
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.fm')
def assemble_api_cmd(url, cmd):
"""
Adapt Address to Different Url Format
"""
if url.endswith('/'):
return url + cmd
else:
return url + "/" + cmd
def get_alarms(token, fm_service=PLATFORM_SERVICE.FM):
"""
Asks Fault Management for customer alarms
"""
url = token.get_service_url(fm_service)
if url is None:
raise ValueError("OpenStack FM URL is invalid")
api_cmd = assemble_api_cmd(url, "alarms?include_suppress=True")
response = rest_api_request(token, "GET", api_cmd)
return response
def get_logs(token, start=None, end=None, fm_service=PLATFORM_SERVICE.FM):
"""
Asks Fault Management for customer logs
"""
url = token.get_service_url(fm_service)
if url is None:
raise ValueError("OpenStack FM URL is invalid")
api_cmd = assemble_api_cmd(url, "event_log?logs=True")
if start is not None and end is not None:
api_cmd += ("&q.field=start&q.field=end&q.op=eq&q.op=eq"
"&q.value=%s&q.value=%s"
% (str(start).replace(' ', 'T').replace(':', '%3A'),
str(end).replace(' ', 'T').replace(':', '%3A')))
elif start is not None:
api_cmd += ("&q.field=start;q.op=eq;q.value=%s"
% str(start).replace(' ', 'T').replace(':', '%3A'))
elif end is not None:
api_cmd += ("&q.field=end;q.op=eq;q.value=%s"
% str(end).replace(' ', 'T').replace(':', '%3A'))
api_cmd += '&limit=100'
response = rest_api_request(token, "GET", api_cmd)
return response
def get_alarm_history(token, start=None, end=None, fm_service=PLATFORM_SERVICE.FM):
"""
Asks Fault Management for customer alarm history
"""
url = token.get_service_url(fm_service)
if url is None:
raise ValueError("OpenStack FM URL is invalid")
api_cmd = assemble_api_cmd(url, "event_log?alarms=True")
if start is not None and end is not None:
api_cmd += ("&q.field=start&q.field=end&q.op=eq&q.op=eq"
"&q.value=%s&q.value=%s"
% (str(start).replace(' ', 'T').replace(':', '%3A'),
str(end).replace(' ', 'T').replace(':', '%3A')))
elif start is not None:
api_cmd += ("&q.field=start;q.op=eq;q.value='%s'"
% str(start).replace(' ', 'T').replace(':', '%3A'))
elif end is not None:
api_cmd += ("&q.field=end;q.op=eq;q.value='%s'"
% str(end).replace(' ', 'T').replace(':', '%3A'))
api_cmd += '&limit=100'
response = rest_api_request(token, "GET", api_cmd)
return response
def raise_alarm(token, alarm_data="", fm_service=OPENSTACK_SERVICE.FM):
"""
Raise customer alarm to Fault Management
"""
url = token.get_service_url(fm_service)
if url is None:
raise ValueError("OpenStack FM URL is invalid")
api_cmd = assemble_api_cmd(url, "alarms")
api_cmd_headers = dict()
api_cmd_headers['Content-Type'] = "application/json"
json_alarm_data = json.dumps(alarm_data)
response = rest_api_request(token, "POST", api_cmd, api_cmd_headers, json_alarm_data)
return response
def clear_alarm(token, fm_uuid="", fm_service=OPENSTACK_SERVICE.FM):
"""
Clear customer alarm to Fault Management
"""
url = token.get_service_url(fm_service)
if url is None:
raise ValueError("OpenStack FM URL is invalid")
api_cmd = assemble_api_cmd(url, "alarms")
api_cmd_headers = dict()
api_cmd_headers['Content-Type'] = "application/json"
payload = ('{"id": "%s"}' % fm_uuid)
rest_api_request(token, "DELETE", api_cmd, api_cmd_headers, payload)
return