def new_send_command(rd, command): debug = False response_data = None try: if debug: print '\n debug -- command: ', command b64_command = '_base64:' + base64.b64encode(command) json_data = {'command': 'EXECUTE_DIRECT', 'kwargs': {'data': b64_command}} if debug: print '\n debug -- json_data: ', json_data uframe_url, timeout, timeout_read = get_c2_uframe_info() url = "/".join([uframe_url, rd, 'execute']) if debug: print '\n debug -- url: ', url response = requests.post(url, json=json_data, timeout=(timeout, timeout_read), headers=_headers()) if response.status_code == 200: # Evaluate response content for error (review 'value' list info in response_data ) if response.content: response_data = json.loads(response.content) if response_data: status_code, status_type, status_message = _eval_POST_response_data(response_data, "") #- - - - - - - - - - - - - - - - - - - - - - - - - - if debug: print '\n execute response_data: ', json.dumps(response_data, indent=4, sort_keys=True) print '\n direct_access send_new_command - status_code: ', status_code if status_code != 200: print '\n direct_access send_new_command - status_message: ', status_message #- - - - - - - - - - - - - - - - - - - - - - - - - - if status_code != 200: raise Exception(status_message) if debug: print '\n status_code: ', response.status_code return except ConnectionError: message = 'ConnectionError for instrument/api configuration values.' current_app.logger.info(message) raise Exception(message) except Timeout: message = 'Timeout for instrument/api configuration values.' current_app.logger.info(message) raise Exception(message) except Exception as err: if debug: print '\nexception in new_send_command: ', str(err) raise
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)