mlanett-hive 0.3.0 → 0.4.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/Gemfile +3 -2
- data/bin/hive +4 -7
- data/{lib/hive → demo}/squiggly.rb +0 -0
- data/lib/hive.rb +1 -0
- data/lib/hive/configuration.rb +0 -14
- data/lib/hive/policy.rb +12 -20
- data/lib/hive/pool.rb +7 -6
- data/lib/hive/utilities/hash.rb +15 -0
- data/lib/hive/version.rb +1 -1
- data/spec/helper.rb +1 -1
- data/spec/policy_spec.rb +1 -1
- metadata +8 -7
data/Gemfile
CHANGED
@@ -4,11 +4,12 @@ source "http://rubygems.org"
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :development, :test do
|
7
|
+
gem "growl_notify" # for guard
|
7
8
|
gem "guard-rspec"
|
9
|
+
gem "rake"
|
8
10
|
gem "rb-fsevent" # for guard
|
9
|
-
gem "growl_notify" # for guard
|
10
11
|
gem "rspec"
|
11
|
-
|
12
|
+
### "ruby-debug19", require: false
|
12
13
|
end
|
13
14
|
|
14
15
|
group :test do
|
data/bin/hive
CHANGED
@@ -20,17 +20,14 @@
|
|
20
20
|
File.expand_path(File.dirname(__FILE__)+"/../lib").tap { |d| $:.unshift(d) if ! $:.member?(d) }
|
21
21
|
require "hive"
|
22
22
|
|
23
|
-
|
23
|
+
options = Hive::Configuration.parse(ARGV)
|
24
24
|
|
25
|
-
|
26
|
-
# TODO use my.args_for_daemon_spawn
|
27
|
-
|
28
|
-
if ! my.dry_run then
|
25
|
+
if ! options.dry_run then
|
29
26
|
case ARGV.first
|
30
27
|
when "stop"
|
31
|
-
Hive::Monitor.new(
|
28
|
+
Hive::Monitor.new(options).stop_all
|
32
29
|
when "monitor"
|
33
|
-
Hive::Monitor.new(
|
30
|
+
Hive::Monitor.new(options).monitor
|
34
31
|
else
|
35
32
|
Kernel.abort "Unknown command #{ARGV.first}"
|
36
33
|
end
|
File without changes
|
data/lib/hive.rb
CHANGED
@@ -27,6 +27,7 @@ end
|
|
27
27
|
|
28
28
|
module Hive::Utilities
|
29
29
|
autoload :AirbrakeObserver, "hive/utilities/airbrake_observer"
|
30
|
+
autoload :Hash, "hive/utilities/hash"
|
30
31
|
autoload :HoptoadObserver, "hive/utilities/hoptoad_observer"
|
31
32
|
autoload :LogObserver, "hive/utilities/log_observer"
|
32
33
|
autoload :NullObserver, "hive/utilities/null_observer"
|
data/lib/hive/configuration.rb
CHANGED
@@ -145,20 +145,6 @@ class Hive::Configuration
|
|
145
145
|
self
|
146
146
|
end
|
147
147
|
|
148
|
-
def options_for_daemon_spawn
|
149
|
-
mkdirp root, "#{root}/log", "#{root}/tmp", "#{root}/tmp/pids" if ! dry_run
|
150
|
-
return {
|
151
|
-
working_dir: root,
|
152
|
-
log_file: "#{root}/log/#{name}_#{env}.log",
|
153
|
-
pid_file: "#{root}/tmp/pids/#{name}_#{env}.pid",
|
154
|
-
sync_log: local?
|
155
|
-
}
|
156
|
-
end
|
157
|
-
|
158
|
-
def args_for_daemon_spawn
|
159
|
-
args + [self]
|
160
|
-
end
|
161
|
-
|
162
148
|
# ----------------------------------------------------------------------------
|
163
149
|
# DSL
|
164
150
|
# ----------------------------------------------------------------------------
|
data/lib/hive/policy.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
require "ostruct"
|
4
|
-
|
5
3
|
class Hive::Policy
|
6
4
|
|
7
5
|
DEFAULTS = {
|
@@ -19,19 +17,9 @@ class Hive::Policy
|
|
19
17
|
observers: []
|
20
18
|
}
|
21
19
|
|
22
|
-
class Instance
|
23
|
-
|
24
|
-
# including options[:policy] will merge over these options
|
25
20
|
def initialize( options = {} )
|
26
|
-
if options[:policy] then
|
27
|
-
policy = options.delete(:policy)
|
28
|
-
defaults = policy.dup
|
29
|
-
else
|
30
|
-
defaults = DEFAULTS
|
31
|
-
end
|
32
|
-
|
33
21
|
options = Hash[ options.map { |k,v| [ k.to_sym, v ] } ] # poor man's symbolize keys
|
34
|
-
@options =
|
22
|
+
@options = DEFAULTS.merge( options )
|
35
23
|
end
|
36
24
|
|
37
25
|
def storage
|
@@ -42,8 +30,13 @@ class Hive::Policy
|
|
42
30
|
@options[symbol.to_sym]
|
43
31
|
end
|
44
32
|
|
33
|
+
def merge( options = {} )
|
34
|
+
@options.merge!( options )
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
45
38
|
def dup
|
46
|
-
@options.dup
|
39
|
+
self.class.new( @options.dup )
|
47
40
|
end
|
48
41
|
|
49
42
|
def before_fork
|
@@ -54,13 +47,12 @@ class Hive::Policy
|
|
54
47
|
(after_forks || []).each { |f| f.call }
|
55
48
|
end
|
56
49
|
|
57
|
-
end # Instance
|
58
|
-
|
59
50
|
class << self
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
51
|
+
# @returns a new policy
|
52
|
+
# @options_or_policy can be a set of options or a source policy
|
53
|
+
def resolve( options_or_policy = {} )
|
54
|
+
# if it is a policy, just dup it
|
55
|
+
options_or_policy.kind_of?(Hive::Policy) ? options_or_policy.dup : new(options_or_policy.dup)
|
64
56
|
end
|
65
57
|
|
66
58
|
end # class
|
data/lib/hive/pool.rb
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
class Hive::Pool
|
11
11
|
|
12
12
|
include Hive::Log
|
13
|
+
include Hive::Utilities::Hash
|
13
14
|
|
14
15
|
attr :kind # job class
|
15
16
|
attr :name
|
@@ -36,8 +37,8 @@ class Hive::Pool
|
|
36
37
|
# @param options[:log] can be true
|
37
38
|
# @returns the checked worker lists
|
38
39
|
def synchronize( options = {} )
|
39
|
-
|
40
|
-
|
40
|
+
assert_valid_keys( options, :log )
|
41
|
+
do_log = options[:log]
|
41
42
|
|
42
43
|
checklist = registry.checked_workers( policy )
|
43
44
|
live_count = checklist.live.size
|
@@ -91,8 +92,8 @@ class Hive::Pool
|
|
91
92
|
# this really should be protected but it's convenient to be able to force a spawn
|
92
93
|
# param options[:wait] can true to wait until after the process is spawned
|
93
94
|
def spawn( options = {} )
|
94
|
-
|
95
|
-
|
95
|
+
assert_valid_keys( options, :wait )
|
96
|
+
wait = options[:wait]
|
96
97
|
|
97
98
|
if ! wait then
|
98
99
|
Hive::Worker.spawn kind, registry: registry, policy: policy, name: name
|
@@ -113,8 +114,8 @@ class Hive::Pool
|
|
113
114
|
|
114
115
|
# shut down a worker
|
115
116
|
def reap( key, options = {} )
|
116
|
-
|
117
|
-
|
117
|
+
assert_valid_keys( options, :wait )
|
118
|
+
wait = options[:wait]
|
118
119
|
|
119
120
|
if key.host == Hive::Key.local_host then
|
120
121
|
::Process.kill( "TERM", key.pid )
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
=begin
|
4
|
+
Gives you assert_valid_keys without infecting Hash
|
5
|
+
=end
|
6
|
+
|
7
|
+
module Hive::Utilities::Hash
|
8
|
+
|
9
|
+
def assert_valid_keys( hash, *valid_keys )
|
10
|
+
hash.each_key do |key|
|
11
|
+
raise(ArgumentError, "Unknown key: #{key}") unless valid_keys.include?(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/lib/hive/version.rb
CHANGED
data/spec/helper.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
=end
|
10
10
|
|
11
11
|
require "bundler/setup" # set up gem paths
|
12
|
-
|
12
|
+
####### "ruby-debug" # because sometimes you need it
|
13
13
|
|
14
14
|
#require "simplecov" # code coverage
|
15
15
|
#SimpleCov.start # must be loaded before our own code
|
data/spec/policy_spec.rb
CHANGED
@@ -27,7 +27,7 @@ describe Hive::Policy do
|
|
27
27
|
|
28
28
|
it "is copied from another policy" do
|
29
29
|
p1 = Hive::Policy.resolve worker_max_jobs: 7, worker_max_lifetime: 999
|
30
|
-
p2 =
|
30
|
+
p2 = p1.dup.merge worker_max_jobs: 12
|
31
31
|
|
32
32
|
p2.worker_max_lifetime.should eq(p1.worker_max_lifetime)
|
33
33
|
p1.worker_max_jobs.should eq(7)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlanett-hive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &70292391849280 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70292391849280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: redis-namespace
|
27
|
-
requirement: &
|
27
|
+
requirement: &70292391848860 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70292391848860
|
36
36
|
description:
|
37
37
|
email:
|
38
38
|
- mark.lanett@gmail.com
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- demo/job2.rb
|
57
57
|
- demo/job3.rb
|
58
58
|
- demo/populate.rb
|
59
|
+
- demo/squiggly.rb
|
59
60
|
- hive.gemspec
|
60
61
|
- lib/hive.rb
|
61
62
|
- lib/hive/checker.rb
|
@@ -71,9 +72,9 @@ files:
|
|
71
72
|
- lib/hive/pool.rb
|
72
73
|
- lib/hive/redis/storage.rb
|
73
74
|
- lib/hive/registry.rb
|
74
|
-
- lib/hive/squiggly.rb
|
75
75
|
- lib/hive/trace.rb
|
76
76
|
- lib/hive/utilities/airbrake_observer.rb
|
77
|
+
- lib/hive/utilities/hash.rb
|
77
78
|
- lib/hive/utilities/hoptoad_observer.rb
|
78
79
|
- lib/hive/utilities/log_observer.rb
|
79
80
|
- lib/hive/utilities/observeable.rb
|