summaryrefslogtreecommitdiff
path: root/heatclient/osc
diff options
context:
space:
mode:
authorSteve Baker <sbaker@redhat.com>2016-02-16 17:12:42 +1300
committerSteve Baker <sbaker@redhat.com>2016-02-29 16:04:48 +1300
commitebdf0ebc941eb1d99452347cf69e73ab901e1301 (patch)
tree3969c59e7d6e24ce2faec067b7041b1ac9aaa6b6 /heatclient/osc
parent6c184587648defb015c7dda7416b53721d71a9c7 (diff)
downloadpython-heatclient-ebdf0ebc941eb1d99452347cf69e73ab901e1301.tar.gz
Implement stack event list --follow
This adds a --follow option which is similar to the --wait logging behaviour in changes like I72421c1adf9220e3440179fec672f49803a6cde2 except that --follow doesn't exit until the user does ctrl-c. This change also includes: - always sort events ascending for all formatters - the newest events should always be at the bottom of the screen as they are generally the most interesting - get_event marker handling tolerates the marker not being in the event list. --follow was triggering this, but ignoring the marker in this case has not lead to events being printed more than once Change-Id: Ie0964918fc1d05e7e18aa39ceea6d4777deeb87e Blueprint: heat-support-python-openstackclient
Diffstat (limited to 'heatclient/osc')
-rw-r--r--heatclient/osc/v1/event.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/heatclient/osc/v1/event.py b/heatclient/osc/v1/event.py
index 664b56c..feee81d 100644
--- a/heatclient/osc/v1/event.py
+++ b/heatclient/osc/v1/event.py
@@ -13,6 +13,7 @@
# Copyright 2015 IBM Corp.
import logging
+import time
from cliff import lister
from cliff import show
@@ -134,6 +135,11 @@ class ListEvent(lister.Lister):
'(default: asc). Specify multiple times to sort on '
'multiple keys')
)
+ parser.add_argument(
+ '--follow',
+ action='store_true',
+ help=_('Print events until process is halted')
+ )
return parser
def take_action(self, parsed_args):
@@ -149,6 +155,7 @@ class ListEvent(lister.Lister):
'limit': parsed_args.limit,
'marker': parsed_args.marker,
'filters': heat_utils.format_parameters(parsed_args.filter),
+ 'sort_dir': 'asc'
}
if parsed_args.resource and parsed_args.nested_depth:
@@ -165,6 +172,31 @@ class ListEvent(lister.Lister):
else:
nested_depth = 0
+ if parsed_args.follow:
+ if parsed_args.formatter != 'value':
+ msg = _('--follow can only be specified with --format value')
+ raise exc.CommandError(msg)
+
+ marker = parsed_args.marker
+ try:
+ while True:
+ kwargs['marker'] = marker
+ events = event_utils.get_events(
+ client,
+ stack_id=parsed_args.stack,
+ event_args=kwargs,
+ nested_depth=nested_depth,
+ marker=marker)
+ if events:
+ marker = getattr(events[-1], 'id', None)
+ events_log = heat_utils.event_log_formatter(events)
+ self.app.stdout.write(events_log)
+ self.app.stdout.write('\n')
+ time.sleep(5)
+ # this loop never exits
+ except (KeyboardInterrupt, EOFError): # ctrl-c, ctrl-d
+ return [], []
+
events = event_utils.get_events(
client, stack_id=parsed_args.stack, event_args=kwargs,
nested_depth=nested_depth, marker=parsed_args.marker,
@@ -175,7 +207,6 @@ class ListEvent(lister.Lister):
if parsed_args.formatter == 'value':
events = heat_utils.event_log_formatter(events).split('\n')
- events.reverse()
return [], [e.split(' ') for e in events]
if len(events):