예제 #1
0
 def test_call_insights_recommender_npm(self, mock_get, mock_post):
     """Test if the correct service is called for the correct ecosystem."""
     with app.app_context():
         # Test whether the correct service is called for NPM.
         called_url_json = RecommendationTask.call_insights_recommender([{
             "ecosystem": "npm"
         }])
         self.assertTrue('npm-insights' in called_url_json['url'])
         # Now test whether the correct service is called for maven.
         called_url_json = RecommendationTask.call_insights_recommender([{
             "ecosystem": "maven"
         }])
         self.assertTrue('pgm' in called_url_json['url'])
예제 #2
0
def recommender():
    """Handle POST requests that are sent to /api/v1/recommender REST API endpoint."""
    r = {'recommendation': 'failure', 'external_request_id': None}
    status = 400
    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)
            status = 200
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            status = 500

    return flask.jsonify(r), status
def recommender():
    r = {'recommendation': 'failure', 'external_request_id': None}
    input_json = request.get_json()
    if input_json:
        try:
            r = RecommendationTask().execute(input_json)
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }

    return flask.jsonify(r)
예제 #4
0
def recommender():
    r = {'recommendation': 'failure', 'external_request_id': None}
    status = 400
    input_json = request.get_json()
    if input_json and 'external_request_id' in input_json and input_json['external_request_id']:
        try:
            r = RecommendationTask().execute(input_json)
            status = 200
        except Exception as e:
            r = {
                'recommendation': 'unexpected error',
                'external_request_id': input_json.get('external_request_id'),
                'message': '%s' % e
            }
            status = 500

    return flask.jsonify(r), status
예제 #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']
예제 #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']
 def recommender_result(self, input_json, persist):
     self.recommender_task = RecommendationTask().execute(arguments=input_json,
                                                          persist=persist)
예제 #8
0
 def recommender_result(self, input_json, persist):
     """Start the recommendation task asynchronously."""
     self.recommender_task = yield from self.loop.run_in_executor(
         self.executor, RecommendationTask().execute, input_json, persist)