def c2_direct_access_start(reference_designator): """ Start direct access. (when button 'Start Direct' is selected.) (Transition from 'DRIVER_STATE_COMMAND' to 'DRIVER_STATE_DIRECT_ACCESS'.) POST Sample: http://uft21.ooi.rutgers.edu:12572/instrument/api/RS10ENGC-XX00X-00-FLORDD001/start Command: "DRIVER_EVENT_START_DIRECT" """ rd = reference_designator NOT_NONE = 'NOT_NONE' state_DRIVER_STATE_COMMAND = 'DRIVER_STATE_COMMAND' capability_DRIVER_EVENT_START_DIRECT = 'DRIVER_EVENT_START_DIRECT' target_state = 'DRIVER_STATE_DIRECT_ACCESS' try: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Prepare to execute - direct access start command # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) if _state == target_state: return jsonify(result) # Verify _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=state_DRIVER_STATE_COMMAND, expected_capability=capability_DRIVER_EVENT_START_DIRECT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command 'DRIVER_EVENT_START_DIRECT' on upstream server # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command suffix = 'command=%22DRIVER_EVENT_START_DIRECT%22&timeout=60000' response = uframe_post_instrument_driver_command(reference_designator, 'execute', suffix) if response.status_code != 200: message = '(%s) execute %s failed.' % (str(response.status_code), capability_DRIVER_EVENT_START_DIRECT) if response.content: message = '(%s) %s' % (str(response.status_code), str(response.content)) raise Exception(message) # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Final - direct access response final checks for success or failure # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Verify _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=target_state, expected_capability=NOT_NONE) return jsonify(result) except Exception as err: message = '(%s) exception: %s' % (rd, err.message) current_app.logger.info(message) return bad_request(err.message)
def c2_direct_access_exit(reference_designator): """ Exit direct access. (when button 'Exit Direct' is selected.) Transition from 'DRIVER_STATE_DIRECT_ACCESS' to 'DRIVER_STATE_COMMAND' (execute 'DRIVER_EVENT_STOP_DIRECT') """ rd = reference_designator NOT_NONE = 'NOT_NONE' state_DRIVER_STATE_DIRECT_ACCESS = 'DRIVER_STATE_DIRECT_ACCESS' capability_DRIVER_EVENT_STOP_DIRECT = 'DRIVER_EVENT_STOP_DIRECT' target_state = 'DRIVER_STATE_COMMAND' try: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Prepare to execute - direct access start command # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) # If current state is the same as target state, return status result if _state == target_state: return jsonify(result) # Verify current _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=state_DRIVER_STATE_DIRECT_ACCESS, expected_capability=capability_DRIVER_EVENT_STOP_DIRECT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command 'DRIVER_EVENT_STOP_DIRECT' on upstream server # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - suffix = 'command=%22DRIVER_EVENT_STOP_DIRECT%22&timeout=60000' # Execute driver command response = uframe_post_instrument_driver_command(reference_designator, 'execute', suffix) if response.status_code != 200: message = '(%s) execute %s failed.' % (str(response.status_code), capability_DRIVER_EVENT_STOP_DIRECT) if response.content: message = '(%s) %s' % (str(response.status_code), str(response.content)) raise Exception(message) # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Final - direct access response final checks for success or failure # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Verify _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=target_state, expected_capability=NOT_NONE) return jsonify(result) except Exception as err: message = '(%s) exception: %s' % (rd, err.message) current_app.logger.info(message) return bad_request(err.message)
def c2_direct_access_exit(reference_designator): """ Exit direct access, transition to instrument driver state. If error, raise exception. Exit 'DRIVER_STATE_DIRECT_ACCESS', execute command 'DRIVER_EVENT_STOP_DIRECT'. """ debug = False rd = reference_designator state_DRIVER_STATE_DIRECT_ACCESS = 'DRIVER_STATE_DIRECT_ACCESS' capability_DRIVER_EVENT_STOP_DIRECT = 'DRIVER_EVENT_STOP_DIRECT' try: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Prepare to execute - direct access start command # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate reference_designator, get status and capabilities _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) # If current state is not in the state_DRIVER_STATE_DIRECT_ACCESS, then return status result # Log request to exit direct access state when not in direct access. if _state != state_DRIVER_STATE_DIRECT_ACCESS: message = 'Request to exit direct access for instrument %s, when in driver state %s' % (rd, _state) current_app.logger.info(message) return jsonify(result) # Verify current _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=state_DRIVER_STATE_DIRECT_ACCESS, expected_capability=capability_DRIVER_EVENT_STOP_DIRECT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command 'DRIVER_EVENT_STOP_DIRECT' on upstream server # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - suffix = 'command=%22DRIVER_EVENT_STOP_DIRECT%22&timeout=60000' response = uframe_post_instrument_driver_command(reference_designator, 'execute', suffix) if response.status_code != 200: message = '(%s) execute %s failed.' % (str(response.status_code), capability_DRIVER_EVENT_STOP_DIRECT) raise Exception(message) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Verify command execution status by reviewing error information returned from instrument driver # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if response.content: try: response_data = json.loads(response.content) except Exception: raise Exception('Direct access exit command - malformed response data; invalid json format.') # Evaluate response content for error (review 'value' list info in response_data ) if response_data: status_code, status_type, status_message = _eval_POST_response_data(response_data, "") #- - - - - - - - - - - - - - - - - - - - - - - - - - if debug: print '\n direct_access EXIT - response_data: ', json.dumps(response_data, indent=4, sort_keys=True) print '\n direct_access EXIT - status_code: ', status_code if status_code != 200: print '\n direct_access EXIT - status_message: ', status_message #- - - - - - - - - - - - - - - - - - - - - - - - - - if status_code != 200: raise Exception(status_message) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Final - Verify _state has changed from state_DRIVER_STATE_DIRECT_ACCESS, if not error # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Get state, capabilities and response result for reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) if _state == state_DRIVER_STATE_DIRECT_ACCESS: message = 'The current state is \'DRIVER_STATE_DIRECT_ACCESS\'; failed to exit direct access.' raise Exception(message) return jsonify(result) except Exception as err: message = '(%s) direct access exit exception: %s' % (rd, err.message) current_app.logger.info(message) return bad_request(err.message)
def c2_direct_access_start(reference_designator): """ Start direct access. (when button 'Start Direct' is selected.) (Transition from 'DRIVER_STATE_COMMAND' to 'DRIVER_STATE_DIRECT_ACCESS'.) POST Sample: http://uft21.ooi.rutgers.edu:12572/instrument/api/RS10ENGC-XX00X-00-FLORDD001/start Command: "DRIVER_EVENT_START_DIRECT" """ debug = False rd = reference_designator NOT_NONE = 'NOT_NONE' state_DRIVER_STATE_COMMAND = 'DRIVER_STATE_COMMAND' capability_DRIVER_EVENT_START_DIRECT = 'DRIVER_EVENT_START_DIRECT' target_state = 'DRIVER_STATE_DIRECT_ACCESS' try: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Prepare to execute - direct access start command # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) if _state == target_state: return jsonify(result) # Verify _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=NOT_NONE, expected_capability=capability_DRIVER_EVENT_START_DIRECT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command 'DRIVER_EVENT_START_DIRECT' on upstream server # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Execute driver command suffix = 'command=%22DRIVER_EVENT_START_DIRECT%22&timeout=60000' response = uframe_post_instrument_driver_command(reference_designator, 'execute', suffix) if response.status_code != 200: message = '(%s) execute %s failed.' % (str(response.status_code), capability_DRIVER_EVENT_START_DIRECT) raise Exception(message) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Verify command execution status by reviewing error information returned from instrument driver # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if response.content: try: response_data = json.loads(response.content) except Exception: raise Exception('Direct access start command - malformed response data; invalid json format.') # Evaluate response content for error (review 'value' list info in response_data ) if response_data: status_code, status_type, status_message = _eval_POST_response_data(response_data, "") #- - - - - - - - - - - - - - - - - - - - - - - - - - if debug: print '\n START response_data: ', json.dumps(response_data, indent=4, sort_keys=True) print '\n direct_access START - status_code: ', status_code if status_code != 200: print '\n direct_access START - status_message: ', status_message #- - - - - - - - - - - - - - - - - - - - - - - - - - if status_code != 200: raise Exception(status_message) # Validate reference_designator _state, _capabilities, result = direct_access_get_state_and_capabilities(rd) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Final - direct access response final checks for success or failure # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Verify _state and _capabilities match expected state and capabilities verify_state_and_capabilities(rd, _state, _capabilities, expected_state=target_state, expected_capability=NOT_NONE) return jsonify(result) except Exception as err: message = '(%s) direct access start exception: %s' % (rd, err.message) current_app.logger.info(message) return bad_request(err.message)