hive-runner-android 1.1.3 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hive/controller/android.rb +110 -95
- data/lib/hive/device/android.rb +47 -1
- data/lib/hive/worker/android.rb +2 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76719b13d1011b70fadf007b22fe7dd936319a47
|
4
|
+
data.tar.gz: 46f0e34cc3a6178c5d25ca9c5c63aed074fceb1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 292ebf4003518d361c169fdfba25652b37c7a6b04f7bc53a98bd23e0ec317f5499add31c8cd1c1edbd0e6301627b7e97bf415e3121189c92d9538e287cececf4
|
7
|
+
data.tar.gz: 5b62ace7cb0c0a3bbb2f930f5db7e400ba56fed1c7cf3b014d3fdf019667dbe6f33ca5713b57ce97bf361ac106e10cc2f2706cd8ec8e7853b4611937461c417c
|
@@ -6,107 +6,105 @@ module Hive
|
|
6
6
|
class Controller
|
7
7
|
class Android < Controller
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
queues = [
|
13
|
-
device.model,
|
14
|
-
device.manufacturer,
|
15
|
-
'android',
|
16
|
-
"android-#{device.version}",
|
17
|
-
"android-#{device.version}-#{device.model}"
|
18
|
-
]
|
19
|
-
else
|
20
|
-
|
21
|
-
queues = [
|
22
|
-
device['device_model'],
|
23
|
-
device['device_brand'],
|
24
|
-
device['os'],
|
25
|
-
"#{device['os']}-#{device['os_version']}",
|
26
|
-
"#{device['os']}-#{device['os_version']}-#{device['device_model']}"
|
27
|
-
]
|
28
|
-
|
29
|
-
queues << device["features"] unless device["features"].empty?
|
30
|
-
|
31
|
-
queues.flatten
|
32
|
-
end
|
33
|
-
queues
|
9
|
+
def detect
|
10
|
+
self.detect_hive_mind
|
11
|
+
self.detect_devicedb
|
34
12
|
end
|
35
13
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
queues = queues.map { |a| "#{@config['queue_prefix']}-#{a}"} if @config['queue_prefix']
|
41
|
-
|
42
|
-
devicedb_queues = device['device_queues'].map { |d| d['name'] }
|
43
|
-
# Check to see if the queues have already been registered with this device
|
44
|
-
missing_queues = (queues - devicedb_queues) + (devicedb_queues - queues)
|
45
|
-
return if missing_queues.empty?
|
46
|
-
|
47
|
-
queues << missing_queues
|
48
|
-
|
49
|
-
queue_ids = queues.flatten.uniq.map { |queue| find_or_create_queue(queue) }
|
14
|
+
# Register with Hive Mind (New)
|
15
|
+
def detect_hive_mind
|
16
|
+
devices = DeviceAPI::Android.devices
|
17
|
+
Hive.logger.debug('HM) No devices attached') if devices.empty?
|
50
18
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
feature_list: device['features'],
|
55
|
-
device_queue_ids: queue_ids
|
56
|
-
}
|
19
|
+
if not Hive.hive_mind.device_details.has_key? :error
|
20
|
+
# Selecting only android mobiles
|
21
|
+
connected_devices = Hive.hive_mind.device_details['connected_devices'].select{ |d| d['device_type'] == 'Mobile' && d['operating_system_name'] == 'android' }
|
57
22
|
|
58
|
-
|
59
|
-
|
23
|
+
to_poll = []
|
24
|
+
attached_devices = []
|
25
|
+
connected_devices.each do |device|
|
26
|
+
Hive.logger.debug("HM) Device details: #{device.inspect}")
|
27
|
+
registered_device = devices.select { |a| a.serial == device['serial'] && a.status != :unauthorized }
|
28
|
+
if registered_device.empty?
|
29
|
+
# A previously registered device isn't attached
|
30
|
+
Hive.logger.debug("HM) Removing previously registered device - #{device}")
|
31
|
+
Hive.hive_mind.disconnect(device['id'])
|
32
|
+
else
|
33
|
+
# A previously registered device is attached, poll it
|
34
|
+
Hive.logger.debug("HM) Setting #{device} to be polled")
|
35
|
+
Hive.logger.info("HM) Stuff: #{registered_device.inspect}")
|
36
|
+
begin
|
37
|
+
attached_devices << self.create_device(device.merge('os_version' => registered_device[0].version))
|
38
|
+
to_poll << device['id']
|
39
|
+
rescue DeviceAPI::DeviceNotFound => e
|
40
|
+
Hive.logger.warn("HM) Device disconnected before registration (serial: #{device.serial})")
|
41
|
+
rescue => e
|
42
|
+
Hive.logger.warn("HM) Error with connected device: #{e.message}")
|
43
|
+
end
|
60
44
|
|
61
|
-
|
62
|
-
|
45
|
+
devices = devices - registered_device
|
46
|
+
end
|
47
|
+
end
|
63
48
|
|
64
|
-
|
49
|
+
# Poll already registered devices
|
50
|
+
Hive.logger.debug("HM) Polling: #{to_poll}")
|
51
|
+
Hive.hive_mind.poll(*to_poll)
|
52
|
+
|
53
|
+
# Register new devices
|
54
|
+
devices.select{|a| a.status != :unauthorized}.each do |device|
|
55
|
+
begin
|
56
|
+
dev = Hive.hive_mind.register(
|
57
|
+
hostname: device.model,
|
58
|
+
serial: device.serial,
|
59
|
+
macs: [device.wifi_mac_address],
|
60
|
+
ips: [device.ip_address],
|
61
|
+
brand: device.manufacturer.capitalize,
|
62
|
+
model: device.model,
|
63
|
+
device_type: 'Mobile',
|
64
|
+
imei: device.imei,
|
65
|
+
operating_system_name: 'android',
|
66
|
+
operating_system_version: device.version
|
67
|
+
)
|
68
|
+
Hive.hive_mind.connect(dev['id'])
|
69
|
+
Hive.logger.info("HM) Device registered: #{dev}")
|
70
|
+
rescue DeviceAPI::DeviceNotFound => e
|
71
|
+
Hive.logger.warn("HM) Device disconnected before registration (serial: #{device.serial})")
|
72
|
+
rescue => e
|
73
|
+
Hive.logger.warn("HM) Error with connected device: #{e.message}")
|
74
|
+
end
|
75
|
+
end
|
65
76
|
|
66
|
-
|
67
|
-
|
68
|
-
|
77
|
+
else
|
78
|
+
Hive.logger.info('HM) No Hive Mind connection')
|
79
|
+
# Hive Mind isn't available, use DeviceAPI instead
|
80
|
+
device_info = devices.select { |a| a.status != :unauthorized }.map do |device|
|
81
|
+
{
|
82
|
+
'id' => device.serial,
|
83
|
+
'serial' => device.serial,
|
84
|
+
'status' => 'idle',
|
85
|
+
'model' => device.model,
|
86
|
+
'brand' => device.manufacturer,
|
87
|
+
'os_version' => device.version
|
88
|
+
}
|
89
|
+
end
|
69
90
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
}
|
91
|
+
attached_devices = device_info.collect do |physical_device|
|
92
|
+
self.create_device(physical_device)
|
93
|
+
end
|
94
|
+
end
|
75
95
|
|
76
|
-
Hive.
|
96
|
+
Hive.logger.info(attached_devices)
|
97
|
+
attached_devices
|
77
98
|
end
|
78
99
|
|
79
|
-
|
100
|
+
# Register with DeviceDB (Old)
|
101
|
+
def detect_devicedb
|
80
102
|
devices = DeviceAPI::Android.devices
|
81
103
|
Hive.logger.debug('No devices attached') if devices.empty?
|
82
104
|
Hive.logger.debug("#{Time.now} Retrieving hive details")
|
83
105
|
hive_details = Hive.devicedb('Hive').find(Hive.id)
|
84
106
|
Hive.logger.debug("#{Time.now} Finished fetching hive details")
|
85
|
-
|
86
|
-
devices.each do |device|
|
87
|
-
begin
|
88
|
-
Hive.hive_mind.register(
|
89
|
-
hostname: device.model,
|
90
|
-
serial: device.serial,
|
91
|
-
macs: [device.wifi_mac_address],
|
92
|
-
ips: [device.ip_address],
|
93
|
-
brand: device.manufacturer.capitalize,
|
94
|
-
model: device.model,
|
95
|
-
device_type: 'Mobile',
|
96
|
-
imei: device.imei,
|
97
|
-
hive_id: Hive.id
|
98
|
-
)
|
99
|
-
rescue DeviceAPI::DeviceNotFound
|
100
|
-
Hive.logger.info("Device '#{device.serial}' disconnected during registration")
|
101
|
-
devices.delete(device)
|
102
|
-
rescue DeviceAPI::UnauthorizedDevice
|
103
|
-
Hive.logger.info("Device '#{device.serial}' is unauthorized")
|
104
|
-
devices.delete(device)
|
105
|
-
rescue => e
|
106
|
-
Hive.logger.warn("Error with connected device: #{e.message}")
|
107
|
-
devices.delete(device)
|
108
|
-
end
|
109
|
-
end
|
107
|
+
attached_devices = []
|
110
108
|
|
111
109
|
if hive_details.key?('devices')
|
112
110
|
# Update the 'cached' results from DeviceDB
|
@@ -130,10 +128,21 @@ module Hive
|
|
130
128
|
Hive.devicedb('Device').poll(device['id'])
|
131
129
|
Hive.logger.debug("#{Time.now} Finished polling device")
|
132
130
|
|
133
|
-
# Make sure that this device has all the queues it should have
|
134
|
-
populate_queues(device)
|
135
|
-
|
136
131
|
devices = devices - registered_device
|
132
|
+
begin
|
133
|
+
attached_devices <<
|
134
|
+
self.create_device(device.merge(
|
135
|
+
'os_version' => registered_device[0].version,
|
136
|
+
'model' => device['device_model'],
|
137
|
+
'brand' => device['device_brand'],
|
138
|
+
'queues' => device['device_queues'].map{ |d| d['name'] },
|
139
|
+
'queue_prefix' => @config['queue_prefix']
|
140
|
+
))
|
141
|
+
rescue DeviceAPI::DeviceNotFound
|
142
|
+
Hive.logger.info("Device '#{device.serial}' disconnected during registration")
|
143
|
+
rescue => e
|
144
|
+
Hive.logger.warn("Error with connected device: #{e.message}")
|
145
|
+
end
|
137
146
|
end
|
138
147
|
end
|
139
148
|
|
@@ -142,20 +151,26 @@ module Hive
|
|
142
151
|
end
|
143
152
|
|
144
153
|
display_devices(hive_details)
|
145
|
-
|
146
|
-
hive_details['devices'].select {|a| a['os'] == 'android'}.collect do |hive_device|
|
147
|
-
self.create_device(hive_device)
|
148
|
-
end
|
149
154
|
else
|
150
155
|
# DeviceDB isn't available, use DeviceAPI instead
|
151
|
-
|
152
|
-
|
156
|
+
|
157
|
+
device_info = devices.select { |a| a.status != :unauthorized }.map do |device|
|
158
|
+
{
|
159
|
+
'id' => device.serial,
|
160
|
+
'serial' => device.serial,
|
161
|
+
'status' => 'idle',
|
162
|
+
'model' => device.model,
|
163
|
+
'brand' => device.manufacturer,
|
164
|
+
'os_version' => device.version,
|
165
|
+
'queue_prefix' => @config['queue_prefix']
|
166
|
+
}
|
153
167
|
end
|
154
168
|
|
155
|
-
device_info.collect do |physical_device|
|
169
|
+
attached_devices = device_info.collect do |physical_device|
|
156
170
|
self.create_device(physical_device)
|
157
171
|
end
|
158
172
|
end
|
173
|
+
attached_devices
|
159
174
|
end
|
160
175
|
|
161
176
|
def register_new_device(device)
|
data/lib/hive/device/android.rb
CHANGED
@@ -3,10 +3,56 @@ require 'hive/device'
|
|
3
3
|
module Hive
|
4
4
|
class Device
|
5
5
|
class Android < Device
|
6
|
+
attr_accessor :model, :brand, :os_version
|
7
|
+
|
6
8
|
def initialize(config)
|
7
9
|
@identity = config['id']
|
10
|
+
@queue_prefix = config['queue_prefix'].to_s == '' ? '' : "#{config['queue_prefix']}-"
|
11
|
+
@model = config['model'].downcase.gsub(/\s/, '_')
|
12
|
+
@brand = config['brand'].downcase.gsub(/\s/, '_')
|
13
|
+
@os_version = config['os_version']
|
14
|
+
|
15
|
+
Hive.logger.info("Config: #{config.inspect}")
|
16
|
+
new_queues = calculate_queue_names
|
17
|
+
new_queues = new_queues | config['queues'] if config.has_key?('queues')
|
18
|
+
|
19
|
+
devicedb_ids = new_queues.map { |queue| find_or_create_queue(queue) }
|
20
|
+
Hive.devicedb('Device').edit(@identity, { device_queue_ids: devicedb_ids })
|
21
|
+
config['queues'] = new_queues
|
8
22
|
super
|
9
23
|
end
|
24
|
+
|
25
|
+
# Uses either DeviceAPI or DeviceDB to generate queue names for a device
|
26
|
+
def calculate_queue_names
|
27
|
+
Hive.logger.info("QUEUE PREFIX; #{@queue_prefix}")
|
28
|
+
[
|
29
|
+
"#{@queue_prefix}#{self.model}",
|
30
|
+
"#{@queue_prefix}#{self.brand}",
|
31
|
+
"#{@queue_prefix}android",
|
32
|
+
"#{@queue_prefix}android-#{self.os_version}",
|
33
|
+
"#{@queue_prefix}android-#{self.os_version}-#{self.model}"
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def find_or_create_queue(name)
|
40
|
+
queue = Hive.devicedb('Queue').find_by_name(name)
|
41
|
+
|
42
|
+
return queue.first['id'] unless queue.empty? || queue.is_a?(Hash)
|
43
|
+
|
44
|
+
queue = create_queue(name, "#{name} queue created by Hive Runner")
|
45
|
+
queue['id'] unless queue.empty?
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_queue(name, description)
|
49
|
+
queue_attributes = {
|
50
|
+
name: name,
|
51
|
+
description: description
|
52
|
+
}
|
53
|
+
|
54
|
+
Hive.devicedb('Queue').register(device_queue: queue_attributes)
|
55
|
+
end
|
10
56
|
end
|
11
57
|
end
|
12
|
-
end
|
58
|
+
end
|
data/lib/hive/worker/android.rb
CHANGED
@@ -82,6 +82,7 @@ module Hive
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def device_status
|
85
|
+
# TODO Get from Hive Mind
|
85
86
|
details = Hive.devicedb('Device').find(@options['id'])
|
86
87
|
if details.key?('status')
|
87
88
|
@state = details['status']
|
@@ -91,6 +92,7 @@ module Hive
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def set_device_status(status)
|
95
|
+
# TODO Report to Hive Mind
|
94
96
|
@state = status
|
95
97
|
begin
|
96
98
|
details = Hive.devicedb('Device').poll(@options['id'], status)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hive-runner-android
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: device_api-android
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.0.5
|
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:
|
40
|
+
version: 2.0.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: terminal-table
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.4.8
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: Hive Runner Android
|