hive-runner 2.0.1 → 2.0.3

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: 6d78f772fbb762e90253f3b4ce45ed962ebb7d0e
4
- data.tar.gz: b9b3b9148ac42e9ce2a4b9d3af313f136cf4ccee
3
+ metadata.gz: e207ec510637bfa6487c519394b19e812d0b8cb7
4
+ data.tar.gz: bf62fa9fdcd02e893bf1c774c72f106684d343dc
5
5
  SHA512:
6
- metadata.gz: 5ab5632889804523ae54e5735af3a2f026aa4885835a416527c0f9ca743cba8a5552565be5e5acb5907faece36b472d330c9c4cd44e607db62206b6798b29e01
7
- data.tar.gz: d882cc93fa6db6128d5bb3019dbcad8d5a14e20ec57b559be94dc63c8d3cc0a0aeeaf8c1fba565c6bfa557dc99f4e4ff67766c2fbc15d6e176e9a3a403d924c7
6
+ metadata.gz: fe11351de90fc9333ef2c16c1fd67bb24795c3cc0539716d37f6026ba20c229d6abff2e749a5802834a97871b13d60347ac12bed5b8f904ff310ee37483b91f8
7
+ data.tar.gz: 038c7db4752776eee051e410ce40b7ec65fc3b024113fe5bff48bfea692b0853565b2ac305496394de7e5d113ce9693602f7422ede8357000f727f879ba8b0ba
@@ -134,10 +134,11 @@ File.open("#{dir}/config/settings.yml", 'w') do |f|
134
134
  f.puts ''
135
135
  f.puts ' # Configuration for various network options'
136
136
  f.puts ' network:'
137
- f.puts ' scheduler: https://scheduler'
138
- f.puts ' devicedb: https://devicedb'
139
- f.puts ' cert: /path/to/certificate.pem'
140
- f.puts ' cafile: /path/to/certificate-authorities.pem'
137
+ f.puts ' scheduler: http://scheduler'
138
+ f.puts ' devicedb: http://devicedb'
139
+ f.puts ' #hive_mind: http://hive_mind'
140
+ f.puts ' # cert: /path/to/certificate.pem'
141
+ f.puts ' # cafile: /path/to/certificate-authorities.pem'
141
142
  f.puts ''
142
143
  f.puts ' # Configuration for diagnostic plugins'
143
144
  f.puts ' diagnostics:'
@@ -2,6 +2,7 @@ require 'chamber'
2
2
  require 'hive/log'
3
3
  require 'hive/register'
4
4
  require 'devicedb_comms'
5
+ require 'mind_meld'
5
6
  require 'macaddr'
6
7
  require 'socket'
7
8
 
@@ -29,7 +30,9 @@ module Hive
29
30
  else
30
31
  fail 'Missing logging section in configuration file'
31
32
  end
32
-
33
+ @hive_mind = MindMeld.new(
34
+ url: Chamber.env.network.hive_mind? ? Chamber.env.network.hive_mind : nil
35
+ )
33
36
  DeviceDBComms.configure do |config|
34
37
  config.url = Chamber.env.network.devicedb
35
38
  config.pem_file = Chamber.env.network.cert
@@ -59,12 +62,35 @@ module Hive
59
62
  @devicedb[section] ||= Object.const_get('DeviceDBComms').const_get(section).new()
60
63
  end
61
64
 
65
+ def self.hive_mind
66
+ @hive_mind
67
+ end
68
+
62
69
  def self.register
63
70
  @register ||= Hive::Register.new
64
71
  end
65
72
 
66
73
  # Get the id of the hive from the device database
67
- def self.id
74
+ def self.hive_mind_id
75
+ if ! @hive_mind_id
76
+ Hive.logger.info "About to poll"
77
+ reg = @hive_mind.register(
78
+ hostname: Hive.hostname,
79
+ version: Gem::Specification.find_by_name('hive-runner').version.to_s,
80
+ runner_plugins: Hash[Gem::Specification.find_all_by_name(/hive-runner-*/).map { |p| [p.name, p.version.to_s] }],
81
+ macs: [Hive.mac_address],
82
+ ips: [Hive.ip_address],
83
+ brand: Hive.config.brand? ? Hive.config.brand : 'BBC',
84
+ model: Hive.config.model? ? Hive.config.model : 'Hive',
85
+ device_type: 'Hive'
86
+ )
87
+ @hive_mind_id = reg['id']
88
+ end
89
+ @hive_mind_id || -1
90
+ end
91
+
92
+ # Get the id of the hive from the device database
93
+ def self.id
68
94
  if ! @devicedb_id
69
95
  Hive.logger.info "Attempting to register the hive as #{Hive.hostname}"
70
96
  register_response = self.devicedb('Hive').register(Hive.hostname, Hive.mac_address, Hive.ip_address)
@@ -81,6 +107,7 @@ module Hive
81
107
 
82
108
  # Poll the device database
83
109
  def self.poll
110
+ # DeviceDB
84
111
  id = self.id
85
112
  if id and id > 0
86
113
  Hive.logger.debug "Polling hive: #{id}"
@@ -98,6 +125,25 @@ module Hive
98
125
  Hive.logger.warn "Unable to poll hive"
99
126
  end
100
127
  end
128
+
129
+ # Hive Mind
130
+ id = self.hive_mind_id
131
+ if id and id > 0
132
+ Hive.logger.debug "Polling hive: #{id}"
133
+ # rtn = @hivemind.poll(id)
134
+ # Hive.logger.debug "Return data: #{rtn}"
135
+ # if rtn['error'].present?
136
+ # Hive.logger.warn "Hive polling failed: #{rtn['error']}"
137
+ # else
138
+ # Hive.logger.info "Successfully polled hive"
139
+ # end
140
+ else
141
+ if id
142
+ Hive.logger.debug "Skipping polling of hive"
143
+ else
144
+ Hive.logger.warn "Unable to poll hive"
145
+ end
146
+ end
101
147
  end
102
148
 
103
149
  # Get the IP address of the Hive
@@ -39,33 +39,19 @@ module Hive
39
39
  end
40
40
 
41
41
  def fetch_build(build_url, destination_path)
42
- if !fetch_build_with_curl(build_url, destination_path)
43
- @log.info( "Initial build fetch failed -- trying again shortly")
44
- sleep 5
45
- if !fetch_build_with_curl(build_url, destination_path)
46
- raise "Build could not be downloaded"
47
- end
48
- end
49
- end
50
-
51
- def fetch_build_with_curl(build_url, destination_path)
52
- cert_path = Hive.config.network['cert']
53
- cabundle_path = Hive.config.network['cafile']
54
42
  base_url = Hive.config.network['scheduler']
55
43
  apk_url = base_url + '/' + build_url
56
- curl_line = "curl -L -m 60 #{apk_url} --cert #{cert_path} --cacert #{cabundle_path} --retry 3 -o #{destination_path}"
44
+
45
+ job = Hive::Messages::Job.new
46
+ response = job.fetch(apk_url)
57
47
 
58
- @log.info("Fetching build from hive-scheduler: #{curl_line}")
59
- @log.debug("CURL line: #{curl_line}")
60
- response = `#{curl_line}`
61
- if $? != 0
62
- @log.info("Curl error #{$?}: #{response.to_s}")
63
- false
64
- Hive::Messages
65
- else
66
- @log.info("Curl seems happy, checking integrity of downloaded file")
67
- check_build_integrity( destination_path )
48
+ tempfile = Tempfile.new('build.apk')
49
+ File.open(tempfile.path,'w') do |f|
50
+ f.write response.body
68
51
  end
52
+
53
+ copy_file(tempfile.path, destination_path)
54
+ check_build_integrity( destination_path )
69
55
  end
70
56
 
71
57
  def check_build_integrity( destination_path )
@@ -124,9 +124,7 @@ module Hive
124
124
  # Upload results
125
125
  @file_system.finalise_results_directory
126
126
  upload_files(@job, @file_system.results_path, @file_system.logs_path)
127
- File.open("#{@file_system.home_path}/job_info", 'w') do |f|
128
- f.puts "#{Process.pid} completed"
129
- end
127
+ set_job_state_to :completed
130
128
  @job.error('Worker killed')
131
129
  @log.info "Worker terminated"
132
130
  exit
@@ -139,9 +137,7 @@ module Hive
139
137
  begin
140
138
  @log.info "Setting job paths"
141
139
  @file_system = Hive::FileSystem.new(@job.job_id, Hive.config.logging.home, @log)
142
- File.open("#{@file_system.home_path}/job_info", 'w') do |f|
143
- f.puts "#{Process.pid} running"
144
- end
140
+ set_job_state_to :preparing
145
141
 
146
142
  if ! @job.repository.to_s.empty?
147
143
  @log.info "Checking out the repository"
@@ -175,6 +171,7 @@ module Hive
175
171
  @log.info "Appending test script to execution script"
176
172
  @script.append_bash_cmd @job.command
177
173
 
174
+ set_job_state_to :running
178
175
  @job.start
179
176
 
180
177
  @log.info "Pre-execution setup"
@@ -189,6 +186,7 @@ module Hive
189
186
 
190
187
  begin
191
188
  @log.info "Post-execution cleanup"
189
+ set_job_state_to :uploading
192
190
  post_script(@job, @file_system, @script)
193
191
 
194
192
  # Upload results
@@ -202,6 +200,7 @@ module Hive
202
200
 
203
201
  if exception
204
202
  @job.error( exception.message )
203
+ set_job_state_to :completed
205
204
  raise exception
206
205
  else
207
206
  @job.complete
@@ -212,9 +211,7 @@ module Hive
212
211
  exit
213
212
  end
214
213
 
215
- File.open("#{@file_system.home_path}/job_info", 'w') do |f|
216
- f.puts "#{Process.pid} completed"
217
- end
214
+ set_job_state_to :completed
218
215
  exit_value == 0
219
216
  end
220
217
 
@@ -396,5 +393,12 @@ module Hive
396
393
  @log.warn("Use @port_allocator.release_all_ports instead")
397
394
  @port_allocator.release_all_ports
398
395
  end
396
+
397
+ # Set job info file
398
+ def set_job_state_to state
399
+ File.open("#{@file_system.home_path}/job_info", 'w') do |f|
400
+ f.puts "#{Process.pid} #{state}"
401
+ end
402
+ end
399
403
  end
400
404
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hive-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Haig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-17 00:00:00.000000000 Z
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chamber
@@ -112,16 +112,22 @@ dependencies:
112
112
  name: hive-messages
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '1.0'
117
+ version: 1.0.3
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.1'
118
121
  type: :runtime
119
122
  prerelease: false
120
123
  version_requirements: !ruby/object:Gem::Requirement
121
124
  requirements:
122
- - - "~>"
125
+ - - ">="
123
126
  - !ruby/object:Gem::Version
124
- version: '1.0'
127
+ version: 1.0.3
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.1'
125
131
  - !ruby/object:Gem::Dependency
126
132
  name: devicedb_comms
127
133
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +142,20 @@ dependencies:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
144
  version: '0.1'
145
+ - !ruby/object:Gem::Dependency
146
+ name: mind_meld
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
139
159
  - !ruby/object:Gem::Dependency
140
160
  name: code_cache
141
161
  requirement: !ruby/object:Gem::Requirement