diff --git a/lib/cartodb/scripts/server_load.rb b/lib/cartodb/scripts/server_load.rb new file mode 100644 index 0000000000..32c7ea9927 --- /dev/null +++ b/lib/cartodb/scripts/server_load.rb @@ -0,0 +1,17 @@ +require 'capybara' +require 'capybara/dsl' + +class ServerLoadScript + include Capybara::DSL + + def initialize + + Capybara.default_driver = :selenium + Capybara.app_host = 'https://staging20.cartodb.com' + Capybara.run_server = false + + visit '/' + + end + +end diff --git a/lib/cartodb/threads_machine.rb b/lib/cartodb/threads_machine.rb new file mode 100644 index 0000000000..b9152c8b9f --- /dev/null +++ b/lib/cartodb/threads_machine.rb @@ -0,0 +1,51 @@ +require 'thread' + +class ThreadsMachine + + MAX_THREADS = 20 + + def threads + @threads ||= [] + end + + def queue + @queue ||= Queue.new + end + + def semaphore + @semaphore ||= Mutex.new + end + + def async + MAX_THREADS.times do |count| + queue.enq(:EOF) + threads << Thread.new do |number| + Thread.current[:name] = "Thread ##{count}" + + item = nil + + until queue.empty? + item = queue.deq + + yield item if block_given? + + end + end + end + + threads.each do |t| + begin + t.join + rescue RuntimeError => e + puts "Failure on thread #{t[:name]}: #{e.message}" + end + end + end + + def sync(item) + semaphore.synchronize do + yield item + end + end + +end diff --git a/script/server_load.rb b/script/server_load.rb new file mode 100755 index 0000000000..236fffa97b --- /dev/null +++ b/script/server_load.rb @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby +require_relative '../lib/cartodb/threads_machine' +require_relative '../lib/cartodb/scripts/server_load' + +class ServerLoad < ThreadsMachine + + def execute + + MAX_THREADS.times do + queue.enq(ServerLoadScript) + end + + async do |load_script| + load_script.new + end + + end + +end + +ServerLoad.new.execute