44510841d7
Currently it ignores failure events and reports those resources as still in progress. That's not really true, so let's report how long it took for the resource to fail. In some cases that may be useful information too. Change-Id: I3eeb6a6a589574cbd556e4ce712e2454c3aec3c9
60 lines
2.3 KiB
Python
Executable File
60 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2016 Red Hat Inc.
|
|
#
|
|
# 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.
|
|
|
|
# Usage: openstack stack event list -f json overcloud | \
|
|
# heat-deploy-times.py [list of resource names]
|
|
# If no resource names are provided, all of the resources will be output.
|
|
|
|
import json
|
|
import sys
|
|
import time
|
|
|
|
def process_events(all_events, events):
|
|
times = {}
|
|
for event in all_events:
|
|
name = event['resource_name']
|
|
status = event['resource_status']
|
|
# Older clients return timestamps in the first format, newer ones
|
|
# append a Z. This way we can handle both formats.
|
|
try:
|
|
strptime = time.strptime(event['event_time'],
|
|
'%Y-%m-%dT%H:%M:%S')
|
|
except ValueError:
|
|
strptime = time.strptime(event['event_time'],
|
|
'%Y-%m-%dT%H:%M:%SZ')
|
|
etime = time.mktime(strptime)
|
|
if name in events:
|
|
if status == 'CREATE_IN_PROGRESS':
|
|
times[name] = {'start': etime, 'elapsed': None}
|
|
elif status == 'CREATE_COMPLETE' or status == 'CREATE_FAILED':
|
|
times[name]['elapsed'] = etime - times[name]['start']
|
|
for name, data in sorted(times.items(),
|
|
key = lambda x: x[1]['elapsed'],
|
|
reverse=True):
|
|
elapsed = 'Still in progress'
|
|
if times[name]['elapsed'] is not None:
|
|
elapsed = times[name]['elapsed']
|
|
print '%s %s' % (name, elapsed)
|
|
|
|
if __name__ == '__main__':
|
|
stdin = sys.stdin.read()
|
|
all_events = json.loads(stdin)
|
|
events = sys.argv[1:]
|
|
if not events:
|
|
events = set()
|
|
for event in all_events:
|
|
events.add(event['resource_name'])
|
|
process_events(all_events, events)
|