예제 #1
0
def requests_get(service_conf, service_name, api_path, timeout=5, retry_times=3):
    """
    service_conf: 服务配置
    :param service_conf:
    :param api_path:
    :param args:
    :param kwargs:
    :return:
    """
    error_message = None
    address_list = consul_address(service_conf)
    exclude_addr = []
    _address = None
    for _ in range(int(retry_times)):
        if len(address_list) > 1 and isinstance(address_list, list):
            [address_list.remove(_) for _ in exclude_addr if _ in address_list]
        try:
            url, address = build_url(address_list, api_path)
            _address = address
            res = requests.get(url, params={'service_name': service_name}, timeout=timeout)
            return res
        except (ConnectionError, ConnectTimeout)as ex:
            exclude_addr.append(_address)
            error_message = ex.__str__()
            logger.error('ACL_SERVICE error, api_path:{}, message: {}, retry:{}'
                         .format(api_path, error_message, int(_)+1))
    raise Exception('ACL_SERVICE error, api_path:{}, message: {}'.format(api_path, error_message))
예제 #2
0
def request(method, service_conf, api_path, timeout, retry_times, *args, **kwargs):
    error_message = None
    service_name = get_settings_service_name()
    request_service = service_conf['VALUE']
    acl_token = get_acl_token(service_name)
    if acl_token is not None:
        params = kwargs.get('params', {})
        params['acl_token'] = acl_token
        kwargs['params'] = params
    address_list = consul_address(service_conf)
    exclude_addr = []
    _address = None
    for _ in range(int(retry_times)):
        if len(address_list) > 1 and isinstance(address_list, list):
            [address_list.remove(_) for _ in exclude_addr if _ in address_list]
        try:
            url, address = build_url(address_list, api_path)
            _address = address
            res = requests.request(method=method, url=url, timeout=timeout, *args, **kwargs)
            return res
        except (ConnectionError, ConnectTimeout, ReadTimeout)as ex:
            exclude_addr.append(_address)
            error_message = ex.__str__()
            logger.error("requests_client error,service_name:{}, request_service:{}, api_path:{}, message:{}, retry:{}"
                         .format(service_name, request_service, api_path, error_message, int(_) + 1))
    raise Exception("requests_client error, service_name: {}, request_service:{}, api_path:{}, message: {}"
                    .format(service_name, request_service, api_path, error_message))
예제 #3
0
def request(method, service_address, api_path, protocol="http", token=None, *args, **kwargs):
    '''
    :param token: should be a json format dict or json string, it should be
        {'uid': '1234abc', 'exp': 1722200316, 'iat': 1622193116, 'app_id': 'core'} type
        encode token by `json.dumps` to request header X-Jwt-Payload
    '''
    service_name = get_service_name()
    request_url = build_url(protocol=protocol, address=service_address, api_path=api_path)
    headers = kwargs.pop('headers', {})
    if token:
        if isinstance(token, dict): #token also should contain "uid" key
            headers.update({'X-Jwt-Payload': json.dumps(token)})
        elif isinstance(token, str):
            headers.update({'X-Jwt-Payload': token})
        else:
            logger.error(f"requests_client token parameter is not suitable type: {token}")
    tracer = opentracing.global_tracer()
    if tracer:
        span = tracer.active_span
        if span:
            carrier = {}
            tracer.inject(span, opentracing.Format.HTTP_HEADERS, carrier)
            headers.update(carrier)
            # logger.debug('=================== carrier: {}'.format(carrier))
    try:
        res = requests.request(method=method, url=request_url, headers=headers, *args, **kwargs)
        return res
    except Exception as ex:
        error_message = "requests_client error, service_name:{}, protocol:{}, method:{}, " \
                        "request_service_address:{}, api_path:{}, message:{}" \
            .format(service_name, protocol, method, service_address, api_path, ex.__str__())
        logger.error(error_message)
        raise ex
예제 #4
0
def request(method,
            service_address,
            api_path,
            timeout,
            protocol="http",
            token=None,
            *args,
            **kwargs):
    service_name = get_settings_service_name()
    request_url = build_url(protocol=protocol,
                            address=service_address,
                            api_path=api_path)
    headers = kwargs.pop('headers', {})
    if token:
        headers.update({'Authorization': "token " + token})
    tracer = opentracing.global_tracer()
    if tracer:
        span = tracer.active_span
        if span:
            carrier = {}
            tracer.inject(span, opentracing.Format.HTTP_HEADERS, carrier)
            headers.update(carrier)
            logger.debug('=================== carrier: {}'.format(carrier))
    try:
        res = requests.request(method=method,
                               url=request_url,
                               timeout=timeout,
                               headers=headers,
                               *args,
                               **kwargs)
        return _handle_response(res)
    except Exception as ex:
        error_message = "rest_client error, service_name:{}, protocol:{}, method:{}, " \
                        "request_service_address:{}, api_path:{}, message:{}"\
            .format(service_name, protocol, method, service_address, api_path, ex.__str__())
        logger.error(error_message)
        raise HTTPException(error_message)