Class: Inferno::CLI::Session::SessionStatus
- Inherits:
-
Object
- Object
- Inferno::CLI::Session::SessionStatus
- Includes:
- Connection, Errors
- Defined in:
- lib/inferno/apps/cli/session/session_status.rb
Instance Attribute Summary collapse
-
#options ⇒ Object
Returns the value of attribute options.
-
#session_id ⇒ Object
Returns the value of attribute session_id.
Instance Method Summary collapse
-
#initialize(session_id, options) ⇒ SessionStatus
constructor
A new instance of SessionStatus.
-
#last_test_executed(test_results, run_status) ⇒ Object
Serialized updated_at values can collide when results are written in quick succession, so when the run is waiting, identify the waiting test by its 'wait' result rather than by timestamp order alone.
- #last_test_run ⇒ Object
-
#most_recent_result(results) ⇒ Object
updated_at ties are broken by array position (later results win) since the API returns results in insertion order.
- #run ⇒ Object
- #run_results(run_id) ⇒ Object
- #status_for_session ⇒ Object
Methods included from Errors
#handle_web_api_error, #not_found_error_message, #parse_error_response, #test_run_not_found_message, #text_error_message
Methods included from Connection
#base_url, #check_session_exists, #connection, #delete, #get, #handle_connection_error, #post
Constructor Details
#initialize(session_id, options) ⇒ SessionStatus
Returns a new instance of SessionStatus.
14 15 16 17 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 14 def initialize(session_id, ) self.session_id = session_id self. = end |
Instance Attribute Details
#options ⇒ Object
Returns the value of attribute options.
12 13 14 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 12 def @options end |
#session_id ⇒ Object
Returns the value of attribute session_id.
12 13 14 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 12 def session_id @session_id end |
Instance Method Details
#last_test_executed(test_results, run_status) ⇒ Object
Serialized updated_at values can collide when results are written in quick succession, so when the run is waiting, identify the waiting test by its 'wait' result rather than by timestamp order alone.
62 63 64 65 66 67 68 69 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 62 def last_test_executed(test_results, run_status) if run_status == 'waiting' wait_results = test_results.select { |result| result['result'] == 'wait' } test_results = wait_results if wait_results.any? end most_recent_result(test_results) end |
#last_test_run ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 46 def last_test_run response = get("api/test_sessions/#{session_id}/last_test_run", nil, content_type: 'application/json') handle_web_api_error(response, :last_session_run) if response.status != 200 return JSON.parse(response.body) if response.body.present? # no execution has started yet for this session { 'test_session_id' => session_id, 'status' => 'created' } end |
#most_recent_result(results) ⇒ Object
updated_at ties are broken by array position (later results win) since the API returns results in insertion order.
73 74 75 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 73 def most_recent_result(results) results.each_with_index.max_by { |result, index| [result['updated_at'].to_s, index] }&.first end |
#run ⇒ Object
19 20 21 22 23 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 19 def run session_status = status_for_session puts JSON.pretty_generate(session_status) exit(0) end |
#run_results(run_id) ⇒ Object
77 78 79 80 81 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 77 def run_results(run_id) response = get("api/test_runs/#{run_id}/results", nil, content_type: 'application/json') handle_web_api_error(response, :test_run_results) if response.status != 200 JSON.parse(response.body) end |
#status_for_session ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/inferno/apps/cli/session/session_status.rb', line 25 def status_for_session session_status = last_test_run if session_status['id'].present? run_id = session_status['id'] test_results = run_results(run_id).select { |result| result['test_id'].present? } session_status['completed_test_count'] = test_results.size last_test_executed = last_test_executed(test_results, session_status['status']) if last_test_executed.present? session_status['last_test_executed'] = last_test_executed['test_id'] if session_status['status'] == 'waiting' session_status['wait_outputs'] = last_test_executed['outputs'] session_status['wait_result_message'] = last_test_executed['result_message'] end end end session_status end |