diff options
author | Kevin Fenzi <kevin@scrye.com> | 2014-06-23 02:05:35 +0000 |
---|---|---|
committer | Kevin Fenzi <kevin@scrye.com> | 2014-06-23 02:05:35 +0000 |
commit | 5c3d38c357cb93e8d6397680817551207a3ff5ae (patch) | |
tree | 5c9ca53f9b6451f541fd3b0f52808147bed443f9 /callback_plugins | |
parent | 3a0d2d4483860dde341efe4ab04507490f8ac4c1 (diff) | |
download | ansible-5c3d38c357cb93e8d6397680817551207a3ff5ae.tar.gz ansible-5c3d38c357cb93e8d6397680817551207a3ff5ae.tar.xz ansible-5c3d38c357cb93e8d6397680817551207a3ff5ae.zip |
Add a profile thing for a few runs.
Diffstat (limited to 'callback_plugins')
-rw-r--r-- | callback_plugins/profile_tasks.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/callback_plugins/profile_tasks.py b/callback_plugins/profile_tasks.py new file mode 100644 index 000000000..9d8fd06c7 --- /dev/null +++ b/callback_plugins/profile_tasks.py @@ -0,0 +1,40 @@ +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)) |