robot-controller 0.3.4 → 0.3.5

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: 1794761a450cd6c42ca4915218eff8fc62479987
4
- data.tar.gz: 55091e82043f1257ccedbad8c5287ff0ba3ee32f
3
+ metadata.gz: 5b6e7b98160ab2e2bafcedeb13febf37519a8b29
4
+ data.tar.gz: ec59baf962a34f223fb8e7af52f5de9ee76c4818
5
5
  SHA512:
6
- metadata.gz: 730764d646e9588a538e6cec9abaa51862c52404ce1344e12615141e225b10fb297d8cab6a3764ada1cb1690853e913d891d95094b0edb6fc7caa14bd71ed4bb
7
- data.tar.gz: 9e1d35bdde7cc09d3b5a9b2fc4805b355c8028c2129188cde2bd47065da55e80909bc08dede71addcfbc8b84936c4089e5bebb62028f2c365dd4341cdf9613b6
6
+ metadata.gz: c091e368df94d1b6d5f20debecd7a7e450bf0bd3071c4aa026895a8eb882d96ea80d155abd68706735a791854184ca9ceca7080d1b13bcf283d5c6f7e9d44164
7
+ data.tar.gz: 474170f9cfeed0aa05ff970ae6bc62dfc068e4f94e3942abec40fce7beef5dcbfa6c01d5ce00b417ea719bd1f1e820e3d41c2d65f0c04e86771b41d5af7033d6
data/.gitignore CHANGED
@@ -35,5 +35,7 @@ build/
35
35
 
36
36
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
37
37
  .rvmrc
38
+ .ruby-gemset
39
+ .ruby-version
38
40
 
39
41
  config/environments
data/Rakefile CHANGED
@@ -5,4 +5,9 @@ require 'robot-controller/tasks'
5
5
 
6
6
  Dir.glob('lib/tasks/*.rake').each { |r| import r }
7
7
 
8
+ require 'rspec/core/rake_task'
9
+
10
+ desc "Run specs"
11
+ RSpec::Core::RakeTask.new(:spec)
12
+
8
13
  task :default => [ :yard ]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.4
1
+ 0.3.5
@@ -25,6 +25,12 @@ ENV['ROBOT_ENVIRONMENT'] ||= 'development'
25
25
  ENV['BLUEPILL_BASE_DIR'] ||= File.expand_path('run/bluepill')
26
26
  ENV['BLUEPILL_LOGFILE'] ||= File.expand_path('log/bluepill.log')
27
27
 
28
+ unless File.directory?('config') &&
29
+ File.directory?(File.dirname(ENV['BLUEPILL_BASE_DIR'])) &&
30
+ File.directory?(File.dirname(ENV['BLUEPILL_LOGFILE']))
31
+ raise "Run from root directory"
32
+ end
33
+
28
34
  cmd = 'bluepill'
29
35
  cmd << ' --no-privileged'
30
36
  cmd << " --base-dir #{ENV['BLUEPILL_BASE_DIR']}"
@@ -1,5 +1,4 @@
1
1
  # Monitors and controls running workflow robots off of priority queues and within a cluster.
2
- require 'robot-controller/work_dir'
3
2
 
4
3
  module RobotController
5
4
  # e.g., `1.2.3`
@@ -1,13 +1,16 @@
1
- WORKDIR = WorkDir.find Dir.pwd
1
+ WORKDIR = Dir.pwd
2
2
 
3
3
  robot_environment = ENV['ROBOT_ENVIRONMENT'] || 'development'
4
4
  require 'robot-controller/robots'
5
+ ROBOTS = RobotConfigParser.new.load("robots_#{robot_environment}.yml")
5
6
  #
6
7
  # Expect ROBOTS = [
7
8
  # {:robot => 'x', :queues => ['a', 'b'], :n => 1}
8
9
  # {:robot => 'z', :queues => ['b'], :n => 3}
9
10
  # ]
10
11
  #
12
+
13
+ # set application name to parent directory name
11
14
  Bluepill.application File.basename(File.dirname(File.dirname(WORKDIR))),
12
15
  :log_file => "#{WORKDIR}/log/bluepill.log" do |app|
13
16
  app.working_dir = WORKDIR
@@ -27,7 +27,7 @@ class RobotConfigParser
27
27
  # parse_lanes('A-C,E') == ['A-C', 'E']
28
28
  def parse_lanes(lanes_spec)
29
29
  return ['default'] if lanes_spec.split(/,/).collect {|l| l.strip}.join('') == ''
30
- lanes_spec.split(/,/).collect {|l| l.strip }
30
+ lanes_spec.split(/,/).collect {|l| l.strip }.uniq
31
31
  end
32
32
 
33
33
  # build_queues('z','A') => ['z_A']
@@ -41,19 +41,20 @@ class RobotConfigParser
41
41
  end
42
42
 
43
43
  # main entry point
44
- def load(env)
45
- # read the YAML file
46
- robots_fn = File.join('config', 'environments', "robots_#{env}.yml")
44
+ def load(robots_fn, dir = 'config/environments', host = nil)
45
+ # Validate parameters
46
+ robots_fn = File.join(dir, robots_fn) if dir
47
47
  unless File.file?(robots_fn)
48
48
  raise RuntimeError, "FileNotFound: #{robots_fn}"
49
49
  end
50
50
 
51
+ # read the YAML file
51
52
  puts "Loading #{robots_fn}"
52
53
  robots = YAML.load_file(robots_fn)
53
54
  # puts robots
54
55
 
55
56
  # determine current host
56
- host = `hostname -s`.strip
57
+ host = `hostname -s`.strip unless host
57
58
  # puts host
58
59
 
59
60
  # host = 'sul-robots1-dev' # XXX
@@ -93,6 +94,3 @@ class RobotConfigParser
93
94
  r
94
95
  end
95
96
  end
96
-
97
- ROBOTS = RobotConfigParser.new.load(ENV['ROBOT_ENVIRONMENT'] || 'development')
98
- # puts ROBOTS
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency 'awesome_print'
29
29
  s.add_development_dependency 'pry'
30
30
  s.add_development_dependency 'rake'
31
+ s.add_development_dependency 'rspec'
31
32
  s.add_development_dependency 'redcarpet' # provides Markdown
32
33
  s.add_development_dependency 'version_bumper'
33
34
  s.add_development_dependency 'yard'
@@ -0,0 +1,9 @@
1
+ host1:
2
+ - X
3
+ - Y:B
4
+ - Z:C:3
5
+ host2:
6
+ - A:*
7
+ - B:X,Y
8
+ - C:X,Y,Z:5
9
+ - D:default
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+
3
+ ENV['ROBOT_ENVIRONMENT'] ||= 'development'
4
+ ENV['ROBOT_LOG'] ||= '/dev/null'
5
+ ENV['ROBOT_LOG_LEVEL'] ||= 'debug'
6
+
7
+ require 'simplecov'
8
+ SimpleCov.start
9
+
10
+ require 'bundler/setup'
11
+ Bundler.require(:default, :development)
12
+
13
+ RSpec.configure do |config|
14
+ end
15
+
16
+ Rails = Object.new unless defined? Rails
@@ -0,0 +1,87 @@
1
+ require 'robot-controller/robots'
2
+
3
+ describe RobotConfigParser do
4
+
5
+ context "simple" do
6
+ subject {
7
+ RobotConfigParser.new.load('standard.yml', 'spec/fixtures', 'host1')
8
+ }
9
+
10
+ it "pass1" do
11
+ expect(subject).to eq [
12
+ {:robot=>"X", :queues=>["X_default"], :n=>1},
13
+ {:robot=>"Y", :queues=>["Y_B"], :n=>1},
14
+ {:robot=>"Z", :queues=>["Z_C"], :n=>3}
15
+ ]
16
+ end
17
+ end
18
+
19
+ context "expanded" do
20
+ subject {
21
+ RobotConfigParser.new.load('standard.yml', 'spec/fixtures', 'host2')
22
+ }
23
+
24
+ it "pass2" do
25
+ expect(subject).to eq [
26
+ {:robot=>"A", :queues=>["A_*"], :n=>1},
27
+ {:robot=>"B", :queues=>["B_X", "B_Y"], :n=>1},
28
+ {:robot=>"C", :queues=>["C_X", "C_Y", "C_Z"], :n=>5},
29
+ {:robot=>"D", :queues=>["D_default"], :n=>1},
30
+ ]
31
+ end
32
+ end
33
+
34
+ context "parse_instances" do
35
+ subject {
36
+ RobotConfigParser.new
37
+ }
38
+ it "valid inputs" do
39
+ expect(subject.parse_instances(0)).to eq 1
40
+ expect(subject.parse_instances(1)).to eq 1
41
+ expect(subject.parse_instances(16)).to eq 16
42
+ end
43
+
44
+ it "invalid inputs" do
45
+ expect {
46
+ subject.parse_instances(17)
47
+ }.to raise_error RuntimeError
48
+ end
49
+ end
50
+
51
+ context "parse_lanes" do
52
+ subject {
53
+ RobotConfigParser.new
54
+ }
55
+
56
+ it "valid inputs" do
57
+ expect(subject.parse_lanes('*')).to eq ['*']
58
+ expect(subject.parse_lanes('')).to eq ['default']
59
+ expect(subject.parse_lanes('default')).to eq ['default']
60
+ expect(subject.parse_lanes('A')).to eq ['A']
61
+ expect(subject.parse_lanes('A,B')).to eq ['A', 'B']
62
+ end
63
+
64
+ it "tricky inputs" do
65
+ expect(subject.parse_lanes(' ')).to eq ['default']
66
+ expect(subject.parse_lanes(' , ')).to eq ['default']
67
+ expect(subject.parse_lanes(' ,,')).to eq ['default']
68
+ expect(subject.parse_lanes('A , B')).to eq ['A','B']
69
+ expect(subject.parse_lanes('A-B')).to eq ['A-B']
70
+ expect(subject.parse_lanes('A,B,A')).to eq ['A','B']
71
+ end
72
+
73
+ end
74
+
75
+ context "build_queues" do
76
+ subject {
77
+ RobotConfigParser.new
78
+ }
79
+
80
+ it "valid inputs" do
81
+ expect(subject.build_queues('z','*')).to eq ['z_*']
82
+ expect(subject.build_queues('z','default')).to eq ['z_default']
83
+ expect(subject.build_queues('z','A,B,C')).to eq ['z_A','z_B','z_C']
84
+ end
85
+
86
+ end
87
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robot-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Hardy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2014-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bluepill
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: redcarpet
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -144,9 +158,11 @@ files:
144
158
  - lib/robot-controller/bluepill.rb
145
159
  - lib/robot-controller/robots.rb
146
160
  - lib/robot-controller/tasks.rb
147
- - lib/robot-controller/work_dir.rb
148
161
  - lib/tasks/doc.rake
149
162
  - robot-controller.gemspec
163
+ - spec/fixtures/standard.yml
164
+ - spec/spec_helper.rb
165
+ - spec/unit/robots_spec.rb
150
166
  homepage: http://github.com/sul-dlss/robot-controller
151
167
  licenses:
152
168
  - ALv2
@@ -173,5 +189,8 @@ signing_key:
173
189
  specification_version: 4
174
190
  summary: Monitors and controls running workflow robots off of priority queues and
175
191
  within a cluster
176
- test_files: []
192
+ test_files:
193
+ - spec/fixtures/standard.yml
194
+ - spec/spec_helper.rb
195
+ - spec/unit/robots_spec.rb
177
196
  has_rdoc: true
@@ -1,17 +0,0 @@
1
- class WorkDir
2
-
3
- def self.find base_dir
4
- return ROBOT_ROOT if defined? ROBOT_ROOT
5
-
6
- bot_root = base_dir
7
- base = Pathname.new base_dir
8
- base.ascend do |p|
9
- if p.parent.basename.to_s =~ /releases/
10
- bot_root = p
11
- break
12
- end
13
- end
14
- bot_root
15
- end
16
-
17
- end