Add benchmark dir with ruby script
authorRyan <ry@tinyclouds.org>
Thu, 18 Jun 2009 12:36:30 +0000 (14:36 +0200)
committerRyan <ry@tinyclouds.org>
Thu, 18 Jun 2009 12:36:30 +0000 (14:36 +0200)
benchmark/http_simple.js [moved from http_simple.js with 100% similarity]
benchmark/http_simple.rb [new file with mode: 0644]

similarity index 100%
rename from http_simple.js
rename to benchmark/http_simple.js
diff --git a/benchmark/http_simple.rb b/benchmark/http_simple.rb
new file mode 100644 (file)
index 0000000..ee33f57
--- /dev/null
@@ -0,0 +1,95 @@
+DIR = File.dirname(__FILE__)
+
+def fib(n)
+  return 1 if n <= 1
+  fib(n-1) + fib(n-2)
+end
+
+def wait(seconds)
+  n = (seconds / 0.01).to_i
+  n.times do 
+    sleep(0.01)
+    #File.read(DIR + '/yahoo.html') 
+  end
+end
+
+class SimpleApp
+  @@responses = {}
+  
+  def initialize
+    @count = 0
+  end
+  
+  def deferred?(env)
+    false
+  end
+  
+  def call(env)
+    path = env['PATH_INFO'] || env['REQUEST_URI']
+    commands = path.split('/')
+    
+    @count += 1
+    if commands.include?('periodical_activity') and @count % 10 != 1
+      return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"]
+    end
+    
+    if commands.include?('fibonacci')
+      n = commands.last.to_i
+      raise "fibonacci called with n <= 0" if n <= 0
+      body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ')
+      status = 200
+    
+    elsif commands.include?('wait')
+      n = commands.last.to_f
+      raise "wait called with n <= 0" if n <= 0
+      wait(n)
+      body = "waited about #{n} seconds"
+      status = 200
+    
+    elsif commands.include?('bytes')
+      n = commands.last.to_i
+      raise "bytes called with n <= 0" if n <= 0
+      body = @@responses[n] || "C"*n
+      status = 200
+
+    elsif commands.include?('fixed')
+      n = 20 * 1024;
+      body = @@responses[n] || "C"*n
+      status = 200
+      
+    elsif commands.include?('test_post_length')
+      input_body = ""
+      while chunk = env['rack.input'].read(512)
+        input_body << chunk 
+      end
+      if env['CONTENT_LENGTH'].to_i == input_body.length
+        body = "Content-Length matches input length"
+        status = 200
+      else
+        body = "Content-Length doesn't matches input length! 
+          content_length = #{env['CONTENT_LENGTH'].to_i}
+          input_body.length = #{input_body.length}"
+        status = 500
+      end
+    else
+      status = 404
+      body = "Undefined url"
+    end
+    
+    body += "\r\n"
+    headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }
+    [status, headers, [body]]
+  end
+end
+
+
+if $0 == __FILE__
+  #require DIR + '/../lib/ebb'
+  require 'rubygems'
+  require 'rack'
+  require 'thin'
+  require 'ebb'
+#  Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000)
+  Thin::Server.start("0.0.0.0", 8000, SimpleApp.new) 
+#  Ebb::start_server(SimpleApp.new, :port => 8000)
+end