optimus-runner 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -3
- data/exe/optimus-runner +11 -0
- data/exe/optimus_runner_manager +5 -0
- data/lib/optimus-runner/AppiumLocalService.rb +2 -2
- data/lib/optimus-runner/DeviceDetails.rb +17 -10
- data/lib/optimus-runner/clients/AkiraClient.rb +30 -0
- data/lib/optimus-runner/clients/AppiumServerClient.rb +18 -0
- data/lib/optimus-runner/server/optimus_runner_sm.rb +46 -7
- data/lib/optimus-runner/version.rb +1 -1
- data/optimus-runner.gemspec +2 -0
- metadata +34 -8
- data/optimus-runner-0.12.0.gem +0 -0
- data/optimus-runner-0.13.0.gem +0 -0
- data/optimus-runner-0.14.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13e5dec7f952733d14d108f33347b3e16605b34978bad30bbe7b838068f4a4e9
|
4
|
+
data.tar.gz: 3acc90f802671fb7ae07c11f32a07414ef7a4fa7d1d1062d054fde92c7f2fcd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ad4243220a96544d38d89971de59810dd65b1e36f117d6dc61acca2af20ef48adebf6a85ddb04c23da96caeea762206b092cf300659c5eb57bd589557ee8921
|
7
|
+
data.tar.gz: e675ea483105f3e0c45523fc539bd04665d176c723c5ea13858ff5a9904876f63417945a204d6116dc44ccfb6c4d1e5e7c1366342fb756e75c46c1ea7881244e
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
optimus-runner (1.
|
4
|
+
optimus-runner (1.1.4)
|
5
5
|
aasm (~> 5.0)
|
6
6
|
daemons (~> 1.3)
|
7
7
|
dotenv (~> 2.1, >= 2.1.1)
|
8
|
+
exponential-backoff (~> 0.0.4)
|
8
9
|
httparty (~> 0.16.3)
|
10
|
+
nenv (~> 0.3.0)
|
9
11
|
open4 (~> 1.3)
|
10
12
|
os (~> 1.0, >= 1.0.1)
|
11
13
|
random-port (~> 0.3.1)
|
@@ -14,14 +16,15 @@ PATH
|
|
14
16
|
GEM
|
15
17
|
remote: https://rubygems.org/
|
16
18
|
specs:
|
17
|
-
aasm (5.0.
|
19
|
+
aasm (5.0.8)
|
18
20
|
concurrent-ruby (~> 1.0)
|
19
21
|
concurrent-ruby (1.1.6)
|
20
22
|
daemons (1.3.1)
|
21
23
|
diff-lcs (1.3)
|
22
24
|
dotenv (2.7.5)
|
23
|
-
et-orbi (1.2.
|
25
|
+
et-orbi (1.2.4)
|
24
26
|
tzinfo
|
27
|
+
exponential-backoff (0.0.4)
|
25
28
|
fugit (1.3.3)
|
26
29
|
et-orbi (~> 1.1, >= 1.1.8)
|
27
30
|
raabro (~> 1.1)
|
@@ -32,6 +35,7 @@ GEM
|
|
32
35
|
mime-types-data (~> 3.2015)
|
33
36
|
mime-types-data (3.2019.1009)
|
34
37
|
multi_xml (0.6.0)
|
38
|
+
nenv (0.3.0)
|
35
39
|
open4 (1.3.4)
|
36
40
|
os (1.0.1)
|
37
41
|
raabro (1.1.6)
|
data/exe/optimus-runner
CHANGED
@@ -18,10 +18,21 @@ options = {
|
|
18
18
|
:log_dir => "#{File.expand_path('~')}/optimus_runner/logs",
|
19
19
|
:logfilename => 'optimus-runner.log'
|
20
20
|
}
|
21
|
+
|
22
|
+
ENV["ANDROID"]="true"
|
23
|
+
ENV["IOS"]="true"
|
21
24
|
optparser = OptionParser.new do |parser|
|
22
25
|
parser.on('-e=FILE','--env=FILE', "Optimus Cloud Environment file") do |file|
|
23
26
|
Dotenv.load(file)
|
24
27
|
end
|
28
|
+
parser.on('-a','--android-only',"Create sessions for android") do
|
29
|
+
ENV["IOS"]="false"
|
30
|
+
p "running android"
|
31
|
+
end
|
32
|
+
parser.on('-i','--ios-only',"Create sessions for iOS") do
|
33
|
+
ENV["ANDROID"]="false"
|
34
|
+
p "running ios"
|
35
|
+
end
|
25
36
|
end
|
26
37
|
optparser.parse!(ARGV)
|
27
38
|
Daemons.run(File.join(File.dirname(__FILE__),'optimus_runner_manager'), options)
|
data/exe/optimus_runner_manager
CHANGED
@@ -18,5 +18,10 @@ scheduler.interval '5s', :first_in => 0.1 do
|
|
18
18
|
optimus_runner_sm.add if optimus_runner_sm.new_device_added?
|
19
19
|
optimus_runner_sm.remove if optimus_runner_sm.device_removed?
|
20
20
|
optimus_runner_sm.restart if optimus_runner_sm.session_terminated?
|
21
|
+
optimus_runner_sm.empty if optimus_runner_sm.cloud_session_empty? # You have done FLUSHALL in akira
|
22
|
+
end
|
23
|
+
|
24
|
+
scheduler.every '1m', :first_in => 60 do
|
25
|
+
optimus_runner_sm.session_state
|
21
26
|
end
|
22
27
|
scheduler.join
|
@@ -53,9 +53,9 @@ class AppiumLocalService
|
|
53
53
|
def get_cmd(device_detail)
|
54
54
|
case device_detail["platform"]
|
55
55
|
when "ANDROID"
|
56
|
-
return "appium -p #{@port} --bootstrap-port #{get_random_port}"
|
56
|
+
return "appium -p #{@port} --bootstrap-port #{get_random_port} --relaxed-security --default-capabilities '{\"systemPort\":#{get_random_port}}'"
|
57
57
|
when "IOS"
|
58
|
-
return "appium -p #{@port} --webdriveragent-port #{get_random_port}"
|
58
|
+
return "appium -p #{@port} --webdriveragent-port #{get_random_port} --relaxed-security"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'HTTParty'
|
2
2
|
require 'optimus-runner/clients/mdb_client'
|
3
3
|
require 'os'
|
4
|
+
require 'nenv'
|
4
5
|
|
5
6
|
class DeviceDetails
|
6
7
|
|
@@ -17,12 +18,16 @@ class DeviceDetails
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def process_android_devices
|
20
|
-
|
21
|
+
if(Nenv.android?)
|
22
|
+
devices = `adb devices`
|
23
|
+
else
|
24
|
+
devices = []
|
25
|
+
end
|
21
26
|
return MDBClient.new.format_android_devices devices
|
22
27
|
end
|
23
28
|
|
24
29
|
def process_ios_devices
|
25
|
-
if(OS.mac?)
|
30
|
+
if(OS.mac? && Nenv.ios?)
|
26
31
|
devices = `instruments -s devices | grep 'iPhone'`
|
27
32
|
return [] if devices.length == 0
|
28
33
|
return MDBClient.new.format_ios_devices devices
|
@@ -32,14 +37,16 @@ class DeviceDetails
|
|
32
37
|
|
33
38
|
def find_android_devices(device_names)
|
34
39
|
device_details = []
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
if(Nenv.android?)
|
41
|
+
device_names.each do |a|
|
42
|
+
puts "adb -s #{a['udid']} shell getprop ro.product.model"
|
43
|
+
device_model = `adb -s #{a['udid']} shell getprop ro.product.model`
|
44
|
+
device_os_version = `adb -s #{a['udid']} shell getprop ro.build.version.release`
|
45
|
+
a['deviceName'] = device_model.to_s.rstrip
|
46
|
+
a['platformVersion'] = device_os_version.to_s.rstrip
|
47
|
+
a["platform"] = "ANDROID"
|
48
|
+
device_details.push(a)
|
49
|
+
end
|
43
50
|
end
|
44
51
|
device_details
|
45
52
|
end
|
@@ -28,6 +28,14 @@ class AkriaClient
|
|
28
28
|
HTTParty.put(uri, query: query_params, headers: get_default_headers)
|
29
29
|
end
|
30
30
|
|
31
|
+
def release_session(session_url)
|
32
|
+
uri = "#{@base_uri}/sessionState/release"
|
33
|
+
query_params = {
|
34
|
+
'sessionUrl':session_url
|
35
|
+
}
|
36
|
+
HTTParty.put(uri, query: query_params, headers: get_default_headers)
|
37
|
+
end
|
38
|
+
|
31
39
|
def get_session_info(session_url)
|
32
40
|
uri = "#{@base_uri}/sessionInfo"
|
33
41
|
puts uri
|
@@ -39,6 +47,25 @@ class AkriaClient
|
|
39
47
|
return session_info
|
40
48
|
end
|
41
49
|
|
50
|
+
def get_session_state(session_url)
|
51
|
+
uri = "#{@base_uri}/sessionState"
|
52
|
+
query_params = {
|
53
|
+
'sessionUrl':session_url
|
54
|
+
}
|
55
|
+
response = HTTParty.get(uri, query: query_params, headers: get_default_headers)
|
56
|
+
p response
|
57
|
+
session_state = response
|
58
|
+
return session_state
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_all_sessions
|
62
|
+
uri = "#{@base_uri}/sessionsList"
|
63
|
+
puts uri
|
64
|
+
response = HTTParty.get(uri, headers: get_default_headers)
|
65
|
+
sessions = JSON.parse(response.to_s)
|
66
|
+
return sessions
|
67
|
+
end
|
68
|
+
|
42
69
|
|
43
70
|
def get_default_headers
|
44
71
|
headers = {
|
@@ -48,4 +75,7 @@ class AkriaClient
|
|
48
75
|
end
|
49
76
|
|
50
77
|
|
78
|
+
|
79
|
+
|
80
|
+
|
51
81
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'HTTParty'
|
2
|
+
|
3
|
+
class AppiumServerClient
|
4
|
+
def isSessionAlive?(session_url)
|
5
|
+
uri = "#{session_url}/sessions"
|
6
|
+
response = HTTParty.get(uri, headers: get_default_headers)
|
7
|
+
sessions = JSON.parse(response.to_s)
|
8
|
+
session_state = sessions["value"].empty?
|
9
|
+
return !session_state
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_default_headers
|
13
|
+
headers = {
|
14
|
+
'Content-Type': "Application/json"
|
15
|
+
}
|
16
|
+
return headers
|
17
|
+
end
|
18
|
+
end
|
@@ -7,9 +7,10 @@ require 'json'
|
|
7
7
|
require 'optimus-runner/AppiumLocalService'
|
8
8
|
require 'optimus-runner/SessionInfoBuilder'
|
9
9
|
require 'optimus-runner/clients/AkiraClient'
|
10
|
-
require 'optimus-runner/clients/
|
10
|
+
require 'optimus-runner/clients/AppiumServerClient'
|
11
11
|
require 'logger'
|
12
12
|
require 'optimus-runner/commands/ShellCommands'
|
13
|
+
require 'exponential_backoff'
|
13
14
|
|
14
15
|
class OptimusRunnerSM
|
15
16
|
include AASM
|
@@ -51,6 +52,16 @@ class OptimusRunnerSM
|
|
51
52
|
transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
|
52
53
|
transitions :from => [:created, :added, :removed, :restarted], :to => :idle
|
53
54
|
end
|
55
|
+
|
56
|
+
event :empty, :before => :empty_sessions do
|
57
|
+
transitions :from => [:created, :added, :removed, :restarted], :to => :added, :guard => :cloud_session_empty?
|
58
|
+
transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
|
59
|
+
transitions :from => [:created, :added, :removed, :restarted], :to => :idle
|
60
|
+
end
|
61
|
+
|
62
|
+
event :session_state, :before => :is_session_alive? do
|
63
|
+
transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
|
64
|
+
end
|
54
65
|
end
|
55
66
|
|
56
67
|
def devices_available?
|
@@ -76,6 +87,10 @@ class OptimusRunnerSM
|
|
76
87
|
@session_restarted
|
77
88
|
end
|
78
89
|
|
90
|
+
def session_empty?
|
91
|
+
@sessions_empty
|
92
|
+
end
|
93
|
+
|
79
94
|
def gather_devices
|
80
95
|
details = DeviceDetails.new
|
81
96
|
@device_details = details.get_device_details
|
@@ -86,7 +101,6 @@ class OptimusRunnerSM
|
|
86
101
|
return unless devices_available?
|
87
102
|
@logger.info "Device details found are #{@device_details}"
|
88
103
|
sessions = AppiumLocalService.new.launch_appium_sessions(@device_details)
|
89
|
-
puts sessions
|
90
104
|
@session_info = sessions
|
91
105
|
AkriaClient.new.save_sessions(@session_info)
|
92
106
|
end
|
@@ -98,7 +112,6 @@ class OptimusRunnerSM
|
|
98
112
|
# session_info = SessionInfo.new(session,device_details).create_session_info
|
99
113
|
AkriaClient.new.save_sessions(session_info)
|
100
114
|
@session_info.push session_info[0]
|
101
|
-
p @session_info
|
102
115
|
end
|
103
116
|
|
104
117
|
def add_sessions
|
@@ -127,8 +140,6 @@ class OptimusRunnerSM
|
|
127
140
|
@initial_device_set = @device_details
|
128
141
|
end
|
129
142
|
end
|
130
|
-
|
131
|
-
|
132
143
|
end
|
133
144
|
|
134
145
|
def session_terminated?
|
@@ -162,6 +173,35 @@ class OptimusRunnerSM
|
|
162
173
|
@session_restarted = true
|
163
174
|
end
|
164
175
|
|
176
|
+
def empty_sessions
|
177
|
+
return unless devices_available?
|
178
|
+
if cloud_session_empty?
|
179
|
+
p "Session Info #{@session_info}"
|
180
|
+
AkriaClient.new.save_sessions(@session_info)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def cloud_session_empty?
|
185
|
+
sessions = AkriaClient.new.get_all_sessions
|
186
|
+
return false if sessions.instance_of? Array
|
187
|
+
return true if sessions.key?("errorCode")
|
188
|
+
end
|
189
|
+
|
190
|
+
def session_state
|
191
|
+
return unless devices_available?
|
192
|
+
@session_info.each do |session|
|
193
|
+
if(is_session_engaged?(session["sessionUrl"]))
|
194
|
+
AkriaClient.new.release_session session["sessionUrl"] unless AppiumServerClient.new.isSessionAlive? session["sessionUrl"]
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def is_session_engaged?(session_url)
|
200
|
+
session_state = AkriaClient.new.get_session_state session_url
|
201
|
+
p "Session state is #{session_state}"
|
202
|
+
return session_state.casecmp?("ENGAGED")
|
203
|
+
end
|
204
|
+
|
165
205
|
def new_device_added?
|
166
206
|
added_device = get_added_devices
|
167
207
|
p "Is new devices added #{added_device.length>0}"
|
@@ -203,5 +243,4 @@ class OptimusRunnerSM
|
|
203
243
|
removed_device = @initial_device_set - @device_details
|
204
244
|
return removed_device
|
205
245
|
end
|
206
|
-
end
|
207
|
-
|
246
|
+
end
|
data/optimus-runner.gemspec
CHANGED
@@ -31,4 +31,6 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_dependency 'aasm', '~> 5.0'
|
32
32
|
spec.add_dependency 'rufus-scheduler', '~> 3.2'
|
33
33
|
spec.add_dependency 'os', '~> 1.0', '>= 1.0.1'
|
34
|
+
spec.add_dependency 'nenv', '~> 0.3.0'
|
35
|
+
spec.add_dependency 'exponential-backoff', '~> 0.0.4'
|
34
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optimus-runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KrishnanandB
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -182,6 +182,34 @@ dependencies:
|
|
182
182
|
- - ">="
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: 1.0.1
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: nenv
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - "~>"
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: 0.3.0
|
192
|
+
type: :runtime
|
193
|
+
prerelease: false
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - "~>"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: 0.3.0
|
199
|
+
- !ruby/object:Gem::Dependency
|
200
|
+
name: exponential-backoff
|
201
|
+
requirement: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - "~>"
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 0.0.4
|
206
|
+
type: :runtime
|
207
|
+
prerelease: false
|
208
|
+
version_requirements: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - "~>"
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: 0.0.4
|
185
213
|
description: ''
|
186
214
|
email:
|
187
215
|
- krisnanandb@gmail.com
|
@@ -215,6 +243,7 @@ files:
|
|
215
243
|
- lib/optimus-runner/DeviceDetails.rb
|
216
244
|
- lib/optimus-runner/SessionInfoBuilder.rb
|
217
245
|
- lib/optimus-runner/clients/AkiraClient.rb
|
246
|
+
- lib/optimus-runner/clients/AppiumServerClient.rb
|
218
247
|
- lib/optimus-runner/clients/mdb_client.rb
|
219
248
|
- lib/optimus-runner/commands/ShellCommands.rb
|
220
249
|
- lib/optimus-runner/server/appium_server_manager.rb
|
@@ -224,16 +253,13 @@ files:
|
|
224
253
|
- lib/optimus-runner/utils/optimuscloudenv.rb
|
225
254
|
- lib/optimus-runner/version.rb
|
226
255
|
- lib/optimus_runner_control.rb
|
227
|
-
- optimus-runner-0.12.0.gem
|
228
|
-
- optimus-runner-0.13.0.gem
|
229
|
-
- optimus-runner-0.14.0.gem
|
230
256
|
- optimus-runner.gemspec
|
231
257
|
- pids/optimus-runner.log
|
232
258
|
- pids/optimus_runner_outputfile.txt
|
233
259
|
homepage: https://gitlab.com/testvagrant/optimus-pleiades/optimus-cloud/optimus-runner
|
234
260
|
licenses: []
|
235
261
|
metadata: {}
|
236
|
-
post_install_message:
|
262
|
+
post_install_message:
|
237
263
|
rdoc_options: []
|
238
264
|
require_paths:
|
239
265
|
- lib
|
@@ -249,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
275
|
version: '0'
|
250
276
|
requirements: []
|
251
277
|
rubygems_version: 3.0.6
|
252
|
-
signing_key:
|
278
|
+
signing_key:
|
253
279
|
specification_version: 4
|
254
280
|
summary: A worker service project
|
255
281
|
test_files: []
|
data/optimus-runner-0.12.0.gem
DELETED
Binary file
|
data/optimus-runner-0.13.0.gem
DELETED
Binary file
|
data/optimus-runner-0.14.0.gem
DELETED
Binary file
|