trinidad_worker_extension 0.1.0 → 0.2.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.
- data/lib/trinidad_worker_extension.rb +52 -10
- data/lib/trinidad_worker_extension/version.rb +1 -1
- data/spec/app/config.ru +9 -2
- data/spec/trinidad_worker_extension_spec.rb +25 -9
- metadata +122 -146
@@ -27,15 +27,16 @@ module Trinidad
|
|
27
27
|
|
28
28
|
def configure_worker(context, name, config)
|
29
29
|
config = config.dup
|
30
|
+
params = {}
|
30
31
|
if script = config.delete(:script)
|
31
|
-
|
32
|
+
params['jruby.worker.script'] = script
|
32
33
|
end
|
33
34
|
if script_path = config.delete(:script_path)
|
34
|
-
|
35
|
+
params['jruby.worker.script.path'] = script_path
|
35
36
|
end
|
36
37
|
if script.nil? && script_path.nil?
|
37
38
|
if name
|
38
|
-
|
39
|
+
params['jruby.worker'] = name.to_s
|
39
40
|
else
|
40
41
|
context.logger.warn "not-starting any workers due missing configuration " +
|
41
42
|
"either set :script or :script_path if you're not using a built-in worker"
|
@@ -45,15 +46,15 @@ module Trinidad
|
|
45
46
|
config.each do |key, value|
|
46
47
|
case key.to_s
|
47
48
|
when 'thread_count'
|
48
|
-
|
49
|
+
params['jruby.worker.thread.count'] = value.to_s
|
49
50
|
when 'thread_priority'
|
50
|
-
|
51
|
+
params['jruby.worker.thread.priority'] = value.to_s
|
51
52
|
else
|
52
53
|
value = value.join(',') if value.respond_to?(:join)
|
53
|
-
|
54
|
+
params[key.to_s] = value.to_s
|
54
55
|
end
|
55
56
|
end
|
56
|
-
context.add_lifecycle_listener listener = WorkerLifecycle.new
|
57
|
+
context.add_lifecycle_listener listener = WorkerLifecycle.new(params)
|
57
58
|
listener
|
58
59
|
end
|
59
60
|
|
@@ -61,15 +62,56 @@ module Trinidad
|
|
61
62
|
|
62
63
|
class WorkerLifecycle < Trinidad::Lifecycle::Base
|
63
64
|
|
65
|
+
attr_reader :context_parameters
|
66
|
+
|
67
|
+
def initialize(params)
|
68
|
+
@context_parameters = params || {}
|
69
|
+
if @context_parameters.empty?
|
70
|
+
raise ArgumentError, "no context parameters"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
64
74
|
def configure_start(event)
|
65
75
|
context = event.lifecycle
|
66
|
-
|
67
|
-
context
|
76
|
+
add_context_parameters(context)
|
77
|
+
add_class_loader_jar_url(context)
|
68
78
|
# NOTE: it's important for this listener to be added after
|
69
79
|
# the Rack setup as it expectd to find the RackFactory ...
|
70
80
|
# that's why we hook into #configure_start which happens
|
71
81
|
# right after #before_start but before the actual #start !
|
72
|
-
context
|
82
|
+
add_application_listener(context)
|
83
|
+
end
|
84
|
+
|
85
|
+
protected
|
86
|
+
|
87
|
+
def add_context_parameters(context)
|
88
|
+
app_params = context.find_application_parameters
|
89
|
+
context_parameters.each do |name, value|
|
90
|
+
if app_param = app_params.find { |param| param.name == name }
|
91
|
+
app_param.value = value
|
92
|
+
else
|
93
|
+
# a "better" context.add_parameter(name, value) :
|
94
|
+
app_param = Trinidad::Tomcat::ApplicationParameter.new
|
95
|
+
app_param.name = name; app_param.value = value
|
96
|
+
app_param.override = false # confusing to override in web.xml
|
97
|
+
context.add_application_parameter app_param
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def add_class_loader_jar_url(context)
|
103
|
+
jar_file = java.io.File.new JRuby::Rack::Worker::JAR_PATH
|
104
|
+
class_loader = context.loader.class_loader
|
105
|
+
unless class_loader.getURLs.include?(jar_file.to_url)
|
106
|
+
class_loader.addURL jar_file.to_url
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def add_application_listener(context)
|
111
|
+
listener = CONTEXT_LISTENER
|
112
|
+
unless context.find_application_listeners.include?(listener)
|
113
|
+
context.add_application_listener listener
|
114
|
+
end
|
73
115
|
end
|
74
116
|
|
75
117
|
end
|
data/spec/app/config.ru
CHANGED
@@ -1,2 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# make sure resque can be loaded :
|
2
|
+
begin
|
3
|
+
require 'resque'
|
4
|
+
rescue LoadError => e
|
5
|
+
require('rubygems') && retry; raise e
|
6
|
+
end
|
7
|
+
# and rackup a simple app :
|
8
|
+
use Rack::CommonLogger
|
9
|
+
run Proc.new { [200, {'Content-Type' => 'text/plain'}, 'OK'] }
|
@@ -12,13 +12,14 @@ describe Trinidad::Extensions::WorkerWebAppExtension do
|
|
12
12
|
|
13
13
|
Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, tomcat, context)
|
14
14
|
|
15
|
-
|
15
|
+
it_includes_worker_lifecycle_listener(context)
|
16
|
+
|
17
|
+
listener = worker_lifecycle_listener_for(context)
|
18
|
+
params = listener.context_parameters
|
16
19
|
expect( params['jruby.worker'] ).to eql 'delayed_job'
|
17
20
|
expect( params['jruby.worker.thread.count'] ).to eql '2'
|
18
21
|
expect( params['READ_AHEAD'] ).to eql '3'
|
19
22
|
expect( params['SLEEP_DELAY'] ).to eql '3.0'
|
20
|
-
|
21
|
-
it_includes_worker_lifecycle_listener(context)
|
22
23
|
end
|
23
24
|
|
24
25
|
it "configures (resque) worker" do
|
@@ -27,17 +28,18 @@ describe Trinidad::Extensions::WorkerWebAppExtension do
|
|
27
28
|
|
28
29
|
Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, tomcat, context)
|
29
30
|
|
30
|
-
|
31
|
+
it_includes_worker_lifecycle_listener(context)
|
32
|
+
|
33
|
+
listener = worker_lifecycle_listener_for(context)
|
34
|
+
params = listener.context_parameters
|
31
35
|
expect( params['jruby.worker'] ).to eql 'resque'
|
32
36
|
expect( params['jruby.worker.thread.priority'] ).to eql 'MIN'
|
33
37
|
expect( params['QUEUES'] ).to eql 'low,normal'
|
34
38
|
expect( params['INTERVAL'] ).to eql '1.5'
|
35
39
|
expect( params['VERBOSE'] ).to eql 'true'
|
36
|
-
|
37
|
-
it_includes_worker_lifecycle_listener(context)
|
38
40
|
end
|
39
41
|
|
40
|
-
describe 'WorkerLifecycle' do
|
42
|
+
describe 'WorkerLifecycle', :integration => true do
|
41
43
|
|
42
44
|
before do
|
43
45
|
Trinidad.configure! { load File.join(APP_DIR, 'trinidad.rb') }
|
@@ -54,17 +56,31 @@ describe Trinidad::Extensions::WorkerWebAppExtension do
|
|
54
56
|
@context.start
|
55
57
|
end
|
56
58
|
|
57
|
-
it "configures worker context listener" do
|
59
|
+
it "configures worker context listener and init params" do
|
58
60
|
class_name = 'org.kares.jruby.rack.WorkerContextListener'
|
59
61
|
expect( @context.find_application_listeners ).to include class_name
|
62
|
+
expect( @context.servlet_context.get_init_parameter('jruby.worker') ).to eql 'resque'
|
63
|
+
expect( @context.servlet_context.get_init_parameter('QUEUES') ).to eql 'low,normal'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "re-configures on reload" do
|
67
|
+
@context.reload
|
68
|
+
class_name = 'org.kares.jruby.rack.WorkerContextListener'
|
69
|
+
expect( @context.find_application_listeners ).to include class_name
|
70
|
+
expect( @context.servlet_context.get_init_parameter('jruby.worker') ).to eql 'resque'
|
71
|
+
expect( @context.servlet_context.get_init_parameter('QUEUES') ).to eql 'low,normal'
|
60
72
|
end
|
61
73
|
|
62
74
|
end
|
63
75
|
|
64
76
|
def it_includes_worker_lifecycle_listener(context)
|
77
|
+
expect( worker_lifecycle_listener_for(context) ).to_not be nil
|
78
|
+
end
|
79
|
+
|
80
|
+
def worker_lifecycle_listener_for(context)
|
65
81
|
listeners = context.find_lifecycle_listeners
|
66
82
|
klass = Trinidad::Extensions::WorkerWebAppExtension::WorkerLifecycle
|
67
|
-
|
83
|
+
listeners.find { |l| l.is_a?(klass) }
|
68
84
|
end
|
69
85
|
|
70
86
|
protected
|
metadata
CHANGED
@@ -1,161 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: trinidad_worker_extension
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
- Karol Bucek
|
9
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- Karol Bucek
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
- -
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
prerelease: false
|
79
|
-
type: :development
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: rake
|
82
|
-
version_requirements: !ruby/object:Gem::Requirement
|
83
|
-
requirements:
|
84
|
-
- - ! '>='
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: !binary |-
|
87
|
-
MA==
|
88
|
-
none: false
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: !binary |-
|
94
|
-
MA==
|
95
|
-
none: false
|
96
|
-
prerelease: false
|
97
|
-
type: :development
|
98
|
-
description: ! "Trinidad background worker extension built upon \n JRuby-Rack-Worker\
|
99
|
-
\ which provides threaded workers along side your (JRuby-Rack)\n application. Includes\
|
100
|
-
\ (thread-safe) out-of-the-box implementations for popular\n worker libraries such\
|
101
|
-
\ as Resque and Delayed::Job but customized 'daemon' \n scripts can be used as\
|
102
|
-
\ well."
|
103
|
-
email:
|
104
|
-
- self@kares.org
|
12
|
+
|
13
|
+
date: 2012-10-29 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: trinidad
|
17
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.4.1
|
23
|
+
requirement: *id001
|
24
|
+
prerelease: false
|
25
|
+
type: :runtime
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: jruby-rack-worker
|
28
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0.7"
|
34
|
+
requirement: *id002
|
35
|
+
prerelease: false
|
36
|
+
type: :runtime
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "2.10"
|
45
|
+
requirement: *id003
|
46
|
+
prerelease: false
|
47
|
+
type: :development
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: mocha
|
50
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
requirement: *id004
|
57
|
+
prerelease: false
|
58
|
+
type: :development
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rake
|
61
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
requirement: *id005
|
68
|
+
prerelease: false
|
69
|
+
type: :development
|
70
|
+
description: |-
|
71
|
+
Trinidad background worker extension built upon
|
72
|
+
JRuby-Rack-Worker which provides threaded workers along side your (JRuby-Rack)
|
73
|
+
application. Includes (thread-safe) out-of-the-box implementations for popular
|
74
|
+
worker libraries such as Resque and Delayed::Job but customized 'daemon'
|
75
|
+
scripts can be used as well.
|
76
|
+
email:
|
77
|
+
- self@kares.org
|
105
78
|
executables: []
|
79
|
+
|
106
80
|
extensions: []
|
107
|
-
|
108
|
-
|
109
|
-
-
|
110
|
-
|
111
|
-
|
112
|
-
-
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
- lib/trinidad_worker_extension
|
118
|
-
-
|
119
|
-
- spec/app/
|
120
|
-
- spec/app/trinidad.
|
121
|
-
- spec/
|
122
|
-
- spec/
|
123
|
-
-
|
81
|
+
|
82
|
+
extra_rdoc_files:
|
83
|
+
- README.md
|
84
|
+
- LICENSE
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- LICENSE
|
89
|
+
- README.md
|
90
|
+
- Rakefile
|
91
|
+
- lib/trinidad_worker_extension.rb
|
92
|
+
- lib/trinidad_worker_extension/version.rb
|
93
|
+
- spec/app/config.ru
|
94
|
+
- spec/app/trinidad.rb
|
95
|
+
- spec/app/trinidad.yml
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- spec/trinidad_worker_extension_spec.rb
|
98
|
+
- trinidad_worker_extension.gemspec
|
124
99
|
homepage: http://github.com/kares/trinidad_worker_extension
|
125
100
|
licenses: []
|
126
|
-
|
101
|
+
|
102
|
+
post_install_message:
|
127
103
|
rdoc_options: []
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
- - ! '>='
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
segments:
|
135
|
-
- 0
|
136
|
-
hash: 2
|
137
|
-
version: !binary |-
|
138
|
-
MA==
|
104
|
+
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
108
|
none: false
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
MA==
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 2
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
117
|
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 2
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
150
125
|
requirements: []
|
151
|
-
|
126
|
+
|
127
|
+
rubyforge_project:
|
152
128
|
rubygems_version: 1.8.24
|
153
|
-
signing_key:
|
129
|
+
signing_key:
|
154
130
|
specification_version: 3
|
155
131
|
summary: Background Worker Extension for Trinidad
|
156
|
-
test_files:
|
157
|
-
- spec/app/config.ru
|
158
|
-
- spec/app/trinidad.rb
|
159
|
-
- spec/app/trinidad.yml
|
160
|
-
- spec/spec_helper.rb
|
161
|
-
- spec/trinidad_worker_extension_spec.rb
|
132
|
+
test_files:
|
133
|
+
- spec/app/config.ru
|
134
|
+
- spec/app/trinidad.rb
|
135
|
+
- spec/app/trinidad.yml
|
136
|
+
- spec/spec_helper.rb
|
137
|
+
- spec/trinidad_worker_extension_spec.rb
|