diff options
author | Lénaïc Huard <lhuard@amadeus.com> | 2015-06-22 17:16:07 +0200 |
---|---|---|
committer | Lénaïc Huard <lhuard@amadeus.com> | 2015-06-22 17:16:07 +0200 |
commit | 519c6ac8eeeed9d2438c1cc705fbf49f0ad75fdf (patch) | |
tree | b9feecbddecbe1f1e63f082064077b47f9f889cd /ansible-profile/callback_plugins | |
parent | a7ac3f7b513fe57ddccad15bdb6c7e9091f16bcd (diff) | |
download | openshift-519c6ac8eeeed9d2438c1cc705fbf49f0ad75fdf.tar.gz openshift-519c6ac8eeeed9d2438c1cc705fbf49f0ad75fdf.tar.bz2 openshift-519c6ac8eeeed9d2438c1cc705fbf49f0ad75fdf.tar.xz openshift-519c6ac8eeeed9d2438c1cc705fbf49f0ad75fdf.zip |
Add a --profile option to spot which task takes more time
Diffstat (limited to 'ansible-profile/callback_plugins')
-rw-r--r-- | ansible-profile/callback_plugins/profile_tasks.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ansible-profile/callback_plugins/profile_tasks.py b/ansible-profile/callback_plugins/profile_tasks.py new file mode 100644 index 000000000..dc74ee291 --- /dev/null +++ b/ansible-profile/callback_plugins/profile_tasks.py @@ -0,0 +1,49 @@ +import time + + +class CallbackModule(object): + """ + A plugin for timing tasks + """ + def __init__(self): + self.stats = {} + self.current = None + + def playbook_on_task_start(self, name, is_conditional): + """ + Logs the start of each task + """ + if self.current is not None: + # Record the running time of the last executed task + self.stats[self.current] = time.time() - self.stats[self.current] + + # Record the start time of the current task + self.current = name + self.stats[self.current] = time.time() + + def playbook_on_stats(self, stats): + """ + Prints the timings + """ + # Record the timing of the very last task + if self.current is not None: + self.stats[self.current] = time.time() - self.stats[self.current] + + # Sort the tasks by their running time + results = sorted( + self.stats.items(), + key=lambda value: value[1], + reverse=True, + ) + + # Just keep the top 10 + results = results[:10] + + # Print the timings + for name, elapsed in results: + print( + "{0:-<70}{1:->9}".format( + '{0} '.format(name), + ' {0:.02f}s'.format(elapsed), + ) + ) |