Merge "client support for resource api changes"

This commit is contained in:
Zuul 2018-12-30 11:22:53 +00:00 committed by Gerrit Code Review
commit 464db87d8c
8 changed files with 100 additions and 6 deletions

View File

@ -165,6 +165,7 @@ You'll find complete documentation on the shell by running
healthcheck Check api health status healthcheck Check api health status
help print detailed help for another command (cliff) help print detailed help for another command (cliff)
rca show Show the Root Cause Analysis for a certain alarm rca show Show the Root Cause Analysis for a certain alarm
resource count Show a count of all resources
resource list List resources resource list List resources
resource show Show a resource resource show Show a resource
template add Add a template template add Add a template
@ -718,6 +719,27 @@ resource show::
| vitrage_type | nova.instance | | vitrage_type | nova.instance |
+---------------------------+--------------------------------------+ +---------------------------+--------------------------------------+
resource count::
vitrage resource count
{
"nova.instance": 394,
"openstack.cluster": 1,
"cinder.volume": 405,
"nova.host": 16,
"neutron.network": 7,
"neutron.port": 1127,
"nova.zone": 3,
"tripleo.controller": 3
}
vitrage resource count --type nova.instance --group-by state
{
"ACTIVE": 359,
"ERROR": 27,
"SUBOPTIMAL": 8
}
Alarms Examples Alarms Examples
--------------- ---------------
Note: To see complete usage: 'vitrage help' and 'vitrage help <command>' Note: To see complete usage: 'vitrage help' and 'vitrage help <command>'

View File

@ -0,0 +1,4 @@
---
features:
- Resource count new API with support for queries and group-by.
Allows retrieving quick summaries of graph nodes.

View File

@ -0,0 +1,3 @@
---
features:
- Resource list API now supports using a query

View File

@ -49,6 +49,7 @@ openstack.rca.v1 =
rca_alarm_count = vitrageclient.v1.cli.alarm:AlarmCount rca_alarm_count = vitrageclient.v1.cli.alarm:AlarmCount
rca_resource_list = vitrageclient.v1.cli.resource:ResourceList rca_resource_list = vitrageclient.v1.cli.resource:ResourceList
rca_resource_show = vitrageclient.v1.cli.resource:ResourceShow rca_resource_show = vitrageclient.v1.cli.resource:ResourceShow
rca_resource_count = vitrageclient.v1.cli.resource:ResourceCount
rca_template_list = vitrageclient.v1.cli.template:TemplateList rca_template_list = vitrageclient.v1.cli.template:TemplateList
rca_template_show = vitrageclient.v1.cli.template:TemplateShow rca_template_show = vitrageclient.v1.cli.template:TemplateShow
rca_template_validate = vitrageclient.v1.cli.template:TemplateValidate rca_template_validate = vitrageclient.v1.cli.template:TemplateValidate

View File

@ -19,7 +19,8 @@ _vitrage()
cmds_rca='show' cmds_rca='show'
cmds_rca_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --all-tenants' cmds_rca_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --all-tenants'
cmds_resource='list show' cmds_resource='list show'
cmds_resource_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --quote --noindent --sort-column --type --all-tenants' cmds_resource_count='-h --help --type --all-tenants --filter --group-by'
cmds_resource_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --quote --noindent --sort-column --type --all-tenants --filter'
cmds_resource_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix' cmds_resource_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
cmds_template='add delete list show validate' cmds_template='add delete list show validate'
cmds_template_add='-h --help -f --format -c --column --max-width --fit-width --print-empty --quote --noindent --sort-column --path --type' cmds_template_add='-h --help -f --format -c --column --max-width --fit-width --print-empty --quote --noindent --sort-column --path --type'

View File

@ -51,6 +51,7 @@ class VitrageCommandManager(commandmanager.CommandManager):
'topology show': topology.TopologyShow, 'topology show': topology.TopologyShow,
'resource show': resource.ResourceShow, 'resource show': resource.ResourceShow,
'resource list': resource.ResourceList, 'resource list': resource.ResourceList,
'resource count': resource.ResourceCount,
'alarm list': alarm.AlarmList, 'alarm list': alarm.AlarmList,
'alarm history': alarm.AlarmHistory, 'alarm history': alarm.AlarmHistory,
'alarm show': alarm.AlarmShow, 'alarm show': alarm.AlarmShow,

View File

@ -47,15 +47,20 @@ class ResourceList(lister.Lister):
dest='all_tenants', dest='all_tenants',
action='store_true', action='store_true',
help='Shows resources of all the tenants') help='Shows resources of all the tenants')
parser.add_argument('--filter',
metavar='<query>',
help='resource query')
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
resource_type = parsed_args.resource_type resource_type = parsed_args.resource_type
all_tenants = parsed_args.all_tenants all_tenants = parsed_args.all_tenants
query = parsed_args.filter
resources = utils.get_client(self).resource.list( resources = utils.get_client(self).resource.list(
resource_type=resource_type, resource_type=resource_type,
all_tenants=all_tenants) all_tenants=all_tenants,
query=query)
# cluster, zone and host don't have "project_id" property # cluster, zone and host don't have "project_id" property
# neutron.port don't have "name" property # neutron.port don't have "name" property
# cluster don't have "update_timestamp" # cluster don't have "update_timestamp"
@ -72,3 +77,46 @@ class ResourceList(lister.Lister):
('State', 'vitrage_operational_state'), ('State', 'vitrage_operational_state'),
('Metadata', 'metadata'), ('Metadata', 'metadata'),
), resources) ), resources)
class ResourceCount(show.ShowOne):
"""Show a count of all resources"""
def get_parser(self, prog_name):
parser = super(ResourceCount, self).get_parser(prog_name)
parser.add_argument('--type',
dest='resource_type',
metavar='<resource type>',
help='Type of resource')
parser.add_argument('--all-tenants',
default=False,
dest='all_tenants',
action='store_true',
help='Shows resources of all the tenants')
parser.add_argument('--filter',
metavar='<query>',
help='resource query'),
parser.add_argument(
'--group-by',
dest='group_by',
metavar='<group_by>',
default='vitrage_type',
help='A resource data field, to group by it\'s values'),
return parser
@property
def formatter_default(self):
return 'json'
def take_action(self, parsed_args):
resource_type = parsed_args.resource_type
all_tenants = parsed_args.all_tenants
query = parsed_args.filter
group_by = parsed_args.group_by
resource_count = utils.get_client(self).resource.count(
resource_type=resource_type,
all_tenants=all_tenants,
query=query,
group_by=group_by)
return self.dict2columns(resource_count)

View File

@ -17,15 +17,16 @@ class Resource(object):
def __init__(self, api): def __init__(self, api):
self.api = api self.api = api
def list(self, resource_type=None, all_tenants=False): def list(self, resource_type=None, all_tenants=False, query=None):
"""Get a all resources """Get a all resources
:param all_tenants: should return all tenants resources :param all_tenants: should return all tenants resources
:param resource_type: the type for the resources :param resource_type: the type for the resources
:param query: the query filter for the vertices
""" """
params = dict(resource_type=resource_type, params = dict(resource_type=resource_type, all_tenants=all_tenants,
all_tenants=all_tenants) query=query)
return self.api.get(self.url, params=params).json() return self.api.post(self.url, json=params).json()
def get(self, vitrage_id): def get(self, vitrage_id):
"""Get a resource """Get a resource
@ -34,3 +35,16 @@ class Resource(object):
""" """
url = self.url + vitrage_id url = self.url + vitrage_id
return self.api.get(url).json() return self.api.get(url).json()
def count(self, resource_type=None, all_tenants=False, query=None,
group_by=None):
"""Get a count of all resources
:param all_tenants: should return all tenants resources
:param resource_type: the type for the resources
:param query: the query filter for the vertices
:param group_by: a property name to group by it's values
"""
params = dict(resource_type=resource_type, all_tenants=all_tenants,
query=query, group_by=group_by)
return self.api.post(self.url + 'count/', json=params).json()