robot-controller 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0acb2a8aa3413747076dac05fc5c889357c00fd4
4
- data.tar.gz: 8692def8629151ccb3217d591909a3342870d945
3
+ metadata.gz: c01c2e8362bea0af35c415127c35e2b6fd5a643d
4
+ data.tar.gz: 3bea75dfaa22001504e2a7db019ae406e4b81c00
5
5
  SHA512:
6
- metadata.gz: ad5c6d906a1fc3cb465d4f42992502bcc54a485d1de556ed004c8776d970e60c1441e4c96c35dbc1d9492d399276f72bcd7fdf1cb2c3113c64c752fae8383329
7
- data.tar.gz: a5e75b22049082d804928398d17e86f877ac82c07aa18556709bd8e7f8452aba8f5d00c72bbaccbc8a9c388a70979e0192f055cc2471eae7e15b9f58efbe28cc
6
+ metadata.gz: e4c6de1781095edee97a52db140f4e6b9e7ca538ccaf66982ef0ce7f50467e2a998ac8c37334bc89fabd58dfe0420a7eb66604b51e593effd6a6870655f6bcf4
7
+ data.tar.gz: cc1b11f2655f960195a56ce760d19ebc39babd02e797002b19dce8ad3c4336213f2bb7a8ce7ad8b736ece255a259b2cf47db832fd1fcc2ffe4b8751dcc12160e
data/README.md CHANGED
@@ -16,18 +16,31 @@ In your `Rakefile`, add the following (if you don't want to include the environm
16
16
 
17
17
  Create the following configuration files based on the examples in `example/config`:
18
18
 
19
- config/boot.rb
20
- config/environments/development.rb
21
- config/environments/bluepill_development.rb
22
- config/environments/workflows_development.rb
19
+ config/environments/robots_development.yml
20
+
21
+ Then to use the controller to boot the robots:
22
+
23
+ % bundle exec controller boot
24
+
25
+ If you want to *override* the bluepill configuration but still use the
26
+ controller, then add:
27
+
28
+ config/bluepill.rb
23
29
 
24
30
  ### Usage
25
31
 
26
- Usage: controller [ boot | quit ]
27
- controller [ start | status | stop | restart | log ] [worker]
32
+ Usage: controller ( boot | quit )
33
+ controller ( start | status | stop | restart | log ) [worker]
34
+ controller [--help]
28
35
 
29
36
  Example:
30
- % controller boot # start bluepilld and jobs
31
- % controller status # check on status of jobs
32
- % controller stop # stop jobs
33
- % controller quit # stop bluepilld
37
+ % controller boot # start bluepilld and jobs
38
+ % controller status # check on status of jobs
39
+ % controller log dor_accessionWF_descriptive-metadata # view log for worker
40
+ % controller stop # stop jobs
41
+ % controller quit # stop bluepilld
42
+
43
+ Environment:
44
+ BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill)
45
+ BLUEPILL_LOGFILE - output log (default: log/bluepill.log)
46
+ ROBOT_ENVIRONMENT - (default: development)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
@@ -17,11 +17,6 @@ Environment:
17
17
  BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill)
18
18
  BLUEPILL_LOGFILE - output log (default: log/bluepill.log)
19
19
  ROBOT_ENVIRONMENT - (default: development)
20
-
21
- Configuration files (in search order)
22
- config/environments/bluepill_development.rb
23
- config/environments/bluepill.rb
24
- config/bluepill.rb
25
20
  '
26
21
  exit -1
27
22
  end
@@ -36,13 +31,15 @@ cmd << " --base-dir #{ENV['BLUEPILL_BASE_DIR']}"
36
31
  cmd << " --logfile #{ENV['BLUEPILL_LOGFILE']}"
37
32
 
38
33
  if ARGV[0] == 'boot'
39
- ["config/environments/bluepill_#{ENV['ROBOT_ENVIRONMENT']}.rb",
40
- "config/environments/bluepill.rb",
41
- "config/bluepill.rb"].each do |fn|
42
- if File.file?(fn)
43
- system "#{cmd} load #{fn}"
44
- exit 0
45
- end
34
+ fn = 'config/bluepill.rb' # allow override
35
+ unless File.file?(fn)
36
+ require 'robot-controller'
37
+ fn = RobotController.bluepill_config
38
+ end
39
+ if File.file?(fn)
40
+ puts "Loading #{fn}"
41
+ system "#{cmd} load #{fn}"
42
+ exit 0
46
43
  end
47
44
  puts "ERROR: Cannot find bluepill configuration file for #{ENV['ROBOT_ENVIRONMENT']}"
48
45
  exit -1
@@ -33,9 +33,3 @@ Resque.redis = REDIS_URL
33
33
  require 'active_support/core_ext' # camelcase
34
34
  require 'robot-controller'
35
35
 
36
-
37
-
38
-
39
-
40
-
41
-
@@ -0,0 +1,86 @@
1
+ #
2
+ # Robot allocation strategy
3
+ #
4
+ # Format:
5
+ #
6
+ # host:
7
+ # - robot[:lane[:instances]]
8
+ #
9
+ # where
10
+ # 1. robot is a single robot identifier (fully-qualified with
11
+ # REPO_SUITE_ROBOT, e.g., "dor_accessionWF_technical-metadata").
12
+ # 2. lane is a single integer (4), a range (3-5), or a list (2,4,8),
13
+ # or an asterix (*).
14
+ # 3. instances is a single integer.
15
+ #
16
+ # Both lane and instances are optional. Lane defaults to *, and
17
+ # instances defaults to 1.
18
+ #
19
+ # When a robot is allocated to multiple lanes, it reads them in
20
+ # PRIORITY ORDER. That is, if a robot is listening to lanes 1, 2, and 3,
21
+ # it works on lane 1 until empty, then lane 2 until empty, and then
22
+ # lane 3 until empty. In the meantime, if a job comes in on a faster
23
+ # lane, it works on that after finishing it's current job (i.e., after
24
+ # working on a job in lane 3, if a job comes in on lane 1 in the intermin,
25
+ # the robot will work on the lane 1 job next before returning to lane 3).
26
+ #
27
+ # In general, lanes 1-5 are reserved for priority queues, and lanes 6-N
28
+ # are dedicated lanes.
29
+ #
30
+ # Note that the syntax is YAML, so the lists must not contain spaces or
31
+ # needs to be quoted.
32
+ #
33
+ # RIGHT
34
+ # - dor_accessionWF_technical-metadata:10:5
35
+ # - 'dor_accessionWF_technical-metadata : 10 : 5'
36
+ #
37
+ # WRONG
38
+ # - dor_accessionWF_technical-metadata : 10 : 5
39
+ # - dor_accessionWF_technical-metadata: 10: 5
40
+ #
41
+
42
+ #
43
+ # Robot 1 (8 CPU) hosts shelving and publish only
44
+ #
45
+ sul-robots1-dev:
46
+ - dor_accessionWF_shelve:*:3 # 3 robots for all lanes
47
+ - dor_accessionWF_shelve:6:3 # 3 robots for lane 6
48
+ - dor_accessionWF_shelve:7:3 # 3 robots for lane 7
49
+ - dor_accessionWF_shelve:8:3 # 3 robots for lane 8
50
+ - dor_accessionWF_shelve:9:3 # 3 robots for lane 9
51
+ - dor_accessionWF_shelve:10:3 # 3 robots for lane 10
52
+ - dor_accessionWF_publish:1-5:3 # 3 robots for lanes 1 through 5
53
+ - dor_accessionWF_publish:6:3 # 3 robots for lane 6
54
+ - dor_accessionWF_publish:7:3 # 3 robots for lane 7
55
+ - dor_accessionWF_publish:8:3 # 3 robots for lane 8
56
+ - dor_accessionWF_publish:9:3 # 3 robots for lane 9
57
+ - dor_accessionWF_publish:10:3 # 3 robots for lane 10
58
+ - dor_accessionWF_publish:6,9 # 1 robot for lane 6 and 9
59
+
60
+ #
61
+ # Robot 2 (16 CPU) hosts technical metadata creation only
62
+ #
63
+ sul-robots2-dev:
64
+ - dor_accessionWF_technical-metadata:1:5 # 5 robots for lane 1
65
+ - dor_accessionWF_technical-metadata:2:5 # 5 robots for lane 2
66
+ - dor_accessionWF_technical-metadata:3-5:5 # 5 robots for lanes 3, 4, 5
67
+ - dor_accessionWF_technical-metadata:6:2 # 2 robots for lane 6
68
+ - dor_accessionWF_technical-metadata:7:2 # 2 robots for lane 7
69
+ - dor_accessionWF_technical-metadata:8:2 # 2 robots for lane 8
70
+ - dor_accessionWF_technical-metadata:9:2 # 2 robots for lane 9
71
+ - dor_accessionWF_technical-metadata:10:2 # 2 robots for lane 10
72
+
73
+ #
74
+ # Robot 3 (4 CPU) hosts helper robots for all accessioning workflows
75
+ #
76
+ sul-robots3-dev:
77
+ - dor_accessionWF_descriptive-metadata # 1 robot for all lanes
78
+ - dor_accessionWF_rights-metadata # 1 robot for all lanes
79
+ - dor_accessionWF_content-metadata # 1 robot for all lanes
80
+ - dor_accessionWF_technical-metadata # 1 robot for all lanes
81
+ - dor_accessionWF_remediate-object # 1 robot for all lanes
82
+ - dor_accessionWF_shelve:*:5 # 5 robots for all lanes
83
+ - dor_accessionWF_publish:*:10 # 10 robots for all lanes
84
+ - dor_accessionWF_provenance-metadata # 1 robot for all lanes
85
+ - dor_accessionWF_sdr-ingest-transfer # 1 robot for all lanes
86
+ - dor_accessionWF_end-accession # 1 robot for all lanes
@@ -2,4 +2,9 @@
2
2
  module RobotController
3
3
  # e.g., `1.2.3`
4
4
  VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
5
+
6
+ def self.bluepill_config
7
+ File.join(File.dirname(__FILE__), 'robot-controller', 'bluepill.rb')
8
+ end
9
+
5
10
  end
@@ -0,0 +1,79 @@
1
+ WORKDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
2
+ robot_environment = ENV['ROBOT_ENVIRONMENT'] || 'development'
3
+ require 'robot-controller/robots'
4
+ #
5
+ # Expect ROBOTS = [
6
+ # {:robot => 'x', :queues => ['a', 'b'], :n => 1}
7
+ # {:robot => 'z', :queues => ['b'], :n => 3}
8
+ # ]
9
+ #
10
+ Bluepill.application File.basename(File.dirname(File.dirname(WORKDIR))),
11
+ :log_file => "#{WORKDIR}/log/bluepill.log" do |app|
12
+ app.working_dir = WORKDIR
13
+ ROBOTS.each_index do |i|
14
+ # prefix process name with index number to prevent duplicate process names
15
+ prefix = sprintf("robot%02d", i+1)
16
+ app.process("#{prefix}_#{ROBOTS[i][:robot]}") do |process|
17
+ puts "Creating robot #{process.name}"
18
+
19
+ # queue order is *VERY* important
20
+ queues = ROBOTS[i][:queues].join(',')
21
+
22
+ # use environment for these resque variables
23
+ process.environment = {
24
+ 'QUEUES' => queues,
25
+ 'ROBOT_ENVIRONMENT' => robot_environment
26
+ }
27
+ process.environment['VERBOSE'] = 'yes' if robot_environment != 'production'
28
+
29
+ # process configuration
30
+ process.group = robot_environment
31
+ process.stdout = process.stderr = "#{WORKDIR}/log/#{ROBOTS[i][:robot]}.log"
32
+
33
+ # spawn worker processes using robot-controller
34
+ process.environment['COUNT'] = ROBOTS[i][:n]
35
+ process.start_command = "rake workers"
36
+
37
+ # we use bluepill to daemonize the resque workers rather than using
38
+ # resque's BACKGROUND flag
39
+ process.daemonize = true
40
+
41
+ # bluepill manages pid files
42
+ # process.pid_file = "#{WORKDIR}/run/#{process.name}.pid"
43
+
44
+ # graceful stops
45
+ process.stop_grace_time = 360.seconds # must be greater than stop_signals total
46
+ process.stop_signals = [
47
+ :quit, 300.seconds, # waits for jobs, then exits gracefully
48
+ :term, 10.seconds, # kills jobs and exits
49
+ :kill # no mercy
50
+ ]
51
+
52
+ # process monitoring
53
+
54
+ # backoff if process is flapping between states
55
+ # process.checks :flapping,
56
+ # :times => 2, :within => 30.seconds,
57
+ # :retry_in => 7.seconds
58
+
59
+ # restart if process runs for longer than 15 mins of CPU time
60
+ # process.checks :running_time,
61
+ # :every => 5.minutes, :below => 15.minutes
62
+
63
+ # restart if CPU usage > 75% for 3 times, check every 10 seconds
64
+ # process.checks :cpu_usage,
65
+ # :every => 10.seconds,
66
+ # :below => 75, :times => 3,
67
+ # :include_children => true
68
+ #
69
+ # restart the process or any of its children
70
+ # if MEM usage > 100MB for 3 times, check every 10 seconds
71
+ # process.checks :mem_usage,
72
+ # :every => 10.seconds,
73
+ # :below => 100.megabytes, :times => 3,
74
+ # :include_children => true
75
+
76
+ # NOTE: there is an implicit process.keepalive
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,126 @@
1
+ require 'yaml'
2
+
3
+ class RobotConfigParser
4
+ ROBOT_INSTANCE_MAX = 16
5
+ LANE_INSTANCE_MAX = 99 # sprintf("%02d") maximum
6
+
7
+ # parse_instances(1) == 1
8
+ # parse_instances(16) == 16
9
+ # parse_instances(0) == 1
10
+ # parse_instances(99) => RuntimeError
11
+ def parse_instances(n)
12
+ if n > ROBOT_INSTANCE_MAX
13
+ raise RuntimeError, "TooManyInstances: #{n} > #{ROBOT_INSTANCE_MAX}"
14
+ end
15
+ n = 1 if n < 1
16
+ n
17
+ end
18
+
19
+ # parse_lanes('*') == ['*']
20
+ # parse_lanes('0') == [0]
21
+ # parse_lanes('1') == [1]
22
+ # parse_lanes('1-5') == [1,2,3,4,5]
23
+ # parse_lanes('1,2,3') == [1,2,3]
24
+ # parse_lanes('1-5,8') == [1,2,3,4,5,8]
25
+ # parse_lanes('-1') == [0, 1]
26
+ # parse_lanes('100') == RuntimeException
27
+ def parse_lanes(lanes_spec)
28
+ lanes = []
29
+
30
+ # parse each comma-seperated specification
31
+ lanes_spec.split(/,/).each do |i|
32
+ # this is a range element
33
+ if i =~ /-/
34
+ x = i.split(/-/)
35
+ Range.new(x[0].to_i, x[1].to_i).each do |j|
36
+ lanes << j
37
+ end
38
+ # a wildcard
39
+ elsif i == '*'
40
+ lanes << '*'
41
+ # simple integer
42
+ else
43
+ lanes << i.to_i
44
+ end
45
+ end
46
+
47
+ # verify that lanes are all within 1 .. LANE_INSTANCE_MAX
48
+ lanes.each do |j|
49
+ if j.is_a?(Integer)
50
+ if j > LANE_INSTANCE_MAX
51
+ raise RuntimeError, "SyntaxError: Lane #{j} > #{LANE_INSTANCE_MAX}"
52
+ elsif j < 0
53
+ raise RuntimeError, "SyntaxError: Lane #{j} < 0"
54
+ end
55
+ end
56
+ end
57
+ lanes
58
+ end
59
+
60
+ # build_queues('a','1') => ['a_01']
61
+ # build_queues('a','1,3') => ['a_01', 'a_03']
62
+ # build_queues('a','1-3') => ['a_01', 'a_02', 'a_03']
63
+ def build_queues(robot, lanes)
64
+ queues = []
65
+ parse_lanes(lanes).each do |i|
66
+ queues << [robot, i == '*' ? '*' : sprintf("%02d", i)].join('_')
67
+ end
68
+ queues
69
+ end
70
+
71
+ # main entry point
72
+ def load(env)
73
+ # read the YAML file
74
+ robots_fn = File.join('config', 'environments', "robots_#{env}.yml")
75
+ unless File.file?(robots_fn)
76
+ raise RuntimeError, "FileNotFound: #{robots_fn}"
77
+ end
78
+
79
+ puts "Loading #{robots_fn}"
80
+ robots = YAML.load_file(robots_fn)
81
+ # puts robots
82
+
83
+ # determine current host
84
+ host = `hostname -s`.strip
85
+ # puts host
86
+
87
+ # host = 'sul-robots1-dev' # XXX
88
+ unless robots.include?(host)
89
+ raise RuntimeError, "HostMismatch: #{host} not defined in #{robots_fn}"
90
+ end
91
+
92
+ # parse YAML lines for host where i is robot[:lane[:instances]]
93
+ r = []
94
+ robots[host].each do |i|
95
+ robot = i.split(/:/)
96
+ robot.each do |j|
97
+ if j.strip == ''
98
+ raise RuntimeError, "SyntaxError: #{i}"
99
+ end
100
+ end
101
+
102
+ # add defaults
103
+ if robot.size == 1
104
+ robot << '*'
105
+ end
106
+ if robot.size == 2
107
+ robot << '1'
108
+ end
109
+
110
+ # build queues for robot instances
111
+ unless robot.size == 3
112
+ raise RuntimeError, "SyntaxError: #{i}"
113
+ end
114
+ robot[2] = parse_instances(robot[2].to_i)
115
+ # puts robot.join(' : ')
116
+ queues = build_queues(robot[0], robot[1])
117
+ # puts queues
118
+
119
+ r << {:robot => robot[0], :queues => queues, :n => robot[2] }
120
+ end
121
+ r
122
+ end
123
+ end
124
+
125
+ ROBOTS = RobotConfigParser.new.load(ENV['ROBOT_ENVIRONMENT'] || 'development')
126
+ # puts ROBOTS
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.required_rubygems_version = ">= 1.3.6"
24
24
 
25
- s.add_dependency 'bluepill', '~> 0.0.66'
25
+ s.add_dependency 'bluepill', '~> 0.0.67'
26
26
 
27
27
  s.add_development_dependency 'awesome_print'
28
28
  s.add_development_dependency 'pry'
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.2.2
4
+ version: 0.3.0
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-04-15 00:00:00.000000000 Z
11
+ date: 2014-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bluepill
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.66
19
+ version: 0.0.67
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.66
26
+ version: 0.0.67
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: awesome_print
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -124,10 +124,11 @@ files:
124
124
  - VERSION
125
125
  - bin/controller
126
126
  - example/config/boot.rb
127
- - example/config/environments/bluepill_development.rb
128
- - example/config/environments/workflows_development.rb
127
+ - example/config/environments/robots_development.yml
129
128
  - example/lib/tasks/environment.rake
130
129
  - lib/robot-controller.rb
130
+ - lib/robot-controller/bluepill.rb
131
+ - lib/robot-controller/robots.rb
131
132
  - lib/robot-controller/tasks.rb
132
133
  - lib/tasks/doc.rake
133
134
  - robot-controller.gemspec
@@ -1,98 +0,0 @@
1
- WORKDIR=File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
2
- robot_environment = ENV['ROBOT_ENVIRONMENT'] || 'development'
3
- workflows = File.expand_path(File.join(WORKDIR, 'config', 'environments', "workflows_#{robot_environment}.rb"))
4
- puts "Loading #{workflows}"
5
- require workflows
6
-
7
- Bluepill.application 'robot-controller',
8
- :log_file => "#{WORKDIR}/log/bluepill.log" do |app|
9
- app.working_dir = WORKDIR
10
- WORKFLOW_STEPS.each do |qualified_wf|
11
- wf = qualified_wf.gsub(/:/, '_')
12
- app.process(wf) do |process|
13
- # use configuration for number of workers -- default is 1
14
- n = WORKFLOW_N[qualified_wf] ? WORKFLOW_N[qualified_wf].to_i : 1
15
- puts "Creating #{n} worker#{n>1?'s':' '} for #{qualified_wf}"
16
-
17
- # queue order is *VERY* important
18
- #
19
- # XXX: make this configurable based on wf
20
- # WORKFLOW_PRIORITIES[wf] is the name of a second worker that reads the given queues
21
- #
22
- # see RobotMaster::Queue#queue_name for naming convention
23
- # @example
24
- # queue_name('dor:assemblyWF:jp2-create')
25
- # => 'dor_assemblyWF_jp2-create_default'
26
- # queue_name('dor:assemblyWF:jp2-create', 100)
27
- # => 'dor_assemblyWF_jp2-create_high'
28
- #
29
- queues = []
30
- %w{critical high default low}.each do |p|
31
- queues << "#{wf}_#{p}"
32
- end
33
- queues = queues.join(',')
34
- # puts "Using queues #{queues}"
35
-
36
- # use environment for these resque variables
37
- process.environment = {
38
- 'QUEUES' => "#{queues}",
39
- 'VERBOSE' => 'yes',
40
- 'ROBOT_ENVIRONMENT' => robot_environment
41
- }
42
-
43
- # process configuration
44
- process.group = robot_environment
45
- process.stdout = process.stderr = "#{WORKDIR}/log/#{wf}.log"
46
-
47
- # let bluepill manage pid files
48
- # process.pid_file = "#{WORKDIR}/run/#{wf}.pid"
49
-
50
- # spawn n worker processes
51
- if n > 1
52
- process.start_command = "env COUNT=#{n} rake workers" # not resque:workers
53
- else # 1 worker
54
- process.start_command = "rake environment resque:work"
55
- end
56
- # puts "Using #{process.start_command}"
57
- # puts "Using #{process.environment}"
58
-
59
- # we use bluepill to daemonize the resque workers rather than using
60
- # resque's BACKGROUND flag
61
- process.daemonize = true
62
-
63
- # graceful stops
64
- process.stop_grace_time = 60.seconds # must be greater than stop_signals total
65
- process.stop_signals = [
66
- :quit, 45.seconds, # waits for jobs, then exits gracefully
67
- :term, 10.seconds, # kills jobs and exits
68
- :kill # no mercy
69
- ]
70
-
71
- # process monitoring
72
-
73
- # backoff if process is flapping between states
74
- # process.checks :flapping,
75
- # :times => 2, :within => 30.seconds,
76
- # :retry_in => 7.seconds
77
-
78
- # restart if process runs for longer than 15 mins of CPU time
79
- # process.checks :running_time,
80
- # :every => 5.minutes, :below => 15.minutes
81
-
82
- # restart if CPU usage > 75% for 3 times, check every 10 seconds
83
- # process.checks :cpu_usage,
84
- # :every => 10.seconds,
85
- # :below => 75, :times => 3,
86
- # :include_children => true
87
- #
88
- # restart the process or any of its children
89
- # if MEM usage > 100MB for 3 times, check every 10 seconds
90
- # process.checks :mem_usage,
91
- # :every => 10.seconds,
92
- # :below => 100.megabytes, :times => 3,
93
- # :include_children => true
94
-
95
- # NOTE: there is an implicit process.keepalive
96
- end
97
- end
98
- end
@@ -1,25 +0,0 @@
1
- # will spawn worker(s) for each of the given workflows (fully qualified as "repo:wf:robot")
2
- WORKFLOW_STEPS = %w{
3
- dor:accessionWF:start-accession
4
- dor:accessionWF:descriptive-metadata
5
- dor:accessionWF:rights-metadata
6
- dor:accessionWF:content-metadata
7
- dor:accessionWF:technical-metadata
8
- dor:accessionWF:remediate-object
9
- dor:accessionWF:shelve
10
- dor:accessionWF:publish
11
- dor:accessionWF:provenance-metadata
12
- dor:accessionWF:sdr-ingest-transfer
13
- dor:accessionWF:sdr-ingest-received
14
- dor:accessionWF:end-accession
15
- dor:assemblyWF:start-assembly
16
- dor:assemblyWF:jp2-create
17
- dor:assemblyWF:checksum-compute
18
- dor:assemblyWF:exif-collect
19
- dor:assemblyWF:accessioning-initiate
20
- }
21
-
22
- # number of workers for the given workflows
23
- WORKFLOW_N = Hash[*%w{
24
- dor:assemblyWF:checksum-compute 3
25
- }]