lib/lacquer/varnish.rb in posterous-lacquer-0.2.3 vs lib/lacquer/varnish.rb in posterous-lacquer-0.2.4

- old
+ new

@@ -5,54 +5,53 @@ stats = stats.split("\n") stats.shift stats = stats.collect do |stat| stat = stat.strip.match(/(\d+)\s+(.+)$/) - { :key => stat[2], :value => stat[1] } + { :key => stat[2], :value => stat[1] } if stat end end end def purge(path) send_command('url.purge ' << path).all? do |result| result =~ /200/ end end - private + # private - # Sends commands over telnet to varnish servers listed in the config. + # Sends commands over telnet to varnish servers listed in the config. def send_command(command) Lacquer.configuration.varnish_servers.collect do |server| + # RAILS_DEFAULT_LOGGER.debug("POSTEROUS_LACQUER_DEBUG: running(#{command.inspect}) on #{server.inspect}") retries = 0 + response = nil begin retries += 1 - response = [] connection = Net::Telnet.new( 'Host' => server[:host], 'Port' => server[:port], 'Timeout' => server[:timeout] || 5) - connection.cmd(command) do |c| - response.push c.strip - c.strip - end + connection.cmd(command + "\nquit\n") {|r| response = r.strip} + connection.close rescue Exception => e if retries < Lacquer.configuration.retries retry else if Lacquer.configuration.command_error_handler Lacquer.configuration.command_error_handler.call({ :error_class => "Varnish Error, retried #{Lacquer.configuration.retries} times", :error_message => "Error while trying to connect to #{server[:host]}:#{server[:port]}: #{e}", :parameters => server, - :response => response.join("\n")}) + :response => response}) else raise VarnishError.new("Error while trying to connect to #{server[:host]}:#{server[:port]} #{e}") end - end - ensure - connection.close rescue nil + end end + response end end + end end