Ejemplo n.º 1
0
def _stack_aggregator(handler):
    external_request_id = 'None'
    stack_aggregator_started_at = time.time()

    assert handler
    s = {'stack_aggregator': 'failure', 'external_request_id': None}
    input_json = request.get_json()
    # (fixme) Create decorator for metrics handling.
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': request.endpoint,
        'request_method': request.method,
        'status_code': 200
    }

    if input_json and 'external_request_id' in input_json \
            and input_json['external_request_id']:
        external_request_id = input_json['external_request_id']
        logger.info('%s stack_aggregator/ request with payload: %s',
                    external_request_id, input_json)

        try:
            persist = request.args.get('persist', 'true') == 'true'
            s = handler.execute(input_json, persist=persist)
            if s is not None and s.get('result') and s.get('result').get(
                    '_audit'):
                # Creating and Pushing Total Metrics Data to Accumulator
                metrics_payload['value'] = total_time_elapsed(
                    sa_audit_data=s['result']['_audit'],
                    external_request_id=input_json['external_request_id'])
                push_data(metrics_payload)

        except Exception as e:
            s = {
                'stack_aggregator': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400
            logger.error('%s failed %s', external_request_id, s)

        try:
            # Pushing Individual Metrics Data to Accumulator
            metrics_payload['value'] = get_time_delta(
                audit_data=s['result']['_audit'])
            metrics_payload['endpoint'] = request.endpoint
            push_data(metrics_payload)
        except KeyError:
            pass

    logger.info('%s took %0.2f seconds for _stack_aggregators',
                external_request_id,
                time.time() - stack_aggregator_started_at)

    return flask.jsonify(s)
Ejemplo n.º 2
0
def _recommender(handler):
    external_request_id = 'None'
    recommender_started_at = time.time()

    r = {'recommendation': 'failure', 'external_request_id': None}
    # (fixme) Create decorator for metrics handling.
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': request.endpoint,
        'request_method': request.method,
        'status_code': 200
    }

    input_json = request.get_json()
    if input_json and 'external_request_id' in input_json and input_json[
            'external_request_id']:
        external_request_id = input_json['external_request_id']
        logger.info('%s recommender/ request with payload: %s',
                    external_request_id, input_json)

        try:
            check_license = request.args.get('check_license',
                                             'false') == 'true'
            persist = request.args.get('persist', 'true') == 'true'
            r = handler.execute(input_json,
                                persist=persist,
                                check_license=check_license)
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400
            logger.error('%s failed %s', external_request_id, r)

    try:
        metrics_payload['value'] = get_time_delta(
            audit_data=r['result']['_audit'])
        push_data(metrics_payload)
    except KeyError:
        pass

    logger.info('%s took %0.2f seconds for _recommender', external_request_id,
                time.time() - recommender_started_at)

    return flask.jsonify(r), metrics_payload['status_code']
Ejemplo n.º 3
0
def stack_aggregator(payload: ServiceInput,
                     request: Request,
                     persist: bool = True):
    """Handle POST requests that are sent to /api/v1/stack_aggregator REST API endpoint."""
    s = {'stack_aggregator': 'failure', 'external_request_id': None}

    request_dict = dict(request)
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': request_dict['path'],
        'request_method': request_dict['method'],
        'status_code': 200
    }

    input_json = json.loads(payload.json())
    if input_json and 'external_request_id' in input_json \
            and input_json['external_request_id']:
        try:
            s = StackAggregator().execute(input_json, persist=persist)
            if s is not None and s.get('result') and s.get('result').get(
                    '_audit'):
                # Creating and Pushing Total Metrics Data to Accumulator
                metrics_payload['value'] = total_time_elapsed(
                    sa_audit_data=s['result']['_audit'],
                    external_request_id=input_json['external_request_id'])
                push_data(metrics_payload)

        except Exception as e:
            s = {
                'stack_aggregator': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400

        try:
            # Pushing Individual Metrics Data to Accumulator
            metrics_payload['value'] = get_time_delta(
                audit_data=s['result']['_audit'])
            metrics_payload['endpoint'] = request_dict['path']
            if os.getenv('ACCUMULATE_MATRICS', False):
                push_data(metrics_payload)
        except KeyError:
            pass

    return s
Ejemplo n.º 4
0
def stack_aggregator():
    """Handle POST requests that are sent to /api/v1/stack_aggregator REST API endpoint."""
    s = {'stack_aggregator': 'failure', 'external_request_id': None}
    input_json = request.get_json()
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': 'api_v1.get_stack_analyses',
        'request_method': request.method,
        'status_code': 200
    }

    if input_json and 'external_request_id' in input_json \
            and input_json['external_request_id']:

        try:
            persist = request.args.get('persist', 'true') == 'true'
            s = StackAggregator().execute(input_json, persist=persist)
            if s is not None and s.get('result') and s.get('result').get(
                    '_audit'):
                # Creating and Pushing Total Metrics Data to Accumulator
                metrics_payload['value'] = total_time_elapsed(
                    sa_audit_data=s['result']['_audit'],
                    external_request_id=input_json['external_request_id'])
                push_data(metrics_payload)

        except Exception as e:
            s = {
                'stack_aggregator': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400

        try:
            # Pushing Individual Metrics Data to Accumulator
            metrics_payload['value'] = get_time_delta(
                audit_data=s['result']['_audit'])
            metrics_payload['endpoint'] = request.endpoint
            push_data(metrics_payload)
        except KeyError:
            pass

    return flask.jsonify(s)
Ejemplo n.º 5
0
def recommender(payload: ServiceInput,
                request: Request,
                check_license: bool = True,
                persist: bool = True):
    """Handle POST requests that are sent to /api/v1/recommender REST API endpoint."""
    r = {'recommendation': 'failure', 'external_request_id': None}

    request_dict = dict(request)
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': request_dict['path'],
        'request_method': request_dict['method'],
        'status_code': 200
    }

    input_json = json.loads(payload.json())
    logger.info('recommender/ request with payload: {p}'.format(p=input_json))

    if input_json and 'external_request_id' in input_json and input_json[
            'external_request_id']:
        try:
            logger.info('### {} - {}'.format(check_license, persist))
            r = RecommendationTask().execute(input_json,
                                             persist=persist,
                                             check_license=check_license)
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400

    try:
        metrics_payload['value'] = get_time_delta(
            audit_data=r['result']['_audit'])
        push_data(metrics_payload)
    except KeyError:
        pass

    return r, metrics_payload['status_code']
Ejemplo n.º 6
0
def recommender():
    """Handle POST requests that are sent to /api/v1/recommender REST API endpoint."""
    r = {'recommendation': 'failure', 'external_request_id': None}
    metrics_payload = {
        'pid': os.getpid(),
        'hostname': os.environ.get("HOSTNAME"),
        'endpoint': request.endpoint,
        'request_method': request.method,
        'status_code': 200
    }

    input_json = request.get_json()
    current_app.logger.debug(
        'recommender/ request with payload: {p}'.format(p=input_json))

    if input_json and 'external_request_id' in input_json and input_json[
            'external_request_id']:
        try:
            check_license = request.args.get('check_license',
                                             'false') == 'true'
            persist = request.args.get('persist', 'true') == 'true'
            r = RecommendationTask().execute(input_json,
                                             persist=persist,
                                             check_license=check_license)
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            metrics_payload['status_code'] = 400

    try:
        metrics_payload['value'] = get_time_delta(
            audit_data=r['result']['_audit'])
        push_data(metrics_payload)
    except KeyError:
        pass

    return flask.jsonify(r), metrics_payload['status_code']
Ejemplo n.º 7
0
def test_get_time_delta_with_no_param():
    """Check the Push Data Method."""
    assert get_time_delta({}) is None
Ejemplo n.º 8
0
def test_get_time_delta():
    """Check the Push Data Method."""
    timedelta = get_time_delta(audit_data=response['result']['_audit'])
    assert timedelta == 0.001102