robot-controller 2.1.1 → 3.0.0.beta1

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
- SHA1:
3
- metadata.gz: '083706512b49fd2b0e7524f07ff004a98fb52e95'
4
- data.tar.gz: 9c4ff0df158e04ec115bc923b7fa22a5ee965ef9
2
+ SHA256:
3
+ metadata.gz: d10cfdbeb6647684ddf8c0e585d51861868c891891be6943b413c7dae7a3b46c
4
+ data.tar.gz: 5968e0e0cad1d8c1d1418f2e5dbe3174d8b80f505efea4f23d413635d87b9639
5
5
  SHA512:
6
- metadata.gz: 35f1df04d0a53ee540137424aaeaf17f78c51538cc5efb625a1cb76087deaf9a67c25424d65e1bfff1b6379c4609b8a0380e61f15777bcd92a7aefeb8f64ade5
7
- data.tar.gz: 6ba6a5dd37b621a91db7f882389dc01b50bd8562ef2941d9203fabcce393fa3a58f8bc4c709924059521f91f37da9f8e7b12d33c38bf587e253a6fc08ee32558
6
+ metadata.gz: b6773382a73c343037241646665d51f929f13d013e36f9f05d01a7e7cf8a906b641c6265c0461a477592050d41f3b7e71a8ebafdc081da2a40b88c4a6b45bb4b
7
+ data.tar.gz: 2d06490374d1309f9be8507c7cded879b115ab422f5776cfadfdc70ef53f8882274a88974bfab608abf29a16894a3bb8554dba8353f2b79a71486673c99286cb
data/.gitignore CHANGED
@@ -17,12 +17,6 @@ run
17
17
  .repl_history
18
18
  build/
19
19
 
20
- ## Documentation cache and generated files:
21
- /.yardoc/
22
- /_yardoc/
23
- /doc/
24
- /rdoc/
25
-
26
20
  ## Environment normalisation:
27
21
  /.bundle/
28
22
  /lib/bundler/man/
data/.rubocop.yml CHANGED
@@ -1 +1,66 @@
1
1
  inherit_from: .rubocop_todo.yml
2
+
3
+ # Turn on RSpec cops
4
+ require: rubocop-rspec
5
+
6
+ AllCops:
7
+ DisplayCopNames: true
8
+ Include:
9
+ - Rakefile
10
+ - 'lib/**/*.rake'
11
+ Exclude:
12
+ - '**/*.md'
13
+ - 'vendor/**/*' # avoid running rubocop on travis cached bundler
14
+
15
+ # --- Layout ---
16
+
17
+ Layout/EmptyLinesAroundBlockBody:
18
+ Enabled: false
19
+
20
+ Layout/EmptyLinesAroundClassBody:
21
+ Enabled: false
22
+
23
+ Layout/EmptyLinesAroundModuleBody:
24
+ Enabled: false
25
+
26
+ Layout/SpaceAroundEqualsInParameterDefault:
27
+ Enabled: false
28
+
29
+ # --- Lint ---
30
+
31
+ # --- Metrics ---
32
+
33
+ Metrics/BlockLength:
34
+ Exclude:
35
+ - spec/**/*
36
+
37
+ Metrics/LineLength:
38
+ Max: 123 # this isn't 1994
39
+ # spec/unit/verify_spec.rb line 35 is 123 chars; would like to get it down to 120
40
+
41
+ # --- Naming ---
42
+
43
+ Naming/FileName:
44
+ Exclude:
45
+ - Gemfile
46
+ - robot-controller.gemspec
47
+ - lib/robot-controller.rb
48
+
49
+ # --- Performance ---
50
+
51
+ # --- RSpec ---
52
+
53
+ RSpec/MessageSpies:
54
+ Enabled: false # receive is fine; have_received is fine
55
+
56
+ # --- Style ---
57
+
58
+ Style/FrozenStringLiteralComment:
59
+ Enabled: false # avoid cruft in our files for something that MAY be default in Ruby 3.0
60
+
61
+ Style/StringLiterals:
62
+ Enabled: false # ' vs " isn't a big deal for readability or maintainability or execution time
63
+
64
+ Style/SymbolArray:
65
+ Exclude:
66
+ - Rakefile # because [:spec, :rubocop] isn't a big deal
data/.rubocop_todo.yml CHANGED
@@ -1,86 +1,152 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2017-01-10 17:11:53 -0800 using RuboCop version 0.46.0.
3
+ # on 2018-12-10 08:36:11 -0600 using RuboCop version 0.52.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 1
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: Include, TreatCommentsAsGroupSeparators.
12
+ # Include: **/*.gemspec
13
+ Gemspec/OrderedDependencies:
14
+ Exclude:
15
+ - 'robot-controller.gemspec'
16
+
17
+
18
+ # Offense count: 1
19
+ # Cop supports --auto-correct.
20
+ Layout/EmptyLineAfterMagicComment:
21
+ Exclude:
22
+ - 'robot-controller.gemspec'
23
+
24
+ # Offense count: 2
25
+ # Cop supports --auto-correct.
26
+ Layout/EmptyLinesAroundArguments:
27
+ Exclude:
28
+ - 'bin/controller'
29
+
30
+ # Offense count: 15
31
+ # Cop supports --auto-correct.
32
+ # Configuration parameters: IndentationWidth.
33
+ # SupportedStyles: special_inside_parentheses, consistent, align_brackets
34
+ Layout/IndentArray:
35
+ EnforcedStyle: consistent
36
+
37
+ # Offense count: 1
38
+ # Cop supports --auto-correct.
39
+ # Configuration parameters: EnforcedStyle.
40
+ # SupportedStyles: symmetrical, new_line, same_line
41
+ Layout/MultilineArrayBraceLayout:
42
+ Exclude:
43
+ - 'spec/unit/verify_spec.rb'
44
+
45
+ # Offense count: 1
46
+ Lint/AmbiguousBlockAssociation:
47
+ Exclude:
48
+ - 'config/schedule_example.rb'
49
+
9
50
  # Offense count: 3
10
51
  Metrics/AbcSize:
11
- Max: 90
52
+ Max: 80
12
53
 
13
- # Offense count: 2
14
- # Configuration parameters: CountComments.
54
+ # Offense count: 1
55
+ # Configuration parameters: CountComments, ExcludedMethods.
15
56
  Metrics/BlockLength:
16
- Max: 29
57
+ Max: 26
17
58
 
18
59
  # Offense count: 1
60
+ # Configuration parameters: CountBlocks.
19
61
  Metrics/BlockNesting:
20
62
  Max: 4
21
63
 
22
64
  # Offense count: 2
23
65
  Metrics/CyclomaticComplexity:
24
- Max: 24
25
-
26
- # Offense count: 33
27
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
28
- # URISchemes: http, https
29
- Metrics/LineLength:
30
- Max: 123
66
+ Max: 23
31
67
 
32
68
  # Offense count: 5
33
69
  # Configuration parameters: CountComments.
34
70
  Metrics/MethodLength:
35
- Max: 89
71
+ Max: 87
36
72
 
37
73
  # Offense count: 2
38
74
  Metrics/PerceivedComplexity:
39
- Max: 22
75
+ Max: 20
40
76
 
41
- # Offense count: 1
42
- # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
43
- Style/FileName:
77
+ # Offense count: 14
78
+ # Configuration parameters: Prefixes.
79
+ # Prefixes: when, with, without
80
+ RSpec/ContextWording:
81
+ Exclude:
82
+ - 'spec/unit/robots_spec.rb'
83
+ - 'spec/unit/verify_spec.rb'
84
+
85
+ # Offense count: 12
86
+ # Configuration parameters: SkipBlocks, EnforcedStyle.
87
+ # SupportedStyles: described_class, explicit
88
+ RSpec/DescribedClass:
44
89
  Exclude:
45
- - 'lib/robot-controller.rb'
90
+ - 'spec/unit/robots_spec.rb'
91
+ - 'spec/unit/verify_spec.rb'
46
92
 
47
93
  # Offense count: 1
48
- # Configuration parameters: EnforcedStyle, SupportedStyles.
49
- # SupportedStyles: format, sprintf, percent
50
- Style/FormatString:
94
+ RSpec/EmptyLineAfterSubject:
51
95
  Exclude:
52
- - 'lib/robot-controller/bluepill.rb'
96
+ - 'spec/unit/verify_spec.rb'
53
97
 
54
- # Offense count: 3
55
- # Configuration parameters: MinBodyLength.
56
- Style/GuardClause:
98
+ # Offense count: 11
99
+ # Configuration parameters: Max.
100
+ RSpec/ExampleLength:
57
101
  Exclude:
58
- - 'lib/robot-controller/robots.rb'
59
- - 'lib/robot-controller/verify.rb'
102
+ - 'spec/unit/robots_spec.rb'
103
+ - 'spec/unit/verify_spec.rb'
60
104
 
61
- # Offense count: 15
62
- # Cop supports --auto-correct.
63
- # Configuration parameters: SupportedStyles, IndentationWidth.
64
- # SupportedStyles: special_inside_parentheses, consistent, align_brackets
65
- Style/IndentArray:
66
- EnforcedStyle: consistent
105
+ # Offense count: 2
106
+ # Configuration parameters: CustomTransform, IgnoreMethods.
107
+ RSpec/FilePath:
108
+ Exclude:
109
+ - 'spec/unit/robots_spec.rb'
110
+ - 'spec/unit/verify_spec.rb'
111
+
112
+ # Offense count: 7
113
+ # Configuration parameters: AggregateFailuresByDefault.
114
+ RSpec/MultipleExpectations:
115
+ Max: 6
116
+
117
+ # Offense count: 30
118
+ RSpec/NamedSubject:
119
+ Exclude:
120
+ - 'spec/unit/robots_spec.rb'
121
+ - 'spec/unit/verify_spec.rb'
122
+
123
+ # Offense count: 8
124
+ RSpec/SubjectStub:
125
+ Exclude:
126
+ - 'spec/unit/verify_spec.rb'
67
127
 
68
128
  # Offense count: 1
69
129
  # Cop supports --auto-correct.
70
- # Configuration parameters: EnforcedStyle, SupportedStyles.
71
- # SupportedStyles: symmetrical, new_line, same_line
72
- Style/MultilineArrayBraceLayout:
130
+ Style/Encoding:
73
131
  Exclude:
74
- - 'spec/unit/verify_spec.rb'
132
+ - 'robot-controller.gemspec'
133
+
134
+ # Offense count: 3
135
+ # Configuration parameters: MinBodyLength.
136
+ Style/GuardClause:
137
+ Exclude:
138
+ - 'lib/robot-controller/parser.rb'
139
+ - 'lib/robot-controller/verify.rb'
75
140
 
76
141
  # Offense count: 5
77
142
  # Cop supports --auto-correct.
143
+ # Configuration parameters: Strict.
78
144
  Style/NumericLiterals:
79
145
  MinDigits: 6
80
146
 
81
147
  # Offense count: 5
82
148
  # Cop supports --auto-correct.
83
- # Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
149
+ # Configuration parameters: AutoCorrect, EnforcedStyle.
84
150
  # SupportedStyles: predicate, comparison
85
151
  Style/NumericPredicate:
86
152
  Exclude:
@@ -88,30 +154,39 @@ Style/NumericPredicate:
88
154
  - 'bin/controller'
89
155
  - 'lib/robot-controller/verify.rb'
90
156
 
91
- # Offense count: 14
157
+ # Offense count: 10
92
158
  # Cop supports --auto-correct.
93
- # Configuration parameters: EnforcedStyle, SupportedStyles.
94
- # SupportedStyles: only_raise, only_fail, semantic
95
- Style/SignalException:
159
+ # Configuration parameters: PreferredDelimiters.
160
+ Style/PercentLiteralDelimiters:
96
161
  Exclude:
97
- - 'bin/controller'
98
- - 'lib/robot-controller/robots.rb'
99
- - 'lib/robot-controller/verify.rb'
162
+ - 'spec/unit/robots_spec.rb'
163
+ - 'spec/unit/verify_spec.rb'
100
164
 
101
165
  # Offense count: 1
102
- # Configuration parameters: Methods.
103
- # Methods: {"reduce"=>["acc", "elem"]}, {"inject"=>["acc", "elem"]}
104
- Style/SingleLineBlockParams:
166
+ # Cop supports --auto-correct.
167
+ # Configuration parameters: EnforcedStyle.
168
+ # SupportedStyles: implicit, explicit
169
+ Style/RescueStandardError:
170
+ Exclude:
171
+ - 'bin/controller'
172
+
173
+ # Offense count: 12
174
+ # Cop supports --auto-correct.
175
+ # Configuration parameters: EnforcedStyle.
176
+ # SupportedStyles: only_raise, only_fail, semantic
177
+ Style/SignalException:
105
178
  Exclude:
179
+ - 'bin/controller'
180
+ - 'lib/robot-controller/parser.rb'
106
181
  - 'lib/robot-controller/verify.rb'
107
182
 
108
183
  # Offense count: 2
109
184
  # Cop supports --auto-correct.
110
- # Configuration parameters: EnforcedStyle, SupportedStyles, AllowSafeAssignment.
185
+ # Configuration parameters: EnforcedStyle, AllowSafeAssignment.
111
186
  # SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
112
187
  Style/TernaryParentheses:
113
188
  Exclude:
114
- - 'lib/robot-controller/robots.rb'
189
+ - 'lib/robot-controller/parser.rb'
115
190
  - 'lib/robot-controller/verify.rb'
116
191
 
117
192
  # Offense count: 7
data/.travis.yml CHANGED
@@ -1,9 +1,7 @@
1
1
  notifications:
2
2
  email: false
3
3
 
4
- sudo: false
5
4
  cache: bundler
6
5
 
7
6
  rvm:
8
- - 2.2.5
9
- - 2.3.3
7
+ - 2.5.3
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Build Status](https://travis-ci.org/sul-dlss/robot-controller.svg?branch=master)](https://travis-ci.org/sul-dlss/robot-controller)
2
- [![Dependency Status](https://gemnasium.com/sul-dlss/robot-controller.svg)](https://gemnasium.com/sul-dlss/robot-controller)
2
+ [![Coverage Status](https://coveralls.io/repos/github/sul-dlss/robot-controller/badge.svg)](https://coveralls.io/github/sul-dlss/robot-controller)
3
3
  [![Gem Version](https://badge.fury.io/rb/robot-controller.svg)](https://badge.fury.io/rb/robot-controller)
4
4
 
5
5
  robot-controller
@@ -25,10 +25,10 @@ Then to use the controller to boot the robots:
25
25
 
26
26
  bundle exec controller boot
27
27
 
28
- If you want to *override* the bluepill configuration but still use the
28
+ If you want to *override* the eye configuration but still use the
29
29
  controller (though NOT recommended), then add:
30
30
 
31
- config/bluepill.rb
31
+ config/eye.rb
32
32
 
33
33
  ### Usage
34
34
 
@@ -38,16 +38,16 @@ controller (though NOT recommended), then add:
38
38
  controller [--help]
39
39
 
40
40
  Example:
41
- controller boot # start bluepilld and jobs
41
+ controller boot # start eyed and jobs
42
42
  controller status # check on status of jobs
43
43
  controller verify # verify robots are running as configured
44
44
  controller log robot01_01_dor_accessionWF_descriptive-metadata # view log for worker
45
45
  controller stop # stop jobs
46
- controller quit # stop bluepilld
46
+ controller quit # stop eyed
47
47
 
48
48
  Environment:
49
- BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill)
50
- BLUEPILL_LOGFILE - output log (default: log/bluepill.log)
49
+ EYE_BASEDIR - where eye stores its state (default: run/eye)
50
+ EYE_LOGFILE - output log (default: log/eye.log)
51
51
  ROBOT_ENVIRONMENT - (default: development)
52
52
 
53
53
  ### Changes
data/Rakefile CHANGED
@@ -1,11 +1,8 @@
1
- require 'rubygems'
2
1
  require 'rake'
3
- require 'bundler'
4
2
  require 'bundler/gem_tasks'
5
- require 'rspec/core/rake_task'
6
3
  require 'version_bumper'
7
4
  require 'robot-controller/tasks'
8
5
 
9
6
  Dir.glob('lib/tasks/*.rake').each { |r| import r }
10
7
 
11
- task default: [:spec, :rubocop, :yard]
8
+ task default: [:spec, :rubocop]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 3.0.0.beta1
data/bin/controller CHANGED
@@ -16,44 +16,44 @@ module RobotController
16
16
  controller [--help]
17
17
 
18
18
  Example:
19
- % controller boot # start bluepilld and jobs
19
+ % controller boot # start eyed and jobs
20
20
  % controller status # check on status of jobs
21
21
  % controller log dor_accessionWF_descriptive-metadata # view log for worker
22
22
  % controller verify # verify robots are running as configured
23
23
  % controller stop # stop jobs
24
- % controller quit # stop bluepilld
24
+ % controller quit # stop eyed
25
25
 
26
26
  Environment:
27
- BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill)
28
- BLUEPILL_LOGFILE - output log (default: log/bluepill.log)
27
+ EYE_BASEDIR - where bluepill stores its state (default: run/eye)
28
+ EYE_LOGFILE - output log (default: log/eye.log)
29
29
  ROBOT_ENVIRONMENT - (default: development)
30
30
  '
31
31
  exit(-1)
32
32
  end
33
33
 
34
34
  ENV['ROBOT_ENVIRONMENT'] ||= 'development'
35
- ENV['BLUEPILL_BASE_DIR'] ||= File.expand_path('run/bluepill')
36
- ENV['BLUEPILL_LOGFILE'] ||= File.expand_path('log/bluepill.log')
35
+ ENV['EYE_BASE_DIR'] ||= File.expand_path('run/eye')
36
+ ENV['EYE_LOGFILE'] ||= File.expand_path('log/eye.log')
37
37
 
38
- fail 'bluepill requires config directory' unless File.directory?('config')
39
- fail 'bluepill requires run directory' unless File.directory?(File.dirname(ENV['BLUEPILL_BASE_DIR']))
40
- fail 'bluepill requires log directory' unless File.directory?(File.dirname(ENV['BLUEPILL_LOGFILE']))
38
+ fail 'eye requires config directory' unless File.directory?('config')
41
39
 
42
- cmd = 'bluepill'
43
- cmd << ' --no-privileged'
44
- cmd << " --base-dir #{ENV['BLUEPILL_BASE_DIR']}"
45
- cmd << " --logfile #{ENV['BLUEPILL_LOGFILE']}"
40
+ cmd = 'eye'
41
+ # cmd << " --dir #{ENV['EYE_BASE_DIR']}"
42
+ # cmd << " --logger #{ENV['EYE_LOGFILE']}"
46
43
 
47
44
  case args.first.downcase
45
+ when 'status'
46
+ exec "#{cmd} info -j"
47
+ exit(0)
48
48
  when 'boot'
49
- fn = 'config/bluepill.rb' # allow override
50
- fn = RobotController.bluepill_config unless File.file?(fn)
49
+ fn = 'config/eye.rb' # allow override
50
+ fn = RobotController.eye_config unless File.file?(fn)
51
51
  if File.file?(fn)
52
52
  # puts "Loading #{fn}"
53
53
  exec "#{cmd} load #{fn}"
54
54
  # NOTREACHED
55
55
  end
56
- puts "ERROR: Cannot find bluepill configuration file for #{ENV['ROBOT_ENVIRONMENT']}"
56
+ puts "ERROR: Cannot find eye configuration file for #{ENV['ROBOT_ENVIRONMENT']}"
57
57
  exit(-1)
58
58
  when 'verify'
59
59
  verbose = (args[1] == '--verbose')
@@ -3,10 +3,10 @@ module RobotController
3
3
  # e.g., `1.2.3`
4
4
  VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
5
5
 
6
- def self.bluepill_config
7
- File.join(File.dirname(__FILE__), 'robot-controller', 'bluepill.rb')
6
+ def self.eye_config
7
+ File.join(File.dirname(__FILE__), 'robot-controller', 'eye.rb')
8
8
  end
9
9
 
10
10
  autoload :Verify, 'robot-controller/verify'
11
- autoload :Parser, 'robot-controller/robots'
11
+ autoload :Parser, 'robot-controller/parser'
12
12
  end
@@ -0,0 +1,63 @@
1
+ require 'robot-controller'
2
+
3
+ # current directory
4
+ WORKDIR = Dir.pwd
5
+
6
+ # setup robots configuration
7
+ robot_environment = ENV['ROBOT_ENVIRONMENT'] || 'development'
8
+ ROBOTS = RobotController::Parser.load("robots_#{robot_environment}.yml")
9
+ #
10
+ # Expect ROBOTS = [
11
+ # {:robot => 'x', :queues => ['a', 'b'], :n => 1}
12
+ # {:robot => 'z', :queues => ['b'], :n => 3}
13
+ # ]
14
+ #
15
+
16
+ # set application name to parent directory name
17
+ Eye.application File.basename(File.dirname(File.dirname(WORKDIR))),
18
+ log_file: "#{WORKDIR}/log/eye.log" do
19
+ app.working_dir = WORKDIR
20
+
21
+ env 'TERM_CHILD' => '1', # TERM, KILL, USR1 sent to worker process if running
22
+ 'RESQUE_TERM_TIMEOUT' => '10.0', # seconds to wait before sending KILL after TERM
23
+ 'INTERVAL' => '5',
24
+ 'ROBOT_ENVIRONMENT' => robot_environment
25
+
26
+ env 'VERBOSE' => 'yes' if ENV['ROBOT_VERBOSE'] == 'yes'
27
+ env 'VVERBOSE' => 'yes' if ENV['ROBOT_VVERBOSE'] == 'yes'
28
+
29
+ group robot_environment do
30
+ ROBOTS.each_index do |i|
31
+ group ROBOTS[i][:robot] do
32
+ ROBOTS[i][:n].to_i.times do |j|
33
+ # prefix process name with index number to prevent duplicate process names
34
+ prefix = format('robot%02d_%02d', i + 1, j + 1)
35
+
36
+ process("#{prefix}_#{ROBOTS[i][:robot]}") do
37
+ puts "Creating robot #{process.name}"
38
+
39
+ # queue order is *VERY* important
40
+ queues = ROBOTS[i][:queues].join(',')
41
+
42
+ # use environment for these resque variables
43
+ env 'QUEUES' => queues
44
+
45
+ # process configuration
46
+ stdall "#{WORKDIR}/log/#{ROBOTS[i][:robot]}.log"
47
+
48
+ # spawn worker processes using robot-controller
49
+ start_command 'rake environment resque:work'
50
+
51
+ # we use eye to daemonize the resque workers rather than using
52
+ # resque's BACKGROUND flag
53
+ daemonize true
54
+
55
+ # graceful stops
56
+ stop_grace 360.seconds
57
+ stop_signals [:QUIT, 300.seconds, :TERM, 10.seconds, :KILL]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -9,9 +9,9 @@ module RobotController
9
9
 
10
10
  class << self
11
11
  # main entry point
12
- def load(robots_fn, dir = 'config/environments', host = nil)
12
+ def load(robots_fn, dir = './config/environments', host = nil)
13
13
  # Validate parameters
14
- robots_fn = File.join(dir, robots_fn) if dir
14
+ robots_fn = File.expand_path(robots_fn, File.expand_path(dir))
15
15
  fail "FileNotFound: #{robots_fn}" unless File.file?(robots_fn)
16
16
 
17
17
  # read the YAML file with the configuration of all the robots to run
@@ -159,7 +159,7 @@ module RobotController
159
159
  end
160
160
 
161
161
  #
162
- # @param [String] line as bluepill outputs them...
162
+ # @param [String] line as eye outputs them...
163
163
  # robot01_01_dor_gisAssemblyWF_assign-placenames(pid:29481): up
164
164
  # robot02_01_dor_gisAssemblyWF_author-data(pid:29697): down
165
165
  # robot03_01_dor_gisAssemblyWF_author-metadata(pid:29512): unmonitored
@@ -22,16 +22,15 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.required_rubygems_version = '>= 1.3.6'
24
24
 
25
- s.add_dependency 'bluepill'
26
- s.add_dependency 'resque', '~> 1.26'
27
- s.add_dependency 'rake', '>= 10.3'
28
- s.add_dependency 'whenever', '~> 0.9.2'
25
+ s.add_dependency 'eye'
26
+ s.add_dependency 'resque', '~> 2.0'
27
+ s.add_dependency 'rake'
28
+ s.add_dependency 'whenever'
29
29
 
30
+ s.add_development_dependency 'coveralls'
30
31
  s.add_development_dependency 'pry'
31
32
  s.add_development_dependency 'rspec'
32
- s.add_development_dependency 'redcarpet' # provides Markdown
33
- s.add_development_dependency 'rubocop'
34
- s.add_development_dependency 'simplecov'
33
+ s.add_development_dependency 'rubocop', '~> 0.52.1' # avoid code churn due to rubocop changes
34
+ s.add_development_dependency 'rubocop-rspec'
35
35
  s.add_development_dependency 'version_bumper'
36
- s.add_development_dependency 'yard'
37
36
  end
data/spec/spec_helper.rb CHANGED
@@ -4,13 +4,16 @@ ENV['ROBOT_ENVIRONMENT'] ||= 'development'
4
4
  ENV['ROBOT_LOG'] ||= '/dev/null'
5
5
  ENV['ROBOT_LOG_LEVEL'] ||= 'debug'
6
6
 
7
+ require 'coveralls'
8
+ Coveralls.wear!
7
9
  require 'simplecov'
8
- SimpleCov.start
10
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
11
+ SimpleCov.start do
12
+ add_filter 'spec'
13
+ end
9
14
 
10
15
  require 'bundler/setup'
11
16
  Bundler.require(:default, :development)
12
17
 
13
18
  RSpec.configure do |_config|
14
19
  end
15
-
16
- Rails = Object.new unless defined? Rails
@@ -1,4 +1,4 @@
1
- require 'robot-controller/robots'
1
+ require 'robot-controller/parser'
2
2
 
3
3
  describe RobotController::Parser do
4
4
  context 'simple' do
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robot-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Hardy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-12 00:00:00.000000000 Z
11
+ date: 2018-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bluepill
14
+ name: eye
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -30,50 +30,36 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.26'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.26'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.3'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: whenever
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.9.2
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.9.2
69
- - !ruby/object:Gem::Dependency
70
- name: pry
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
- type: :development
62
+ type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: rspec
70
+ name: coveralls
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: redcarpet
84
+ name: pry
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -109,7 +95,7 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: rubocop
98
+ name: rspec
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
@@ -123,21 +109,21 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: simplecov
112
+ name: rubocop
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ">="
115
+ - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '0'
117
+ version: 0.52.1
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ">="
122
+ - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0'
124
+ version: 0.52.1
139
125
  - !ruby/object:Gem::Dependency
140
- name: version_bumper
126
+ name: rubocop-rspec
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
@@ -151,7 +137,7 @@ dependencies:
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
- name: yard
140
+ name: version_bumper
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - ">="
@@ -189,13 +175,12 @@ files:
189
175
  - example/config/environments/robots_development.yml
190
176
  - example/lib/tasks/environment.rake
191
177
  - lib/robot-controller.rb
192
- - lib/robot-controller/bluepill.rb
193
- - lib/robot-controller/robots.rb
178
+ - lib/robot-controller/eye.rb
179
+ - lib/robot-controller/parser.rb
194
180
  - lib/robot-controller/tasks.rb
195
181
  - lib/robot-controller/verify.rb
196
182
  - lib/tasks/rspec.rake
197
183
  - lib/tasks/rubocop.rake
198
- - lib/tasks/yard.rake
199
184
  - robot-controller.gemspec
200
185
  - spec/fixtures/matcher.yml
201
186
  - spec/fixtures/multi.yml
@@ -224,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
209
  version: 1.3.6
225
210
  requirements: []
226
211
  rubyforge_project:
227
- rubygems_version: 2.5.2
212
+ rubygems_version: 2.7.6
228
213
  signing_key:
229
214
  specification_version: 4
230
215
  summary: Monitors and controls running workflow robots off of priority queues and
@@ -1,91 +0,0 @@
1
- require 'robot-controller'
2
-
3
- # current directory
4
- WORKDIR = Dir.pwd
5
-
6
- # setup robots configuration
7
- robot_environment = ENV['ROBOT_ENVIRONMENT'] || 'development'
8
- ROBOTS = RobotController::Parser.load("robots_#{robot_environment}.yml")
9
- #
10
- # Expect ROBOTS = [
11
- # {:robot => 'x', :queues => ['a', 'b'], :n => 1}
12
- # {:robot => 'z', :queues => ['b'], :n => 3}
13
- # ]
14
- #
15
-
16
- # set application name to parent directory name
17
- Bluepill.application File.basename(File.dirname(File.dirname(WORKDIR))),
18
- log_file: "#{WORKDIR}/log/bluepill.log" do |app|
19
- app.working_dir = WORKDIR
20
- ROBOTS.each_index do |i|
21
- ROBOTS[i][:n].to_i.times do |j|
22
- # prefix process name with index number to prevent duplicate process names
23
- prefix = sprintf('robot%02d_%02d', i + 1, j + 1)
24
- app.process("#{prefix}_#{ROBOTS[i][:robot]}") do |process|
25
- puts "Creating robot #{process.name}"
26
-
27
- # queue order is *VERY* important
28
- queues = ROBOTS[i][:queues].join(',')
29
-
30
- # use environment for these resque variables
31
- process.environment = {
32
- 'TERM_CHILD' => '1', # TERM, KILL, USR1 sent to worker process if running
33
- 'RESQUE_TERM_TIMEOUT' => '10.0', # seconds to wait before sending KILL after TERM
34
- 'QUEUES' => queues,
35
- 'ROBOT_ENVIRONMENT' => robot_environment,
36
- 'INTERVAL' => '5'
37
- }
38
- process.environment['VERBOSE'] = 'yes' if ENV['ROBOT_VERBOSE'] == 'yes'
39
- process.environment['VVERBOSE'] = 'yes' if ENV['ROBOT_VVERBOSE'] == 'yes'
40
-
41
- # process configuration
42
- process.group = robot_environment
43
- process.stdout = process.stderr = "#{WORKDIR}/log/#{ROBOTS[i][:robot]}.log"
44
-
45
- # spawn worker processes using robot-controller
46
- process.start_command = 'rake environment resque:work'
47
-
48
- # we use bluepill to daemonize the resque workers rather than using
49
- # resque's BACKGROUND flag
50
- process.daemonize = true
51
-
52
- # bluepill manages pid files
53
- # process.pid_file = "#{WORKDIR}/run/#{process.name}.pid"
54
-
55
- # graceful stops
56
- process.stop_grace_time = 360.seconds # must be greater than stop_signals total
57
- process.stop_signals = [
58
- :quit, 300.seconds, # waits for jobs, then exits gracefully
59
- :term, 10.seconds, # kills jobs and exits
60
- :kill # no mercy
61
- ]
62
-
63
- # process monitoring
64
-
65
- # backoff if process is flapping between states
66
- # process.checks :flapping,
67
- # :times => 2, :within => 30.seconds,
68
- # :retry_in => 7.seconds
69
-
70
- # restart if process runs for longer than 15 mins of CPU time
71
- # process.checks :running_time,
72
- # :every => 5.minutes, :below => 15.minutes
73
-
74
- # restart if CPU usage > 75% for 3 times, check every 10 seconds
75
- # process.checks :cpu_usage,
76
- # :every => 10.seconds,
77
- # :below => 75, :times => 3,
78
- # :include_children => true
79
- #
80
- # restart the process or any of its children
81
- # if MEM usage > 100MB for 3 times, check every 10 seconds
82
- # process.checks :mem_usage,
83
- # :every => 10.seconds,
84
- # :below => 100.megabytes, :times => 3,
85
- # :include_children => true
86
-
87
- # NOTE: there is an implicit process.keepalive
88
- end
89
- end
90
- end
91
- end
data/lib/tasks/yard.rake DELETED
@@ -1,16 +0,0 @@
1
- begin
2
- require 'yard'
3
- YARD::Rake::YardocTask.new do |t|
4
- t.files = ['lib/**/*.rb', 'bin/controller']
5
- t.options = ['--readme', 'README.md', '-m', 'markdown']
6
- end
7
-
8
- namespace :yard do
9
- desc 'Clean up documentation'
10
- task :clean do
11
- FileUtils.rm_rf('doc')
12
- end
13
- end
14
- rescue LoadError
15
- abort 'Please install the YARD gem to generate doc.'
16
- end