From 9ef6031a16192b6d70cb6404ec6b418a06d3c4c5 Mon Sep 17 00:00:00 2001 From: Fernando Espinosa Date: Tue, 20 Nov 2012 18:42:14 +0100 Subject: [PATCH] Adds script to launch concurrent requests to a cartodb server --- lib/cartodb/scripts/server_load.rb | 17 ++++++++++ lib/cartodb/threads_machine.rb | 51 ++++++++++++++++++++++++++++++ script/server_load.rb | 21 ++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 lib/cartodb/scripts/server_load.rb create mode 100644 lib/cartodb/threads_machine.rb create mode 100755 script/server_load.rb 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