diff --git a/vitrageclient/shell.py b/vitrageclient/shell.py index d10f1b8..2ad6965 100644 --- a/vitrageclient/shell.py +++ b/vitrageclient/shell.py @@ -31,6 +31,7 @@ from keystoneauth1 import loading import client from v1.cli import alarm +from v1.cli import event from v1.cli import rca from v1.cli import resource from v1.cli import template @@ -48,6 +49,7 @@ class VitrageCommandManager(commandmanager.CommandManager): 'template validate': template.TemplateValidate, 'template list': template.TemplateList, 'template show': template.TemplateShow, + 'event post': event.EventPost, } def load_commands(self, namespace): diff --git a/vitrageclient/v1/cli/event.py b/vitrageclient/v1/cli/event.py new file mode 100644 index 0000000..409ed46 --- /dev/null +++ b/vitrageclient/v1/cli/event.py @@ -0,0 +1,61 @@ +# Copyright 2017 - Nokia Corporation +# +# 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 cliff import command +from datetime import datetime + +from vitrageclient.common import exc + + +# noinspection PyAbstractClass +class EventPost(command.Command): + """Show the event of the system""" + + def get_parser(self, prog_name): + parser = super(EventPost, self).get_parser(prog_name) + + parser.add_argument('--type', + help='The type of the event') + + parser.add_argument('--time', + default='', + help='The timestamp of the event in ISO 8601 ' + 'format: YYYY-MM-DDTHH:MM:SS.mmmmmm. ' + 'If not specified, the current time is used') + + parser.add_argument('--details', + default='{}', + help='A json string with the event details') + + return parser + + def formatter_default(self): + return 'json' + + def take_action(self, parsed_args): + if not parsed_args.type: + raise exc.CommandException( + message='Missing event type, please add --type') + + if parsed_args.time: + event_time = parsed_args.time + else: + event_time = datetime.now().isoformat() + + event_type = parsed_args.type + details = parsed_args.details + + self.app.client.event.post(event_time=event_time, + event_type=event_type, + details=details) diff --git a/vitrageclient/v1/client.py b/vitrageclient/v1/client.py index 056522d..29ce7a5 100644 --- a/vitrageclient/v1/client.py +++ b/vitrageclient/v1/client.py @@ -13,6 +13,7 @@ from vitrageclient import client from vitrageclient.v1 import alarm +from vitrageclient.v1 import event from vitrageclient.v1 import rca from vitrageclient.v1 import resource from vitrageclient.v1 import template @@ -29,3 +30,4 @@ class Client(object): self.alarm = alarm.Alarm(self._api) self.rca = rca.Rca(self._api) self.template = template.Template(self._api) + self.event = event.Event(self._api) diff --git a/vitrageclient/v1/event.py b/vitrageclient/v1/event.py new file mode 100644 index 0000000..55dd19a --- /dev/null +++ b/vitrageclient/v1/event.py @@ -0,0 +1,28 @@ +# Copyright 2017 - Nokia Corporation +# +# 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. + + +class Event(object): + URL = 'v1/event/' + + def __init__(self, api): + self.api = api + + def post(self, event_time, event_type, details): + """Post an event """ + + params = dict(time=event_time, + type=event_type, + details=details) + self.api.post(self.URL, json=params)