Class: OptimusRunnerSM

Inherits:
Object
  • Object
show all
Includes:
AASM
Defined in:
lib/optimus-runner/server/optimus_runner_sm.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOptimusRunnerSM

Returns a new instance of OptimusRunnerSM.



18
19
20
21
22
23
24
25
26
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 18

def initialize
  @logger = Logger.new(STDOUT)
  @initial_device_set = []
  @device_details = []
  set_restart_session
  set_is_session_added
  set_is_session_removed
  set_is_session_restarted
end

Instance Attribute Details

#session_infoObject

Returns the value of attribute session_info.



16
17
18
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 16

def session_info
  @session_info
end

Instance Method Details

#add_sessionsObject



112
113
114
115
116
117
118
119
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 112

def add_sessions
  return unless devices_available?
  if new_device_added?
    create_new_session get_added_devices
    @initial_device_set = @device_details
    @session_added = true
  end
end

#cloud_session_empty?Boolean

Returns:

  • (Boolean)


179
180
181
182
183
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 179

def cloud_session_empty?
  sessions = AkriaClient.new.get_all_sessions
  return false if sessions.instance_of? Array
  return true if sessions.key?("errorCode")
end

#create_new_session(device_details) ⇒ Object



103
104
105
106
107
108
109
110
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 103

def create_new_session(device_details)
  @logger.info "Found new device added #{device_details}"
  session_info = AppiumLocalService.new.launch_appium_sessions(device_details)
  # puts session
  # session_info = SessionInfo.new(session,device_details).create_session_info
  AkriaClient.new.save_sessions(session_info)
  @session_info.push session_info[0]
end

#create_sessionsObject



95
96
97
98
99
100
101
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 95

def create_sessions
  return unless devices_available?
  @logger.info "Device details found are #{@device_details}"
  sessions = AppiumLocalService.new.launch_appium_sessions(@device_details)
  @session_info = sessions
  AkriaClient.new.save_sessions(@session_info)
end

#device_removed?Boolean

Returns:

  • (Boolean)


193
194
195
196
197
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 193

def device_removed?
  removed_device = get_removed_devices
  @logger.info "Device #{removed_device} is removed"
  return removed_device.length>0
end

#devices_available?Boolean

Returns:

  • (Boolean)


62
63
64
65
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 62

def devices_available?
  gather_devices
  @device_details.length > 0
end

#empty_sessionsObject



171
172
173
174
175
176
177
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 171

def empty_sessions
  return unless devices_available?
  if cloud_session_empty?
    p "Session Info #{@session_info}"
    AkriaClient.new.save_sessions(@session_info)
  end
end

#gather_devicesObject



89
90
91
92
93
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 89

def gather_devices
  details = DeviceDetails.new
  @device_details = details.get_device_details
  @logger.info "Current devices connected are #{@device_details}"
end

#gather_initial_device_setObject



67
68
69
70
71
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 67

def gather_initial_device_set
  details = DeviceDetails.new
  @initial_device_set = details.get_device_details
  @logger.info "Initial Device Set #{@initial_device_set}"
end

#new_device_added?Boolean

Returns:

  • (Boolean)


185
186
187
188
189
190
191
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 185

def new_device_added?
  added_device = get_added_devices
  p "Is new devices added #{added_device.length>0}"
  p "Added devices length #{added_device.length}"
  p "Added devices #{added_device}"
  return added_device.length>0
end

#remove_sessionsObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 121

def remove_sessions
  return unless devices_available?
  if device_removed?
    get_removed_devices.each do |removed_device|
      p removed_device
      session_info = @session_info.detect {|info| info["sessionCapabilities"]==removed_device}
      p session_info
      AkriaClient.new.remove_session session_info["sessionUrl"]
      session_details = AppiumLocalService.new.get_session_details
      session_detail = session_details.detect {|session_detail| session_detail["session_id"]==session_info["sessionUrl"]}
      puts "Removed session details #{session_details}"
      ShellCommands.new.kill_process session_detail["session_pid"]
      @session_info.delete_if{ |session_inf| session_inf["sessionUrl"] == session_info["sessionUrl"]}
      @session_removed= true
      @initial_device_set = @device_details
    end
  end
end

#restart_sessionsObject



157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 157

def restart_sessions
  session = AppiumLocalService.new.launch_appium_session @restart_session["sessionCapabilities"]
  @logger.info "Restarting session #{@restart_session}"
  @logger.info "Session details are #{@session_info}"
  @session_info.delete_if{ |session_inf| session_inf["sessionUrl"] == @restart_session["sessionUrl"]}
  @logger.info "Session details are #{@session_info}"
  @restart_session["sessionUrl"] = session
  @session_info.push(@restart_session)
  @logger.info "Session details are #{@session_info}"
  AkriaClient.new.save_session @restart_session
  set_restart_session
  @session_restarted = true
end

#session_added?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 73

def session_added?
  @session_added
end

#session_empty?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 85

def session_empty?
  @sessions_empty
end

#session_removed?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 77

def session_removed?
  @session_removed
end

#session_restarted?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 81

def session_restarted?
  @session_restarted
end

#session_terminated?Boolean

Returns:

  • (Boolean)


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 140

def session_terminated?
  return false unless devices_available?
  akira = AkriaClient.new
  @session_info.each do |session|
    p "Session #{session}"
    @logger.info "Checking if the session #{session["sessionUrl"]} is terminated"
    session_info =  akira.get_session_info session["sessionUrl"]
    session_state = session_info["sessionState"]
    @is_session_terminated = session_state.eql? "TERMINATED"
    @logger.info "Is session #{session["sessionUrl"]} terminated? #{@is_session_terminated}"
    @restart_session = session_info if @is_session_terminated
    @logger.info "Session Details to restart #{@restart_session}"
    break unless @restart_session.empty?
  end
  return @is_session_terminated
end

#set_is_session_addedObject



207
208
209
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 207

def set_is_session_added
  @session_added = false
end

#set_is_session_removedObject



203
204
205
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 203

def set_is_session_removed
  @session_removed = false
end

#set_is_session_restartedObject



199
200
201
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 199

def set_is_session_restarted
  @session_restarted = false
end

#set_restart_sessionObject



211
212
213
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 211

def set_restart_session
  @restart_session = {}
end