Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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()