class Admin::PlowController < OrbitAdminController include ReverseProxy::Controller SocketFile = "#{Rails.root}/tmp/plow.sock" Binary = File.expand_path("../../../../bin/plow", __FILE__) LogFile = "#{Rails.root}/tmp/plow_summary.log" before_action :setup_setting, only: [:setting, :save_setting] def index reverse_proxy "unix://#{Rails.root}/tmp/plow.sock", path: '/' do |config| end end def show path = request.env['ORIGINAL_FULLPATH']#.gsub("/admin/plow", "") reverse_proxy "unix://#{Rails.root}/tmp/plow.sock", path: path do |config| end end def setting if File.exist?(LogFile) @logContent = File.read(LogFile).gsub("\n", "
").html_safe end end def save_setting @setting.update_attributes(params[:plow_setting].permit!) if File.exist?(SocketFile) if @plow_pid Process.kill(:INT, @plow_pid) end `rm #{SocketFile}` end if params['act'] == 'Start Test' uri = URI.parse(@setting.url) host = uri.host ip = @setting.ip concurrent = @setting.concurrent rate = @setting.rate scheme = uri.scheme Thread.new do if !ip.blank? `ulimit -n 100000 && #{Binary} #{scheme}://#{ip}#{uri.request_uri} --host=#{host} --listen=#{SocketFile} -c#{concurrent} --rate #{rate} --summary > #{LogFile}` else `ulimit -n 100000 && #{Binary} #{@setting.url} --listen=#{SocketFile} -c#{concurrent} --rate #{rate} --summary > #{LogFile}` end end max_wait = 10 while 1 sleep(1) setup_setting max_wait -= 1 if @enable_plow break end end end redirect_to action: :setting end private def setup_setting @setting = PlowSetting.first @plow_pid = `fuser #{SocketFile}`.gsub(/\n/, '').to_i @enable_plow = @plow_pid > 0 end end