62 lines
2.3 KiB
Python
Executable File
62 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)
|