Are all servers slow or just one ?
Output
Example logging all times > 3 seconds.
executing 'ruby -e "r = rand(10); puts %{sleep #{r}}; sleep r"' ** [out :: dbadmin1] sleep 6 ** [out :: app1] sleep 4 ** [out :: work1] sleep 2 ** [out :: mirror1] sleep 5 ** Server dbadmin1 finished command in 4 seconds ** Server app1 finished command in 7 seconds
Code
module PerServerTime # set via Capistrano::Command.per_server_time_threshold = 111 def self.included(base) class << base attr_accessor :per_server_time_threshold end end # whenever a command finishes on 1 server print how long it ran on this server def process_iteration return super if @channels.size < 2 # do not need per-server logging for 1 server @start_time ||= Time.now.to_f @closed_channels ||= [] @channels.each do |channel| if channel[:closed] && !@closed_channels.include?(channel) @closed_channels < (self.class.per_server_time_threshold || 30) host = channel.connection.instance_variable_get(:@xserver).host logger.info("Server #{host} finished command in #{time} seconds") end end end super end end Capistrano::Command.send(:include, PerServerTime)