![Sorin Sbarnea](/assets/img/avatar_default.png)
Includes removal of file pattern from pep8 job which prevented it from running on most changes. Linters will use multiple tools and a pattern would make it fail to spot errors. This check should run even if no files are changed, so it would be able to check commit messages. There are no real load implications because linters check is just a simple tox execution which has minimal resource requirements. Includes reactivaction or linting which was not running on the entire repository. This required few minor fixes. Partial-Bug: #1786286 Change-Id: I4d4279309af55c2663e98bd0cdec9224f03c1fa0
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)
|