async def fimex_transfer(*, user_id: str, email: EmailStr, uri: str, wps_url: str, reducetime_start: str = None, reducetime_end: str = None, interpolate_proj_string: str = None, interpolate_method: str = None, select_variables: str, interpolate_xaxis_min: str = None, interpolate_xaxis_max: str = None, interpolate_yaxis_min: str = None, interpolate_yaxis_max: str = None, interpolate_xaxis_units: str = None, interpolate_yaxis_units: str = None, reducebox_east: str, reducebox_south: str, reducebox_west: str, reducebox_north: str, interpolate_hor_steps: str = None, inputtype: str, outputtype: str, background_tasks: BackgroundTasks): input_files = uri.split(",") fimex_list = [] for input_file in input_files: print(input_file) fimex_list.append( Fimex(wps_url, input_file, reducetime_start, reducetime_end, interpolate_proj_string, interpolate_method, select_variables, interpolate_xaxis_min, interpolate_xaxis_max, interpolate_yaxis_min, interpolate_yaxis_max, interpolate_xaxis_units, interpolate_yaxis_units, reducebox_east, reducebox_south, reducebox_west, reducebox_north, interpolate_hor_steps, inputtype, outputtype)) # wps=http://localhost:5000/wps?request=GetCapabilities&service=WPS # input_file = 'http://OpeDAP-server/thredds/dodsC/NBS/S2B/2018/02/18/S2B_MSIL1C_20180218T110109_N0206_R094_T33WWS_20180218T144023.nc' # wps=http://localhost:5000/cgi-bin/pywps.cgi?service=wps&version=1.0.0&request=getcapabilities wps = WebProcessingService(wps_url, verbose=False, skip_caps=True) config = confuse.Configuration('Basket', __name__) transaction = Transaction(str(uuid.uuid4()), user_id, email, status.Status.ORDERED, "nordatanet", fimex_list) solr_client = SolrClient(config['solr']['endpoint'].get(), "basket") solr_client.update(transaction.toSolrDocument()) try: for fimex in fimex_list: execution = wps.execute('transformation', fimex.input_map(), output=fimex.output_map()) background_tasks.add_task(doFinal, execution, email, transaction) print(execution.statusLocation) except requests.exceptions.ConnectionError as ce: raise HTTPException(status_code=502, detail="Failed to establish a connection") return transaction.toJson()
def doFinal(execution: WPSExecution, to, transaction: Transaction): log.info('Fimex Transfermation ordered ' + execution.statusLocation) status = check_process_status(execution) transaction.set_status(status) # TODO: React based on status config = confuse.Configuration('Basket', __name__) solr_client = SolrClient(config['solr']['endpoint'].get(), "basket") solr_client.update(transaction.toSolrDocument()) # send email to user send_email(to)
def start(thread_name, ip_address, port): import json addr = (ip_address, port) buf_size = 10240 # 소켓 생성 및 바인딩 tcp_socket = socket(AF_INET, SOCK_STREAM) tcp_socket.bind(addr) tcp_socket.listen(5) while is_running: # 요청이 있을경우 소켓과 송신자의 ip 주소 저장 receive_socket, sender_ip = tcp_socket.accept() while is_running: print("Receiving") # 소켓으로부터 버퍼 사이즈씩 데이터 수신 data = receive_socket.recv(buf_size) try: # 수신된 데이터가 없는 경우 if (len(data) == 0): break print("data received...") # json 형태의 데이터를 dict 타입으로 변경 data_json_obj = json.loads(data) # Transaction을 받은 경우 if data_json_obj['type'] == 'T': print("Received transaction") print(data_json_obj) # dict 데이터로부터 transaction 객체 생성 tx = Transaction().from_json(data_json_obj) # transaction 추가 transaction.add_transaction(tx) elif data_json_obj['type'] == 'B': print("block received...") # 기존 transacion 삭제 transaction.remove_all() #블록 추가 received_block = Block().from_json(data_json_obj) append_block(received_block) except: print("recv error...") traceback.print_exc() break tcp_socket.close() receive_socket.close()
def start(thread_name, ip_address, port): import json addr = (ip_address, port) buf_size = 1024 # 소켓 생성 및 바인딩 tcp_socket = socket(AF_INET, SOCK_STREAM) tcp_socket.bind(addr) tcp_socket.listen(5) while is_running: # 요청이 있을 경우 소켓과 송신자의 ip 주소 저장 receive_socket, sender_ip = tcp_socket.accept() while is_running: log.write("Receiving") # 소켓으로부터 버퍼 사이즈씩 데이터 수신 data = receive_socket.recv(buf_size) try: # 수신된 데이터가 없는 경우 if len(data) == 0: break # json 형태의 데이터를 dict 타입으로 변경 data_json_obj = json.loads(data) # Transaction을 받은 경우 if data_json_obj['type'] == 'T': log.write("Receiving a transaction") verify_msg = data_json_obj['time_stamp'] + data_json_obj[ 'message'] if key.verify_signature(data_json_obj['pub_key'], data_json_obj['signature'], verify_msg) is True: log.write("Transaction is valid") tx = Transaction().from_json(data_json_obj) transaction.add_transaction(tx) else: log.write("Transaction is invalid") # 블록을 수신한 경우 elif data_json_obj['type'] == 'B': # 기존의 트랜잭션 삭제 transaction.remove_all() # 블록 생성 received_block = Block().from_json(data_json_obj) # 블록 저장 create_block(received_block) except: traceback.print_exc() break tcp_socket.close() receive_socket.close()
def start(thread_name, ip_address, port): import json addr = (ip_address, port) buf_size = 1024 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # tcp_socket.bind(addr) tcp_socket.listen(5) while True: receive_socket, sender_ip = tcp_socket.accept() while True: log.write("Receiving") data = receive_socket.recv(buf_size) try: if len(data) == 0: break data_json_obj = json.loads(data) if data_json_obj['type'] == 'T': log.write("Receiving a transaction") verify_msg = data_json_obj['time_stamp'] + data_json_obj[ 'message'] verification = key.verify_signature( data_json_obj['pub_key'], data_json_obj['signature'], verify_msg) if verification is True: log.write("Transaction is valid") tx = Transaction().from_json(data_json_obj) transaction.add_transaction(tx) elif data_json_obj['type'] == 'N': from node import node_controller log.write("Receiving Node") node_list = node.get_all() received_ip = data_json_obj['ip_address'] sync_flag = False for outer_list in node_list: outer_list = str(outer_list) if outer_list == received_ip: sync_flag = True if sync_flag is False: node_controller.add_new_node(data_json_obj) # # When received block, add to file database # elif data_json_obj['type'] == 'B': # transaction.remove_all() # create_block(data_json_obj['block_id'], data) except: traceback.print_exc() break tcp_socket.close() receive_socket.close()