hive-runner 2.0.14 → 2.1.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.
- checksums.yaml +4 -4
- data/lib/hive/device.rb +1 -1
- data/lib/hive/worker/shell.rb +6 -1
- data/lib/hive/worker.rb +8 -29
- data/lib/hive.rb +1 -49
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd60ba528c05643c7e7671ec3cda937d892b3173
|
4
|
+
data.tar.gz: 69fc74e7976bcf4456853f84957b1d96396e941d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bea4560f9262e4091e2ac8205f381340da3c05ac18bfd36913a4d6c89b38a4aee55a409b68dce0df70d96c32f49cb651363a4d090c928aac9c053e72180d6e96
|
7
|
+
data.tar.gz: 3bfb69a49c02058d6c1ac65e4c3d9a8b12bed9e2a6696623368ff6ccaa9183e201b182aaea9406e4c0612ee0e17a874ceb17c0a29c7cab337c5d9fef085503bc
|
data/lib/hive/device.rb
CHANGED
@@ -25,7 +25,7 @@ module Hive
|
|
25
25
|
@worker_pid = Process.fork do
|
26
26
|
object = Object
|
27
27
|
@worker_class.split('::').each { |sub| object = object.const_get(sub) }
|
28
|
-
object.new(@options.merge('parent_pid' => parent_pid, 'device_identity' => self.identity, 'port_allocator' => self.port_allocator))
|
28
|
+
object.new(@options.merge('parent_pid' => parent_pid, 'device_identity' => self.identity, 'port_allocator' => self.port_allocator, 'hive_id' => Hive.hive_mind.device_details['id']))
|
29
29
|
end
|
30
30
|
Process.detach @worker_pid
|
31
31
|
|
data/lib/hive/worker/shell.rb
CHANGED
@@ -5,12 +5,17 @@ module Hive
|
|
5
5
|
# The Shell worker
|
6
6
|
class Shell < Worker
|
7
7
|
def initialize(options = {})
|
8
|
-
@devicedb_register = false
|
9
8
|
super
|
10
9
|
end
|
11
10
|
|
12
11
|
def pre_script(job, file_system, script)
|
13
12
|
end
|
13
|
+
|
14
|
+
# List of autogenerated queues for the worker
|
15
|
+
def autogenerated_queues
|
16
|
+
@options['queues']
|
17
|
+
end
|
18
|
+
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/hive/worker.rb
CHANGED
@@ -29,6 +29,7 @@ module Hive
|
|
29
29
|
@options = options
|
30
30
|
@parent_pid = @options['parent_pid']
|
31
31
|
@device_id = @options['id']
|
32
|
+
@hive_id = @options['hive_id']
|
32
33
|
@hive_mind ||= mind_meld_klass.new(
|
33
34
|
url: Chamber.env.network.hive_mind? ? Chamber.env.network.hive_mind : nil,
|
34
35
|
pem: Chamber.env.network.cert ? Chamber.env.network.cert : nil,
|
@@ -44,12 +45,7 @@ module Hive
|
|
44
45
|
"#{LOG_DIRECTORY}/#{pid}.#{@device_identity}.log",
|
45
46
|
Hive.config.logging.worker_level || 'INFO'
|
46
47
|
)
|
47
|
-
@devicedb_register = true if @devicedb_register.nil?
|
48
48
|
|
49
|
-
# When DeviceDB is dumped in favour of Hive Mind the 'queues' argument
|
50
|
-
# will not be passed in and instead be generated by the
|
51
|
-
# autogenerated_queues method
|
52
|
-
@queues = @options['queues'].class == Array ? @options['queues'] : []
|
53
49
|
self.update_queues
|
54
50
|
|
55
51
|
@port_allocator = (@options.has_key?('port_allocator') ? @options['port_allocator'] : Hive::PortAllocator.new(ports: []))
|
@@ -121,7 +117,8 @@ module Hive
|
|
121
117
|
end
|
122
118
|
|
123
119
|
def reservation_details
|
124
|
-
|
120
|
+
@log.debug "Reservations details: hive_id=#{@hive_id}, worker_pid=#{Process.pid}"
|
121
|
+
{ hive_id: @hive_id, worker_pid: Process.pid }
|
125
122
|
end
|
126
123
|
|
127
124
|
# Execute a job
|
@@ -255,30 +252,12 @@ module Hive
|
|
255
252
|
end
|
256
253
|
|
257
254
|
def update_queues
|
258
|
-
if @devicedb_register
|
259
|
-
details = Hive.devicedb('Device').find(@options['id'])
|
260
|
-
@log.debug("Device details: #{details.inspect}")
|
261
|
-
|
262
|
-
if details['device_queues']
|
263
|
-
new_queues = details['device_queues'].collect do |queue_details|
|
264
|
-
queue_details['name']
|
265
|
-
end
|
266
|
-
if @queues.sort != new_queues.sort
|
267
|
-
@log.info("Updated queue list: #{new_queues.join(', ')}")
|
268
|
-
@queues = new_queues
|
269
|
-
end
|
270
|
-
update_queue_log
|
271
|
-
else
|
272
|
-
@log.warn("Queue list missing from DeviceDB response")
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
255
|
# Get Queues from Hive Mind
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
256
|
+
@log.debug("Getting queues from Hive Mind")
|
257
|
+
@queues = (autogenerated_queues + @hive_mind.hive_queues(true)).uniq
|
258
|
+
@log.debug("hive queues: #{@hive_mind.hive_queues}")
|
259
|
+
@log.debug("Full list of queues: #{@queues}")
|
260
|
+
update_queue_log
|
282
261
|
end
|
283
262
|
|
284
263
|
def update_queue_log
|
data/lib/hive.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'chamber'
|
2
2
|
require 'hive/log'
|
3
3
|
require 'hive/register'
|
4
|
-
require 'devicedb_comms'
|
5
4
|
require 'mind_meld/hive'
|
6
5
|
require 'macaddr'
|
7
6
|
require 'socket'
|
@@ -33,12 +32,6 @@ module Hive
|
|
33
32
|
fail 'Missing logging section in configuration file'
|
34
33
|
end
|
35
34
|
|
36
|
-
DeviceDBComms.configure do |config|
|
37
|
-
config.url = Chamber.env.network.devicedb
|
38
|
-
config.pem_file = Chamber.env.network.cert
|
39
|
-
config.ssl_verify_mode = OpenSSL::SSL::VERIFY_NONE
|
40
|
-
end
|
41
|
-
|
42
35
|
Airbrake.configure do |config|
|
43
36
|
config.host = Chamber.env.errbit.host
|
44
37
|
config.project_id = Chamber.env.errbit.project_id
|
@@ -63,11 +56,6 @@ module Hive
|
|
63
56
|
@logger
|
64
57
|
end
|
65
58
|
|
66
|
-
def self.devicedb(section)
|
67
|
-
@devicedb = {} if ! @devicedb.kind_of?(Hash)
|
68
|
-
@devicedb[section] ||= Object.const_get('DeviceDBComms').const_get(section).new()
|
69
|
-
end
|
70
|
-
|
71
59
|
def self.hive_mind
|
72
60
|
Hive.logger.debug "Sysname: #{Sys::Uname.sysname}"
|
73
61
|
Hive.logger.debug "Release: #{Sys::Uname.release}"
|
@@ -95,45 +83,9 @@ module Hive
|
|
95
83
|
@register ||= Hive::Register.new
|
96
84
|
end
|
97
85
|
|
98
|
-
# Get the id of the hive from the device database
|
99
|
-
def self.id
|
100
|
-
if ! @devicedb_id
|
101
|
-
Hive.logger.info "Attempting to register the hive as #{Hive.hostname}"
|
102
|
-
register_response = self.devicedb('Hive').register(Hive.hostname, Hive.mac_address, Hive.ip_address)
|
103
|
-
if register_response['error'].present?
|
104
|
-
Hive.logger.warn 'Hive failed to register'
|
105
|
-
Hive.logger.warn " - #{register_response['error']}"
|
106
|
-
else
|
107
|
-
Hive.logger.info "Hive registered with id #{register_response['id']}"
|
108
|
-
@devicedb_id = register_response['id']
|
109
|
-
end
|
110
|
-
end
|
111
|
-
@devicedb_id || -1
|
112
|
-
end
|
113
|
-
|
114
86
|
# Poll the device database
|
115
87
|
def self.poll
|
116
|
-
|
117
|
-
id = self.id
|
118
|
-
if id and id > 0
|
119
|
-
Hive.logger.debug "Polling hive: #{id}"
|
120
|
-
rtn = Hive.devicedb('Hive').poll(id)
|
121
|
-
Hive.logger.debug "Return data: #{rtn}"
|
122
|
-
if rtn['error'].present?
|
123
|
-
Hive.logger.warn "Hive polling failed: #{rtn['error']}"
|
124
|
-
else
|
125
|
-
Hive.logger.info "Successfully polled hive"
|
126
|
-
end
|
127
|
-
else
|
128
|
-
if id
|
129
|
-
Hive.logger.debug "Skipping polling of hive"
|
130
|
-
else
|
131
|
-
Hive.logger.warn "Unable to poll hive"
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
# Hive Mind
|
136
|
-
Hive.logger.debug "Polling hive: #{id}"
|
88
|
+
Hive.logger.debug "Polling hive"
|
137
89
|
rtn = Hive.hive_mind.poll
|
138
90
|
Hive.logger.debug "Return data: #{rtn}"
|
139
91
|
if rtn['error'].present?
|