Add support for event commands
Change-Id: I67af7921ea53dd97b176b87263dcb2b941cf819a
This commit is contained in:
parent
3d9eddfac9
commit
2c5e8abccf
|
@ -15,7 +15,7 @@ Panko API.
|
||||||
|
|
||||||
This is a new client to interact with Panko API. There may be differences
|
This is a new client to interact with Panko API. There may be differences
|
||||||
in functionality, syntax, and command line output when compared with the
|
in functionality, syntax, and command line output when compared with the
|
||||||
alarm functionality provided by ceilometerclient.
|
event functionality provided by ceilometerclient.
|
||||||
|
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
The :program:`panko` shell utility
|
The :program:`panko` shell utility
|
||||||
=========================================
|
==================================
|
||||||
|
|
||||||
.. program:: panko
|
.. program:: panko
|
||||||
.. highlight:: bash
|
.. highlight:: bash
|
||||||
|
|
||||||
The :program:`panko` shell utility interacts with Panko API
|
The :program:`panko` shell utility interacts with Panko API
|
||||||
from the command line. It supports the entirety of the Panko API excluding
|
from the command line.
|
||||||
deprecated combination alarms.
|
|
||||||
|
|
||||||
You'll need to provide :program:`panko` with your OpenStack credentials.
|
You'll need to provide :program:`panko` with your OpenStack credentials.
|
||||||
You can do this with the :option:`--os-username`, :option:`--os-password`,
|
You can do this with the :option:`--os-username`, :option:`--os-password`,
|
||||||
|
@ -65,23 +64,4 @@ command.
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Create an alarm::
|
#TODO
|
||||||
|
|
||||||
panko alarm create -t threshold --name alarm1 -m cpu_util --threshold 5
|
|
||||||
|
|
||||||
List alarms::
|
|
||||||
|
|
||||||
panko alarm list
|
|
||||||
|
|
||||||
List alarm with query parameters::
|
|
||||||
|
|
||||||
panko alarm list --query "state=alarm and type=threshold"
|
|
||||||
|
|
||||||
Show an alarm's history::
|
|
||||||
|
|
||||||
panko alarm-history show <ALARM_ID>
|
|
||||||
|
|
||||||
Search alarm history data::
|
|
||||||
|
|
||||||
panko --debug alarm-history search --query 'timestamp>"2016-03-09T01:22:35"'
|
|
||||||
|
|
||||||
|
|
|
@ -48,3 +48,11 @@ def get_pagination_options(limit=None, marker=None, sorts=None):
|
||||||
for sort in sorts or []:
|
for sort in sorts or []:
|
||||||
options.append("sort=%s" % urllib_parse.quote(sort))
|
options.append("sort=%s" % urllib_parse.quote(sort))
|
||||||
return "&".join(options)
|
return "&".join(options)
|
||||||
|
|
||||||
|
|
||||||
|
def filtersdict_to_url(filters):
|
||||||
|
urls = []
|
||||||
|
for k, v in sorted(filters.items()):
|
||||||
|
url = "q.field=%s&q.op=eq&q.value=%s" % (k, v)
|
||||||
|
urls.append(url)
|
||||||
|
return '&'.join(urls)
|
||||||
|
|
|
@ -15,10 +15,10 @@
|
||||||
|
|
||||||
"""Panko v2 Capabilities action implementations"""
|
"""Panko v2 Capabilities action implementations"""
|
||||||
|
|
||||||
from cliff import show
|
from osc_lib.command import command
|
||||||
|
|
||||||
|
|
||||||
class CliCapabilitiesList(show.ShowOne):
|
class CliCapabilitiesList(command.ShowOne):
|
||||||
"""List capabilities for event service"""
|
"""List capabilities for event service"""
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
# Copyright 2016 Huawei, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
"""Panko v2 event action implementations"""
|
||||||
|
import copy
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
from osc_lib.command import command
|
||||||
|
from osc_lib import utils
|
||||||
|
|
||||||
|
|
||||||
|
class EventList(command.Lister):
|
||||||
|
"""List events"""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def split_filter_param(param):
|
||||||
|
key, eq_op, value = param.partition('=')
|
||||||
|
if not eq_op:
|
||||||
|
msg = 'Malformed parameter(%s). Use the key=value format.' % param
|
||||||
|
raise ValueError(msg)
|
||||||
|
return key, value
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(EventList, self).get_parser(prog_name)
|
||||||
|
parser.add_argument('--filter', dest='filter',
|
||||||
|
metavar='<KEY1=VALUE1;KEY2=VALUE2...>',
|
||||||
|
type=self.split_filter_param,
|
||||||
|
action='append',
|
||||||
|
help='Filter parameters to apply on'
|
||||||
|
' returned events.')
|
||||||
|
parser.add_argument("--limit", type=int, metavar="<LIMIT>",
|
||||||
|
help="Number of events to return "
|
||||||
|
"(Default is server default)")
|
||||||
|
parser.add_argument("--marker", metavar="<MARKER>",
|
||||||
|
help="Last item of the previous listing. "
|
||||||
|
"Return the next results after this value,"
|
||||||
|
"the supported marker is message_id.")
|
||||||
|
parser.add_argument("--sort", action="append",
|
||||||
|
metavar="<SORT_KEY:SORT_DIR>",
|
||||||
|
help="Sort of events attribute, "
|
||||||
|
"e.g. name:asc")
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
ac = self.app.client_manager.event
|
||||||
|
filters = dict(parsed_args.filter) if parsed_args.filter else None
|
||||||
|
events = ac.event.list(
|
||||||
|
filters=filters, sorts=parsed_args.sort,
|
||||||
|
limit=parsed_args.limit, marker=parsed_args.marker)
|
||||||
|
columns = ('event_type', 'generated', 'message_id', 'traits')
|
||||||
|
formatters = {'traits': lambda s: json.dumps(s, indent=4)}
|
||||||
|
return (columns,
|
||||||
|
(utils.get_item_properties(
|
||||||
|
s, columns, formatters=formatters) for s in events))
|
||||||
|
|
||||||
|
|
||||||
|
class EventShow(command.ShowOne):
|
||||||
|
"""List events"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(EventShow, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'message_id',
|
||||||
|
metavar='<message_id>',
|
||||||
|
help="event of specified message_id to display"
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
ac = self.app.client_manager.event
|
||||||
|
event = ac.event.get(message_id=parsed_args.message_id)
|
||||||
|
data = copy.deepcopy(event._info)
|
||||||
|
data.update({'traits': json.dumps(data['traits'], indent=4)})
|
||||||
|
return self.dict2columns(data)
|
|
@ -14,6 +14,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
from pankoclient.v2 import capabilities
|
from pankoclient.v2 import capabilities
|
||||||
|
from pankoclient.v2 import events
|
||||||
from pankoclient.common import http
|
from pankoclient.common import http
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,3 +25,4 @@ class Client(object):
|
||||||
"""Initialize a new client for the Panko v1 API."""
|
"""Initialize a new client for the Panko v1 API."""
|
||||||
self.http_client = http._construct_http_client(*args, **kwargs)
|
self.http_client = http._construct_http_client(*args, **kwargs)
|
||||||
self.capabilities = capabilities.CapabilitiesManager(self.http_client)
|
self.capabilities = capabilities.CapabilitiesManager(self.http_client)
|
||||||
|
self.event = events.EventManager(self.http_client)
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from pankoclient.common import base
|
||||||
|
from pankoclient.common import utils
|
||||||
|
|
||||||
|
|
||||||
|
class Event(base.Resource):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class EventManager(base.ManagerWithFind):
|
||||||
|
resource_class = Event
|
||||||
|
|
||||||
|
def list(self, filters=None, limit=None, marker=None, sorts=None):
|
||||||
|
"""Return all events matching the query filters.
|
||||||
|
|
||||||
|
:param query: Filter arguments for which Events to return
|
||||||
|
:param limit: Maximum number of samples to be returned.
|
||||||
|
:param sorts: A pair of sort key and sort direction combined with ":"
|
||||||
|
:param marker: The pagination query marker, message id of the last
|
||||||
|
item viewed
|
||||||
|
"""
|
||||||
|
pagination = utils.get_pagination_options(limit, marker, sorts)
|
||||||
|
filter_string = (utils.filtersdict_to_url(filters) if
|
||||||
|
filters else "")
|
||||||
|
url = "v2/events"
|
||||||
|
options = []
|
||||||
|
if filter_string:
|
||||||
|
options.append(filter_string)
|
||||||
|
if pagination:
|
||||||
|
options.append(pagination)
|
||||||
|
if options:
|
||||||
|
url += "?" + "&".join(options)
|
||||||
|
return self._list(url)
|
||||||
|
|
||||||
|
def get(self, message_id):
|
||||||
|
"""Return a single event with the given message id.
|
||||||
|
|
||||||
|
:param message_id: Message ID of the Event to be returned
|
||||||
|
"""
|
||||||
|
path = '/v2/events/%s'
|
||||||
|
return self._get(path % message_id)
|
||||||
|
|
|
@ -31,6 +31,8 @@ openstack.cli.extension =
|
||||||
|
|
||||||
openstack.event.v2 =
|
openstack.event.v2 =
|
||||||
event capabilities list = pankoclient.osc.v2.capabilities:CliCapabilitiesList
|
event capabilities list = pankoclient.osc.v2.capabilities:CliCapabilitiesList
|
||||||
|
event list = pankoclient.osc.v2.events:EventList
|
||||||
|
event show = pankoclient.osc.v2.events:EventShow
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
source-dir = doc/source
|
source-dir = doc/source
|
||||||
|
|
Loading…
Reference in New Issue