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.



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

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.



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

def session_info
  @session_info
end

Instance Method Details

#add_sessionsObject



117
118
119
120
121
122
123
124
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 117

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)


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

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



108
109
110
111
112
113
114
115
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 108

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



100
101
102
103
104
105
106
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 100

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)


213
214
215
216
217
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 213

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)


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

def devices_available?
  gather_devices
  @device_details.length > 0
end

#empty_sessionsObject



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

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



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

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



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

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

#is_session_engaged?(session_url) ⇒ Boolean

Returns:

  • (Boolean)


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

def is_session_engaged?(session_url) 
  session_state = AkriaClient.new.get_session_state session_url
  p "Session state is #{session_state}"
  return session_state.casecmp?("ENGAGED")
end

#new_device_added?Boolean

Returns:

  • (Boolean)


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

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



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 126

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



162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 162

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)


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

def session_added?
  @session_added
end

#session_empty?Boolean

Returns:

  • (Boolean)


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

def session_empty?
  @sessions_empty
end

#session_removed?Boolean

Returns:

  • (Boolean)


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

def session_removed?
  @session_removed
end

#session_restarted?Boolean

Returns:

  • (Boolean)


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

def session_restarted?
  @session_restarted
end

#session_stateObject



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

def session_state
  return unless devices_available?
    @session_info.each do |session|
      if(is_session_engaged?(session["sessionUrl"]))
        AkriaClient.new.release_session session["sessionUrl"] unless AppiumServerClient.new.isSessionAlive? session["sessionUrl"]
      end
    end
end

#session_terminated?Boolean

Returns:

  • (Boolean)


145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 145

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



227
228
229
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 227

def set_is_session_added
  @session_added = false
end

#set_is_session_removedObject



223
224
225
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 223

def set_is_session_removed
  @session_removed = false
end

#set_is_session_restartedObject



219
220
221
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 219

def set_is_session_restarted
  @session_restarted = false
end

#set_restart_sessionObject



231
232
233
# File 'lib/optimus-runner/server/optimus_runner_sm.rb', line 231

def set_restart_session
  @restart_session = {}
end