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)