aws/hhvm1/execution_status.py (48 lines of code) (raw):
#!/usr/bin/env python3
#
# Copyright (c) 2017-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
import json
import sys
from lambdas.common import all_execution_events
if len(sys.argv) < 2:
print('Usage: %s <execution-arn>' % sys.argv[0])
quit(1)
events = {e['id']: e for e in all_execution_events(sys.argv[1])}
finished = {}
for finished_event in events.values():
if finished_event['type'] == 'TaskStateExited':
started_event = finished_event
while started_event['type'] != 'TaskStateEntered':
started_event = events[started_event['previousEventId']]
finished[started_event['id']] = started_event, finished_event
unfinished = {
id: e for id, e in events.items()
if id not in finished and e['type'] == 'TaskStateEntered'
}
def output(s, f, prev):
details = s['stateEnteredEventDetails']
name = details['name']
if name == 'HealthCheck' or name.startswith('PrepareTo'):
return
out = [name]
input = json.loads(details['input'])
if type(input) == dict:
out.append(input.get('version'))
out.append(input.get('platform'))
if f:
timedelta = f['timestamp'] - s['timestamp']
out.append('(' + str(timedelta).rstrip('0') + ')')
prefix = ''
if prev:
if prev['type'].endswith('Succeeded'):
prefix = '\033[32m'
elif prev['type'].endswith('Failed'):
prefix = '\033[31mFAILED: '
print(' ' + prefix + ' '.join(o for o in out if o) + '\033[0m')
if finished:
print('Finished tasks:')
for s, f in finished.values():
output(s, f, events[f['previousEventId']])
print()
if unfinished:
print('Unfinished tasks:')
for s in unfinished.values():
output(s, None, None)
print()