support for alarm and RCA history
add new history api and pagination in current alarm list api Change-Id: Ie5ee407855b6aae6e34f316dce12669cfc1c025c Story: 2002670 Task: 23216
This commit is contained in:
parent
87b5abdef0
commit
76e7198fe9
@ -722,7 +722,10 @@ Alarms Examples
|
||||
---------------
|
||||
Note: To see complete usage: 'vitrage help' and 'vitrage help <command>'
|
||||
|
||||
alarm list::
|
||||
alarm list
|
||||
^^^^^^^^^^
|
||||
|
||||
A list of all alarms (default limit of 1000 alarms)::
|
||||
|
||||
vitrage alarm list
|
||||
+--------------------------------------+---------+----------------------------------------+---------------+--------------------------------------+----------+----------------------+
|
||||
@ -735,7 +738,52 @@ alarm list::
|
||||
| 608366ed-a737-4aab-a58f-8673a589e3aa | vitrage | VM network problem 2 | nova.instance | 786efe03-55ff-41b2-bdc1-6cd94bc355ad | CRITICAL | 2018-01-03T07:52:06Z |
|
||||
+--------------------------------------+---------+----------------------------------------+---------------+--------------------------------------+----------+----------------------+
|
||||
|
||||
alarm show::
|
||||
A list of all alarms on the given resource::
|
||||
|
||||
vitrage alarm list 52b466ba-ef98-4bf5-93d8-5c3ca680fe01
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------+
|
||||
| ID | Type | Name | Resource Type | Resource ID | Severity | Update Time |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------+
|
||||
| 3c1dda08-2c95-49f1-9155-35e5512a6f38 | vitrage | Instance down | nova.instance | 52b466ba-ef98-4bf5-93d8-5c3ca680fe01 | CRITICAL | 2018-07-22T11:42:57Z |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------+
|
||||
|
||||
A list of ``limit`` number of alarms::
|
||||
|
||||
vitrage alarm list --limit 2
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
| ID | Type | Name | Resource Type | Resource ID | Severity | Update Time |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
| f85ed0d2-3e28-47f9-9231-6fa72d6c882d | vitrage | Instance down | nova.instance | 52b466ba-ef98-4bf5-93d8-5c3ca680fe01 | CRITICAL | 2018-07-19 14:53:24.741108 |
|
||||
| 868b252a-4053-431c-a6d3-7cdabd91edd8 | vitrage | Instance down | nova.instance | 4ac47cef-419f-4e4b-9590-22c10bbd21fd | CRITICAL | 2018-07-19 14:53:24.773490 |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
|
||||
Paging. Get next alarms, from ``marker`` which is a vitrage_id::
|
||||
|
||||
vitrage alarm list --limit 2 --marker 868b252a-4053-431c-a6d3-7cdabd91edd8
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
| ID | Type | Name | Resource Type | Resource ID | Severity | Update Time |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
| c1ab17d4-8b6b-4d12-a4ec-3150bb89a5a5 | vitrage | Instance down | nova.instance | 52b466ba-ef98-4bf5-93d8-5c3ca680fe01 | CRITICAL | 2018-07-19 14:53:24.801490 |
|
||||
| 7468b7f5-5a89-49ee-b408-3cfafd68290a | vitrage | Instance down | nova.instance | 4ac47cef-419f-4e4b-9590-22c10bbd21fd | CRITICAL | 2018-07-19 14:53:24.828359 |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+
|
||||
|
||||
alarm history
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
A list of all alarms that were active during the time frame of ``start`` and ``end``::
|
||||
|
||||
vitrage alarm history --start '2018-07-22 14:10:40.087709' --end '2018-07-23 16:10:41.354102' --limit 3
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+----------------------------+
|
||||
| ID | Type | Name | Resource Type | Resource ID | Severity | Start Time | End Time |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+----------------------------+
|
||||
| f85ed0d2-3e28-47f9-9231-6fa72d6c882d | vitrage | Instance down | nova.instance | 4ac47cef-419f-4e4b-9590-22c10bbd21fd | CRITICAL | 2018-07-19 14:53:24.741108 | 2018-07-22 14:53:24.741108 |
|
||||
| 868b252a-4053-431c-a6d3-7cdabd91edd8 | vitrage | Instance down | nova.instance | 786efe03-55ff-41b2-bdc1-6cd94bc355ad | CRITICAL | 2018-07-19 14:53:24.773490 | |
|
||||
| c1ab17d4-8b6b-4d12-a4ec-3150bb89a5a5 | vitrage | Instance down | nova.instance | 52b466ba-ef98-4bf5-93d8-5c3ca680fe01 | CRITICAL | 2018-07-23 02:10:41.354102 |
|
||||
+--------------------------------------+---------+---------------+---------------+--------------------------------------+----------+----------------------------+----------------------------+
|
||||
|
||||
alarm show
|
||||
^^^^^^^^^^
|
||||
::
|
||||
|
||||
vitrage alarm show f85ed0d2-3e28-47f9-9231-6fa72d6c882d
|
||||
+------------------------------+--------------------------------------+
|
||||
@ -758,9 +806,12 @@ alarm show::
|
||||
| vitrage_type | vitrage |
|
||||
+------------------------------+--------------------------------------+
|
||||
|
||||
alarm count::
|
||||
alarm count
|
||||
^^^^^^^^^^^
|
||||
::
|
||||
|
||||
vitrage alarm count
|
||||
|
||||
{
|
||||
"WARNING": 2,
|
||||
"SEVERE": 0,
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- Added pagination support for ``vitrage alarm list``
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- Added alarm histroy API. ``vitrage alarm history`` can be called with
|
||||
``--start`` or ``--start`` and ``--end`` parameters to show alarms
|
||||
that were active on a specific time period
|
@ -43,6 +43,7 @@ openstack.rca.v1 =
|
||||
rca_show = vitrageclient.v1.cli.rca:RcaShow
|
||||
rca_topology_show = vitrageclient.v1.cli.topology:TopologyShow
|
||||
rca_alarm_list = vitrageclient.v1.cli.alarm:AlarmList
|
||||
rca_alarm_history = vitrageclient.v1.cli.alarm:AlarmHistory
|
||||
rca_alarm_show = vitrageclient.v1.cli.alarm:AlarmShow
|
||||
rca_alarm_count = vitrageclient.v1.cli.alarm:AlarmCount
|
||||
rca_resource_list = vitrageclient.v1.cli.resource:ResourceList
|
||||
|
@ -7,7 +7,8 @@ _vitrage()
|
||||
# Command data:
|
||||
cmds='alarm complete event healthcheck help rca resource template topology'
|
||||
cmds_alarm='list show count'
|
||||
cmds_alarm_list='-h --help -f --format -c --column --max-width --print-empty --noindent --quote --all-tenants'
|
||||
cmds_alarm_list='-h --help -f --format -c --column --max-width --print-empty --noindent --quote --limit --marker --all-tenants'
|
||||
cmds_alarm_history='-h --help -f --format -c --column --max-width --print-empty --noindent --quote --limit --marker --start --end --all-tenants'
|
||||
cmds_alarm_count='-h --help -f --format -c --column --max-width --print-empty --noindent --quote --all-tenants'
|
||||
cmds_alarm_show='-h --help'
|
||||
cmds_complete='-h --help --name --shell'
|
||||
|
@ -52,6 +52,7 @@ class VitrageCommandManager(commandmanager.CommandManager):
|
||||
'resource show': resource.ResourceShow,
|
||||
'resource list': resource.ResourceList,
|
||||
'alarm list': alarm.AlarmList,
|
||||
'alarm history': alarm.AlarmHistory,
|
||||
'alarm show': alarm.AlarmShow,
|
||||
'alarm count': alarm.AlarmCount,
|
||||
'rca show': rca.RcaShow,
|
||||
|
@ -17,16 +17,84 @@ class Alarm(object):
|
||||
def __init__(self, api):
|
||||
self.api = api
|
||||
|
||||
def list(self, vitrage_id, all_tenants=False):
|
||||
def list(self, vitrage_id, all_tenants=False,
|
||||
limit=1000,
|
||||
sort_by=['start_timestamp', 'vitrage_id'],
|
||||
sort_dirs=['asc', 'asc'],
|
||||
filter_by=None,
|
||||
filter_vals=None,
|
||||
next_page=True,
|
||||
marker=None):
|
||||
"""Get a all alarms on entity
|
||||
|
||||
:param all_tenants: should return all tenants alarms
|
||||
:param vitrage_id: the id for the entity
|
||||
:param limit: number of rows in page.
|
||||
:param sort_by: array of attributes by which results should be sorted
|
||||
:param sort_dirs: per-column array of sort_dirs,
|
||||
corresponding to sort_keys ('asc' or 'desc')
|
||||
:param filter_by: array of attributes by which results will be filtered
|
||||
:param filter_vals: array of filter values corresponding to filter_by
|
||||
:param next_page: True if next page was requested, False if previouse
|
||||
:param marker: if next_page is True,
|
||||
vitrage_id of last row in current page is needed,
|
||||
else, vitrage_id of first row in current page.
|
||||
marker=None if the request is for the first page.
|
||||
"""
|
||||
|
||||
params = dict(vitrage_id=vitrage_id,
|
||||
all_tenants=all_tenants)
|
||||
all_tenants=all_tenants,
|
||||
limit=limit,
|
||||
sort_by=sort_by,
|
||||
sort_dirs=sort_dirs,
|
||||
filter_by=filter_by,
|
||||
filter_vals=filter_vals,
|
||||
next_page=next_page,
|
||||
marker=marker
|
||||
)
|
||||
return self.api.get(self.url, params=params).json()
|
||||
|
||||
def history(self, all_tenants=False,
|
||||
start=None,
|
||||
end=None,
|
||||
limit=1000,
|
||||
sort_by=['start_timestamp', 'vitrage_id'],
|
||||
sort_dirs=['asc', 'asc'],
|
||||
filter_by=None,
|
||||
filter_vals=None,
|
||||
next_page=True,
|
||||
marker=None):
|
||||
"""Get the alarm history
|
||||
|
||||
:param all_tenants: should return all tenants alarms
|
||||
:param start: start of time frame.
|
||||
:param end: end of time frame.
|
||||
:param limit: number of rows in page.
|
||||
:param sort_by: array of attributes by which results should be sorted
|
||||
:param sort_dirs: per-column array of sort_dirs,
|
||||
corresponding to sort_keys ('asc' or 'desc')
|
||||
:param filter_by: array of attributes by which results will be filtered
|
||||
:param filter_vals: array of filter values corresponding to filter_by
|
||||
:param next_page: True if next page was requested, False if previouse
|
||||
:param marker: if next_page is True,
|
||||
vitrage_id of last row in current page is needed,
|
||||
else, vitrage_id of first row in current page.
|
||||
marker=None if the request is for the first page.
|
||||
"""
|
||||
|
||||
params = dict(all_tenants=all_tenants,
|
||||
start=start,
|
||||
end=end,
|
||||
limit=limit,
|
||||
sort_by=sort_by,
|
||||
sort_dirs=sort_dirs,
|
||||
filter_by=filter_by,
|
||||
filter_vals=filter_vals,
|
||||
next_page=next_page,
|
||||
marker=marker
|
||||
)
|
||||
return self.api.get(self.url + 'history/', params=params).json()
|
||||
|
||||
def get(self, vitrage_id):
|
||||
"""Get an alarm
|
||||
|
||||
|
@ -14,6 +14,7 @@ from cliff import lister
|
||||
from cliff import show
|
||||
|
||||
from vitrageclient.common import utils
|
||||
from vitrageclient import exceptions as exc
|
||||
|
||||
|
||||
class AlarmList(lister.Lister):
|
||||
@ -34,13 +35,26 @@ class AlarmList(lister.Lister):
|
||||
help='Shows alarms of all the tenants in the '
|
||||
'entity graph')
|
||||
|
||||
parser.add_argument('--limit',
|
||||
dest='limit',
|
||||
help='Maximal number of alarms to show. Default '
|
||||
'is 1000')
|
||||
|
||||
parser.add_argument('--marker',
|
||||
dest='marker',
|
||||
help='Marker for the next page')
|
||||
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
vitrage_id = parsed_args.vitrage_id
|
||||
all_tenants = parsed_args.all_tenants
|
||||
limit = parsed_args.limit
|
||||
marker = parsed_args.marker
|
||||
|
||||
alarms = utils.get_client(self).alarm.list(vitrage_id=vitrage_id,
|
||||
limit=limit,
|
||||
marker=marker,
|
||||
all_tenants=all_tenants)
|
||||
return utils.list2cols_with_rename(
|
||||
(
|
||||
@ -54,6 +68,65 @@ class AlarmList(lister.Lister):
|
||||
), alarms)
|
||||
|
||||
|
||||
class AlarmHistory(lister.Lister):
|
||||
"""List the alarm history"""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(AlarmHistory, self).get_parser(prog_name)
|
||||
parser.add_argument('--all-tenants',
|
||||
default=False,
|
||||
dest='all_tenants',
|
||||
action='store_true',
|
||||
help='Shows alarms of all the tenants in the '
|
||||
'entity graph')
|
||||
|
||||
parser.add_argument('--limit',
|
||||
dest='limit',
|
||||
help='Maximal number of alarms to show. Default '
|
||||
'is 1000')
|
||||
|
||||
parser.add_argument('--marker',
|
||||
dest='marker',
|
||||
help='Marker for the next page')
|
||||
|
||||
parser.add_argument('--start',
|
||||
dest='start',
|
||||
help='list alarm from this date')
|
||||
|
||||
parser.add_argument('--end',
|
||||
dest='end',
|
||||
help='list alarm until this date')
|
||||
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
all_tenants = parsed_args.all_tenants
|
||||
limit = parsed_args.limit
|
||||
marker = parsed_args.marker
|
||||
start = parsed_args.start
|
||||
end = parsed_args.end
|
||||
|
||||
if end and not start:
|
||||
raise exc.CommandError("--end argument must be used with --start")
|
||||
|
||||
alarms = utils.get_client(self).alarm.history(limit=limit,
|
||||
marker=marker,
|
||||
start=start,
|
||||
end=end,
|
||||
all_tenants=all_tenants)
|
||||
return utils.list2cols_with_rename(
|
||||
(
|
||||
('ID', 'vitrage_id'),
|
||||
('Type', 'vitrage_type'),
|
||||
('Name', 'name'),
|
||||
('Resource Type', 'vitrage_resource_type'),
|
||||
('Resource ID', 'vitrage_resource_id'),
|
||||
('Severity', 'vitrage_operational_severity'),
|
||||
('Start Time', 'start_timestamp'),
|
||||
('End Time', 'end_timestamp'),
|
||||
), alarms)
|
||||
|
||||
|
||||
class AlarmShow(show.ShowOne):
|
||||
"""Show an alarm"""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user