reifier 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa60f4a229669e2c71cccd301f93309a67fa48d6
4
- data.tar.gz: 731f667e0829f067924abbf80ed8d4f5e88f559c
3
+ metadata.gz: f44cae18b405a8793f34980692b85438987551d7
4
+ data.tar.gz: 8dad6a8d76982c62fe8ef97bff274c130c7fd310
5
5
  SHA512:
6
- metadata.gz: 167c3dff17ad61c8fa5a5be610939603df0516d61eedf96e1d3545ae3bf13701c60ba8a554f4eaf34a9685d37550707e76c649eb859e6d7ec9e6eed4495143d2
7
- data.tar.gz: b04ce039f7d7a1a86589f3fecc8514d28a09a4ebbab06ddab4a3b3956ea9c292a21bbb17d2e387e29c1bd740e03b57cbdb266ad1927b5db452976980bd55e8c5
6
+ metadata.gz: e7c3111aef5ed045e12b832778d60eadbff4783dd99f6e00f1ac98f060d71f6e35e6e32f4f35cbb8e3abc1443203e2b033039119b0cea4a2151456af30d19575
7
+ data.tar.gz: 24be8d505dc28cc4c594f4d40c90a6aae43b2da86c5545d842240074662f374a40a186f13c819994129eadd9b00a5a264fa94072c3142575088fe7a1794239eb
data/.travis.yml CHANGED
@@ -1,4 +1,33 @@
1
- language: ruby
1
+ cache: bundler
2
+ sudo: false
3
+
4
+ before_install:
5
+ - gem install bundler
6
+
2
7
  rvm:
3
8
  - 2.2.4
4
- before_install: gem install bundler -v 1.11.2
9
+ - 2.3.0
10
+ - ruby-head
11
+ - jruby-9000
12
+ - rbx-3
13
+
14
+ matrix:
15
+ allow_failures:
16
+ - rvm: ruby-head
17
+ - rvm: rbx-3
18
+ - rvm: jruby-9000
19
+
20
+ script:
21
+ - CODECLIMATE_REPO_TOKEN=b84ce34b20f2a809814493585d027aa71ab07e13116bf68430511548815d9411 bundle exec rake
22
+
23
+ addons:
24
+ code_climate:
25
+ repo_token: b84ce34b20f2a809814493585d027aa71ab07e13116bf68430511548815d9411
26
+
27
+ notifications:
28
+ email:
29
+ recipients:
30
+ - benny.klotz92@gmail.com
31
+ email:
32
+ on_failure: change
33
+ on_success: change
data/README.md CHANGED
@@ -8,6 +8,13 @@ reify
8
8
 
9
9
  Reifier is a threaded and pre forked rack app server written in pure ruby.
10
10
 
11
+ [![Gem Version](https://badge.fury.io/rb/reifier.svg)](https://badge.fury.io/rb/reifier)
12
+ [![Build Status](https://travis-ci.org/tak1n/reifier.svg?branch=master)](https://travis-ci.org/tak1n/reifier)
13
+ [![Code Climate](https://codeclimate.com/github/tak1n/reifier/badges/gpa.svg)](https://codeclimate.com/github/tak1n/reifier)
14
+ [![Test Coverage](https://codeclimate.com/github/tak1n/reifier/badges/coverage.svg)](https://codeclimate.com/github/tak1n/reifier/coverage)
15
+ [![Inline docs](http://inch-ci.org/github/tak1n/reifier.svg?branch=master)](http://inch-ci.org/github/tak1n/reifier)
16
+ [![Dependency Status](https://gemnasium.com/tak1n/reifier.svg)](https://gemnasium.com/tak1n/reifier)
17
+
11
18
  ## Is it any good?
12
19
 
13
20
  [Yes](http://news.ycombinator.com/item?id=3067434), no really just a fun project use it in production if you want :P
@@ -41,9 +48,9 @@ Use it through rackup:
41
48
 
42
49
  ## Available Options
43
50
 
44
- You can adapt the ThreadPool size with following option:
51
+ You can adapt the ThreadPool size with following options:
45
52
 
46
- $ rackup -s reifier -O Threads=8
53
+ $ rackup -s reifier -O MinThreads=8 -O MaxThreads=16
47
54
 
48
55
  Also the amount of workers is adaptable:
49
56
 
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :spec
10
+ task :default => :test
data/examples/reifier.rb CHANGED
@@ -1,2 +1,2 @@
1
- threads 8 # Using a thread pool size of 8
1
+ threads 8, 16 # Using a thread pool size of 8
2
2
  workers 9 # Using 9 worker processes
@@ -6,7 +6,8 @@ module Rack
6
6
  module Reifier
7
7
  DEFAULT_OPTIONS = {
8
8
  Workers: 1,
9
- Threads: 16
9
+ MinThreads: 0,
10
+ MaxThreads: 16
10
11
  }.freeze
11
12
 
12
13
  def self.run(app, options = {})
@@ -19,7 +20,8 @@ module Rack
19
20
 
20
21
  def self.valid_options
21
22
  {
22
- 'Threads=THREADS' => 'Number of threads (default: 16)',
23
+ 'MinThreads=MINTHREADS' => 'Number of minimal threads (default: 0)',
24
+ 'MaxThreads=MAXTHREADS' => 'Number of minimal threads (default: 16)',
23
25
  'Workers=WORKERS' => 'Number of workers (default: 1)'
24
26
  }
25
27
  end
@@ -5,6 +5,26 @@ module Reifier
5
5
  @options = options
6
6
  end
7
7
 
8
+ def load_configuration
9
+ if defined?(Rails)
10
+ path = Rails.root.join('config/reifier.rb')
11
+ else
12
+ path = Dir.pwd + '/reifier.rb'
13
+ end
14
+
15
+ return unless File.exist?(path)
16
+
17
+ lines = File.read(path).split("\n")
18
+
19
+ lines.each do |line|
20
+ eval(line)
21
+ end
22
+
23
+ puts "======= Loaded settings from #{path} =======\n"
24
+ rescue NoMethodError => e
25
+ raise UnsupportedOptionError, "Option #{e.name} is not supported from config file"
26
+ end
27
+
8
28
  def start
9
29
  server = TCPServer.new(@options[:Host], @options[:Port])
10
30
 
@@ -25,11 +45,12 @@ module Reifier
25
45
  exit
26
46
  end
27
47
 
48
+ puts "# Ruby version: #{RUBY_VERSION}"
49
+ puts "# Min threads: #{@options[:MinThreads]}, max threads: #{@options[:MaxThreads]}"
28
50
  puts "# Environment: #{@options[:environment]}"
29
- puts "# Listening on tcp://#{@options[:Host]}:#{@options[:Port]}"
30
- puts "# Master PID: #{Process.pid}"
31
- puts "# Number of Threads used: #{@options[:Threads]}"
32
51
  puts "# Number of Workers used: #{@options[:Workers]}"
52
+ puts "# Master PID: #{Process.pid}"
53
+ puts "# Listening on tcp://#{server.addr.last}:#{@options[:Port]}"
33
54
 
34
55
  loop do
35
56
  pid = Process.wait
@@ -40,38 +61,39 @@ module Reifier
40
61
  end
41
62
  end
42
63
 
43
- def load_configuration
44
- if defined?(Rails)
45
- path = Rails.root.join('config/reifier.rb')
46
- else
47
- path = Dir.pwd + '/reifier.rb'
48
- end
49
-
50
- return unless File.exist?(path)
51
-
52
- lines = File.read(path).split("\n")
53
-
54
- lines.each do |line|
55
- option = line.split.first.capitalize
56
- value = line.split.last
57
-
58
- @options[option.to_sym] = value
59
- end
64
+ private
60
65
 
61
- puts "======= Loaded settings from #{path} =======\n"
66
+ def threads(min, max)
67
+ @options[:MinThreads] = min
68
+ @options[:MaxThreads] = max
62
69
  end
63
70
 
64
- private
71
+ def workers(count)
72
+ @options[:Workers] = count
73
+ end
65
74
 
66
75
  def spawn_worker(server)
67
76
  fork do
68
- pool = Concurrent::FixedThreadPool.new(@options[:Threads])
77
+ pool = Concurrent::ThreadPoolExecutor.new(
78
+ min_threads: @options[:MinThreads],
79
+ max_threads: @options[:MaxThreads],
80
+ max_queue: 0,
81
+ fallback_policy: :caller_runs,
82
+ )
83
+
84
+ # Signal.trap 'SIGINT' do
85
+ # puts "Shutting down thread pool in Worker: #{Process.pid}"
86
+ # pool.shutdown
87
+ # pool.wait_for_termination
88
+
89
+ # exit
90
+ # end
69
91
 
70
92
  loop do
71
93
  socket = server.accept
72
94
  socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
73
95
 
74
- pool.post do
96
+ Concurrent::Future.new(executor: pool) do
75
97
  begin
76
98
  request = Request.new(socket, @options)
77
99
  response = Response.new(socket)
@@ -82,6 +104,8 @@ module Reifier
82
104
  response << @app.call(request.rack_env)
83
105
 
84
106
  response.handle
107
+ rescue EOFError
108
+ # nothing, shit happens
85
109
  rescue Exception => e
86
110
  socket.close
87
111
 
@@ -90,7 +114,7 @@ module Reifier
90
114
  STDERR.puts e.backtrace
91
115
  STDERR.puts ERROR_FOOTER
92
116
  end
93
- end
117
+ end.execute
94
118
  end
95
119
  end
96
120
  end
@@ -1,3 +1,3 @@
1
1
  module Reifier
2
- VERSION = "0.4.0".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  end
data/lib/reifier.rb CHANGED
@@ -79,7 +79,8 @@ module Reifier
79
79
  POST = 'POST'.freeze
80
80
  PUT = 'PUT'.freeze
81
81
 
82
- HTTPParseError = Class.new(StandardError)
82
+ HTTPParseError = Class.new(StandardError)
83
+ UnsupportedOptionError = Class.new(StandardError)
83
84
  ERROR_HEADER = '=============================== FATAL SERVER ERROR =============================='.freeze
84
85
  ERROR_FOOTER = "=================================================================================\n\n\n".freeze
85
86
  end
data/reifier.gemspec CHANGED
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency 'minitest-reporters', '~> 1.1'
37
37
  spec.add_development_dependency 'rubocop', '~> 0.37'
38
38
  spec.add_development_dependency 'rack', '~> 2.0.0.alpha'
39
+ spec.add_development_dependency 'codeclimate-test-reporter'
39
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benny Klotz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-17 00:00:00.000000000 Z
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 2.0.0.alpha
125
+ - !ruby/object:Gem::Dependency
126
+ name: codeclimate-test-reporter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: A threaded and preforked rack app server written in pure ruby
126
140
  email:
127
141
  - benny.klotz92@gmail.com