maxwell_agent 0.0.5 → 0.0.7

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.
@@ -3,15 +3,18 @@ module Maxwell
3
3
  class WorkSchedule
4
4
  include Celluloid
5
5
 
6
+ def initialize
7
+ @schedule = RedisObjects::SortedSet.new_link('work_schedule')
8
+ @working = RedisObjects::Set.new_link('work_schedule:working')
9
+ end
10
+
6
11
  def add(work)
7
- async.add_work(work)
12
+ @schedule.async.add(work.generate_rank, work)
8
13
  work
9
14
  end
10
15
 
11
16
  def count
12
- redis do |redis|
13
- redis.zcard 'work_schedule'
14
- end
17
+ schedule.count
15
18
  end
16
19
 
17
20
  def get
@@ -19,22 +22,16 @@ module Maxwell
19
22
  end
20
23
 
21
24
  def put_back(work)
22
- remove_from_working_queue(work)
23
- async.add(work)
25
+ @working.async.remove(work)
26
+ add(work)
24
27
  end
25
28
 
26
29
  def working
27
- work_items = redis do |redis|
28
- redis.smembers 'work_schedule:working'
29
- end
30
- work_items.map {|work| Work.load(work) }
30
+ @working.all.map {|work| Work.load(work) }
31
31
  end
32
32
 
33
33
  def schedule
34
- work_items = redis do |redis|
35
- redis.zrange 'work_schedule', 0, -1
36
- end
37
- work_items.map {|work| Work.load(work) }
34
+ @schedule.all.map {|work| Work.load(work) }
38
35
  end
39
36
 
40
37
  def all
@@ -42,57 +39,27 @@ module Maxwell
42
39
  end
43
40
 
44
41
  private
45
- def redis(&block)
46
- Agent.redis(&block)
47
- end
48
42
 
49
43
  def find_ready_for_work
50
44
  work = get_work
51
- move_to_working_queue(work) if work && work.work_now?
52
- work
45
+ if work && work.work_now?
46
+ move_to_working_queue(work)
47
+ work
48
+ end
53
49
  end
54
50
 
55
51
  def get_work
56
- work = redis do |redis|
57
- redis.zrange('work_schedule', 0, 0)[0]
58
- end
59
-
52
+ work = @schedule.first
60
53
  Work.load(work) if work
61
54
  end
62
55
 
63
56
  def move_to_working_queue(work)
64
- add_to_working_queue(work)
65
- remove_from_main_queue(work)
66
- end
67
-
68
- def remove_from_main_queue(work)
69
- redis do |redis|
70
- redis.zrem 'work_schedule', work.to_json
71
- end
72
- end
73
-
74
- def add_to_working_queue(work)
75
- redis do |redis|
76
- redis.sadd 'work_schedule:working', work.to_json
77
- end
78
- end
79
-
80
- def remove_from_working_queue(work)
81
- redis do |redis|
82
- redis.srem 'work_schedule:working', work.to_json
83
- end
84
- end
85
-
86
- def add_work(work)
87
- redis do |redis|
88
- redis.zadd 'work_schedule', work.generate_rank, work.to_json
89
- end
57
+ @working.async.add(work)
58
+ @schedule.async.remove(work)
90
59
  end
91
60
 
92
61
  def is_being_worked_on?(work)
93
- redis do |redis|
94
- redis.sismember 'work_schedule:working', work.to_json
95
- end
62
+ @working.exists?(work)
96
63
  end
97
64
  end
98
65
  end
@@ -1,7 +1,6 @@
1
1
  module Maxwell
2
2
  module Agent
3
3
  class Worker
4
- include Celluloid
5
4
 
6
5
  def perform(work)
7
6
  work.perform
@@ -21,7 +20,7 @@ module Maxwell
21
20
  work.perform_at = nil
22
21
  work.last_run = Time.now
23
22
 
24
- Agent.middleware.invoke(work)
23
+ Agent.runner[:middleware_runner].inoke(work)
25
24
  end
26
25
  end
27
26
  end
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "fakeredis"
26
26
 
27
27
  spec.add_runtime_dependency "celluloid", "~> 0.15.0"
28
+ spec.add_runtime_dependency "celluloid-io"
28
29
  spec.add_runtime_dependency "activesupport"
29
30
  spec.add_runtime_dependency "connection_pool"
30
31
  spec.add_runtime_dependency "redis"
@@ -0,0 +1,2 @@
1
+ Plugins go in this dir
2
+ They will be automatically required
@@ -0,0 +1,15 @@
1
+ module Maxwell
2
+ module Agent
3
+ module Plugin
4
+ class CheckShell
5
+ include Maxwell::Agent::Probe
6
+
7
+ def perform(*args)
8
+ cmd = args.shift
9
+ args = args.join(' ')
10
+ system("#{cmd} #{args}")
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ module Maxwell
3
+ module Agent
4
+ describe Probe do
5
+
6
+ context 'Probe is included' do
7
+ Given(:probe) { Class.new { include Probe } }
8
+ When(:result) { probe.work_type }
9
+ Then { expect(result).to eq(:non_evented) }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,12 +2,7 @@ require 'spec_helper'
2
2
  module Maxwell
3
3
  module Agent
4
4
  describe Scheduler do
5
- before :each do
6
- runner = double(:runner)
7
- Agent.stub(:runner).and_return(runner)
8
- allow(runner).to receive(:[]).with(:scheduler).and_return(Maxwell::Scheduler.new)
9
- end
10
- Given(:scheduler) { Agent.runner[:scheduler] }
5
+
11
6
  end
12
7
  end
13
8
  end
@@ -10,24 +10,24 @@ module Maxwell
10
10
  end
11
11
 
12
12
  Given(:queue) { Agent.runner[:work_schedule] }
13
- Given(:work) { WorkTest.new.load(name: 'foo', work_class: 'bar') }
13
+ Given(:work) { Host::Service.new(name: 'foo', work_class: 'bar') }
14
14
  describe '.add' do
15
15
  context 'Work is added' do
16
16
  When(:result) { queue.add(work) }
17
- Then { expect(queue.count).to be 1 }
17
+ Then { expect(queue.count).to eq 1 }
18
18
  end
19
19
  context 'The same Work is added 2x' do
20
20
  Given { queue.add(work) }
21
21
  When { queue.add(work) }
22
- Then { expect(queue.count).to be 1 }
22
+ Then { expect(queue.count).to eq 1 }
23
23
  end
24
24
  end
25
25
 
26
26
  describe '.working' do
27
27
  Given { queue.add(work) }
28
28
  When { queue.get }
29
- Then { expect(queue.working.count).to be 1 }
30
- And { expect(queue.count).to be 0 }
29
+ Then { expect(queue.working.count).to eq 1 }
30
+ And { expect(queue.count).to eq 0 }
31
31
  end
32
32
 
33
33
  describe '.put_back' do
@@ -40,12 +40,12 @@ module Maxwell
40
40
 
41
41
  describe '.all' do
42
42
  Given { queue.add(work) }
43
- Given { queue.add(WorkTest.new.load(name: 'foo', work_class: 'bar',
43
+ Given { queue.add(Host::Service.new(name: 'foo', work_class: 'bar',
44
44
  perform_at: 5.minutes.ago)) }
45
45
  When { queue.get }
46
- Then { expect(queue.all.count).to be 2 }
47
- And { expect(queue.working.count).to be 1 }
48
- And { expect(queue.schedule.count).to be 1 }
46
+ Then { expect(queue.all.count).to eq 2 }
47
+ And { expect(queue.working.count).to eq 1 }
48
+ And { expect(queue.schedule.count).to eq 1 }
49
49
  end
50
50
 
51
51
  end
@@ -4,25 +4,14 @@ class Bar; end
4
4
 
5
5
  module Maxwell
6
6
  module Agent
7
- class WorkTest
7
+ class WorkTest < Host::Service
8
8
  include Work
9
- def initialize(attrs={})
10
- attrs.each do |key, value|
11
- send("#{key}=", value)
12
- end
13
- end
14
9
  end
15
10
 
16
11
  describe Work do
17
12
  Given(:work) { WorkTest.new name: :foo, work_class: 'Foo' }
18
13
  Given(:work2) { WorkTest.new name: :bar, work_class: 'Bar' }
19
14
 
20
- describe '#load' do
21
- Given(:work_json) { work.to_json }
22
- When(:result) { Work.load(work_json) }
23
- Then { expect(work_json).to eq(result.to_json) }
24
- end
25
-
26
15
  describe '.work_now?' do
27
16
  context 'work is scheduled normally' do
28
17
  Given { work.last_run = 1000.hours.ago }
@@ -1,10 +1,10 @@
1
1
  require 'rspec/given'
2
- require 'fakeredis/rspec'
3
2
  require 'maxwell/agent'
4
3
 
5
4
  RSpec.configure do |config|
6
5
  config.before(:each) do
7
6
  Celluloid.shutdown
8
7
  Celluloid.boot
8
+ Maxwell::Agent.redis {|redis| redis.flushdb }
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,167 +1,191 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maxwell_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Goff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-30 00:00:00.000000000 Z
11
+ date: 2014-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- version_requirements: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '1.3'
19
- prerelease: false
20
- type: :development
21
14
  name: bundler
22
15
  requirement: !ruby/object:Gem::Requirement
23
16
  requirements:
24
- - - "~>"
17
+ - - ~>
25
18
  - !ruby/object:Gem::Version
26
19
  version: '1.3'
27
- - !ruby/object:Gem::Dependency
20
+ type: :development
21
+ prerelease: false
28
22
  version_requirements: !ruby/object:Gem::Requirement
29
23
  requirements:
30
- - - ">="
24
+ - - ~>
31
25
  - !ruby/object:Gem::Version
32
- version: '0'
33
- prerelease: false
34
- type: :development
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
35
28
  name: rake
36
29
  requirement: !ruby/object:Gem::Requirement
37
30
  requirements:
38
- - - ">="
31
+ - - '>='
39
32
  - !ruby/object:Gem::Version
40
33
  version: '0'
41
- - !ruby/object:Gem::Dependency
34
+ type: :development
35
+ prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
- - - ">="
38
+ - - '>='
45
39
  - !ruby/object:Gem::Version
46
40
  version: '0'
47
- prerelease: false
48
- type: :development
41
+ - !ruby/object:Gem::Dependency
49
42
  name: rspec
50
43
  requirement: !ruby/object:Gem::Requirement
51
44
  requirements:
52
- - - ">="
45
+ - - '>='
53
46
  - !ruby/object:Gem::Version
54
47
  version: '0'
55
- - !ruby/object:Gem::Dependency
48
+ type: :development
49
+ prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
- - - ">="
52
+ - - '>='
59
53
  - !ruby/object:Gem::Version
60
54
  version: '0'
61
- prerelease: false
62
- type: :development
55
+ - !ruby/object:Gem::Dependency
63
56
  name: rpsec-given
64
57
  requirement: !ruby/object:Gem::Requirement
65
58
  requirements:
66
- - - ">="
59
+ - - '>='
67
60
  - !ruby/object:Gem::Version
68
61
  version: '0'
69
- - !ruby/object:Gem::Dependency
62
+ type: :development
63
+ prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
- - - ">="
66
+ - - '>='
73
67
  - !ruby/object:Gem::Version
74
68
  version: '0'
75
- prerelease: false
76
- type: :development
69
+ - !ruby/object:Gem::Dependency
77
70
  name: fakeredis
78
71
  requirement: !ruby/object:Gem::Requirement
79
72
  requirements:
80
- - - ">="
73
+ - - '>='
81
74
  - !ruby/object:Gem::Version
82
75
  version: '0'
83
- - !ruby/object:Gem::Dependency
76
+ type: :development
77
+ prerelease: false
84
78
  version_requirements: !ruby/object:Gem::Requirement
85
79
  requirements:
86
- - - "~>"
80
+ - - '>='
87
81
  - !ruby/object:Gem::Version
88
- version: 0.15.0
89
- prerelease: false
90
- type: :runtime
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
91
84
  name: celluloid
92
85
  requirement: !ruby/object:Gem::Requirement
93
86
  requirements:
94
- - - "~>"
87
+ - - ~>
95
88
  - !ruby/object:Gem::Version
96
89
  version: 0.15.0
97
- - !ruby/object:Gem::Dependency
90
+ type: :runtime
91
+ prerelease: false
98
92
  version_requirements: !ruby/object:Gem::Requirement
99
93
  requirements:
100
- - - ">="
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.15.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: celluloid-io
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
- prerelease: false
104
104
  type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
105
112
  name: activesupport
106
113
  requirement: !ruby/object:Gem::Requirement
107
114
  requirements:
108
- - - ">="
115
+ - - '>='
109
116
  - !ruby/object:Gem::Version
110
117
  version: '0'
111
- - !ruby/object:Gem::Dependency
118
+ type: :runtime
119
+ prerelease: false
112
120
  version_requirements: !ruby/object:Gem::Requirement
113
121
  requirements:
114
- - - ">="
122
+ - - '>='
115
123
  - !ruby/object:Gem::Version
116
124
  version: '0'
117
- prerelease: false
118
- type: :runtime
125
+ - !ruby/object:Gem::Dependency
119
126
  name: connection_pool
120
127
  requirement: !ruby/object:Gem::Requirement
121
128
  requirements:
122
- - - ">="
129
+ - - '>='
123
130
  - !ruby/object:Gem::Version
124
131
  version: '0'
125
- - !ruby/object:Gem::Dependency
132
+ type: :runtime
133
+ prerelease: false
126
134
  version_requirements: !ruby/object:Gem::Requirement
127
135
  requirements:
128
- - - ">="
136
+ - - '>='
129
137
  - !ruby/object:Gem::Version
130
138
  version: '0'
131
- prerelease: false
132
- type: :runtime
139
+ - !ruby/object:Gem::Dependency
133
140
  name: redis
134
141
  requirement: !ruby/object:Gem::Requirement
135
142
  requirements:
136
- - - ">="
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  description: Maxwell Agent
140
154
  email:
141
155
  - cpuguy83@gmail.com
142
- executables: []
156
+ executables:
157
+ - agent.rb
143
158
  extensions: []
144
159
  extra_rdoc_files: []
145
160
  files:
146
- - ".document"
147
- - ".gitignore"
148
- - ".travis.yml"
161
+ - .document
162
+ - .gitignore
163
+ - .travis.yml
149
164
  - Gemfile
150
165
  - Gemfile.lock
151
166
  - Guardfile
152
167
  - LICENSE.txt
153
168
  - README.md
154
169
  - Rakefile
170
+ - bin/agent.rb
155
171
  - config/host_configuration.json
156
172
  - lib/maxwell/agent.rb
173
+ - lib/maxwell/agent/attributes.rb
174
+ - lib/maxwell/agent/coercable.rb
157
175
  - lib/maxwell/agent/configuration.rb
158
- - lib/maxwell/agent/dynamic_attributes.rb
176
+ - lib/maxwell/agent/evented_worker.rb
159
177
  - lib/maxwell/agent/host.rb
178
+ - lib/maxwell/agent/host/service.rb
160
179
  - lib/maxwell/agent/middleware/chain.rb
161
180
  - lib/maxwell/agent/middleware/logging.rb
181
+ - lib/maxwell/agent/middleware_runner.rb
162
182
  - lib/maxwell/agent/probe.rb
183
+ - lib/maxwell/agent/redis_objects.rb
184
+ - lib/maxwell/agent/redis_objects/set.rb
185
+ - lib/maxwell/agent/redis_objects/sorted_set.rb
163
186
  - lib/maxwell/agent/runner.rb
164
187
  - lib/maxwell/agent/scheduler.rb
188
+ - lib/maxwell/agent/standard_worker.rb
165
189
  - lib/maxwell/agent/version.rb
166
190
  - lib/maxwell/agent/web.rb
167
191
  - lib/maxwell/agent/web_helpers.rb
@@ -170,8 +194,11 @@ files:
170
194
  - lib/maxwell/agent/worker.rb
171
195
  - lib/maxwell_agent.rb
172
196
  - maxwell_agent.gemspec
197
+ - plugins/README.md
198
+ - plugins/check_shell.rb
173
199
  - spec/agent/Guardfile
174
200
  - spec/agent/host_spec.rb
201
+ - spec/agent/probe_spec.rb
175
202
  - spec/agent/scheduler_spec.rb
176
203
  - spec/agent/work_schedule_spec.rb
177
204
  - spec/agent/work_spec.rb
@@ -187,23 +214,24 @@ require_paths:
187
214
  - lib
188
215
  required_ruby_version: !ruby/object:Gem::Requirement
189
216
  requirements:
190
- - - ">="
217
+ - - '>='
191
218
  - !ruby/object:Gem::Version
192
219
  version: '0'
193
220
  required_rubygems_version: !ruby/object:Gem::Requirement
194
221
  requirements:
195
- - - ">="
222
+ - - '>='
196
223
  - !ruby/object:Gem::Version
197
224
  version: '0'
198
225
  requirements: []
199
226
  rubyforge_project:
200
- rubygems_version: 2.1.10
227
+ rubygems_version: 2.0.3
201
228
  signing_key:
202
229
  specification_version: 4
203
230
  summary: Maxwell Agent
204
231
  test_files:
205
232
  - spec/agent/Guardfile
206
233
  - spec/agent/host_spec.rb
234
+ - spec/agent/probe_spec.rb
207
235
  - spec/agent/scheduler_spec.rb
208
236
  - spec/agent/work_schedule_spec.rb
209
237
  - spec/agent/work_spec.rb