summaryrefslogtreecommitdiffstats
path: root/callback_plugins
diff options
context:
space:
mode:
authorKevin Fenzi <kevin@scrye.com>2014-06-23 02:05:35 +0000
committerKevin Fenzi <kevin@scrye.com>2014-06-23 02:05:35 +0000
commit5c3d38c357cb93e8d6397680817551207a3ff5ae (patch)
tree5c9ca53f9b6451f541fd3b0f52808147bed443f9 /callback_plugins
parent3a0d2d4483860dde341efe4ab04507490f8ac4c1 (diff)
downloadansible-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.py40
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))