Example #1
0
    def call_insights_recommender(payload):
        """Call the PGM model.

        Calls the PGM model with the normalized manifest information to get
        the relevant packages.
        """
        try:
            # TODO remove hardcodedness for payloads with multiple ecosystems

            insights_url = RecommendationTask.get_insights_url(payload)
            response = get_session_retry().post(insights_url, json=payload)

            if response.status_code != 200:
                logger.error(
                    "HTTP error {}. Error retrieving insights data.".format(
                        response.status_code))
                return None
            else:
                json_response = response.json()
                return json_response

        except Exception as e:
            logger.error("Failed retrieving insights data.")
            logger.error("%s" % e)
            return None
Example #2
0
    def invoke_license_analysis_service(user_stack_packages, alt_packages,
                                        comp_packages):
        """Pass given args to stack_license analysis."""
        license_url = LICENSE_SCORING_URL_REST + "/api/v1/stack_license"

        payload = {
            "packages": user_stack_packages,
            "alternate_packages": alt_packages,
            "companion_packages": comp_packages
        }

        json_response = {}
        try:
            # Call License service to get license data
            lic_response = get_session_retry().post(license_url,
                                                    data=json.dumps(payload))
            if lic_response.status_code != 200:
                lic_response.raise_for_status(
                )  # raise exception for bad http-status codes
            json_response = lic_response.json()
        except requests.exceptions.RequestException:
            logger.exception(
                "Unexpected error happened while invoking license analysis!")
            pass

        return json_response
def get_dependency_data(resolved, ecosystem):
    result = []
    for elem in resolved:
        if elem["package"] is None or elem["version"] is None:
            _logger.warning(
                "Either component name or component version is missing")
            continue

        qstring = \
            "g.V().has('pecosystem', '{}').has('pname', '{}').has('version', '{}')" \
            .format(ecosystem, elem["package"], elem["version"]) + \
            ".as('version').in('has_version').as('package')" + \
            ".select('version','package').by(valueMap());"
        payload = {'gremlin': qstring}

        try:
            graph_req = get_session_retry().post(GREMLIN_SERVER_URL_REST,
                                                 data=json.dumps(payload))

            if graph_req.status_code == 200:
                graph_resp = graph_req.json()
                if 'result' not in graph_resp:
                    continue
                if len(graph_resp['result']['data']) == 0:
                    continue

                result.append(graph_resp["result"])
            else:
                _logger.error("Failed retrieving dependency data.")
                continue
        except Exception:
            _logger.exception("Error retrieving dependency data!")
            continue

    return {"result": result}
Example #4
0
    def call_pgm(payload):
        """Calls the PGM model with the normalized manifest information to get
        the relevant packages"""
        try:
            # TODO remove hardcodedness for payloads with multiple ecosystems
            if payload and 'ecosystem' in payload[0]:

                PGM_SERVICE_HOST = os.getenv(
                    "PGM_SERVICE_HOST") + "-" + payload[0]['ecosystem']
                PGM_URL_REST = "http://{host}:{port}".format(
                    host=PGM_SERVICE_HOST, port=os.getenv("PGM_SERVICE_PORT"))

                PGM_URL_REST = "http://bayesian-kronos-maven-miteshpatel-greenfield-test.dev.rdu2c.fabric8.io"

                pgm_url = PGM_URL_REST + "/api/v1/schemas/kronos_scoring"
                response = get_session_retry().post(pgm_url, json=payload)
                if response.status_code != 200:
                    _logger.error(
                        "HTTP error {}. Error retrieving PGM data.".format(
                            response.status_code))
                    return None
                else:
                    json_response = response.json()
                    return json_response
            else:
                _logger.error(
                    'Payload information not passed in the call, Quitting! PGM\'s call'
                )
        except Exception as e:
            _logger.error("Failed retrieving PGM data.")
            _logger.error("%s" % e)
            return None
    def call_insights_recommender(payload):
        """Call the PGM model.

        Calls the PGM model with the normalized manifest information to get
        the relevant packages.
        """
        try:
            # TODO remove hardcodedness for payloads with multiple ecosystems
            if payload and 'ecosystem' in payload[0]:
                quickstarts = False
                if payload[0][
                        'ecosystem'] in RecommendationTask.chester_ecosystems:
                    INSIGHTS_SERVICE_HOST = os.getenv("CHESTER_SERVICE_HOST")
                else:
                    INSIGHTS_SERVICE_HOST = os.getenv("HPF_SERVICE_HOST") + "-" + \
                        payload[0]['ecosystem']
                    if payload[0]['ecosystem'] == 'maven':
                        quickstarts = is_quickstart_majority(
                            payload[0]['package_list'])
                    if quickstarts:
                        INSIGHTS_SERVICE_HOST = os.getenv("PGM_SERVICE_HOST") + "-" + \
                            payload[0]['ecosystem']

                INSIGHTS_URL_REST = "http://{host}:{port}".format(
                    host=INSIGHTS_SERVICE_HOST,
                    port=os.getenv("PGM_SERVICE_PORT"))

                if quickstarts:
                    insights_url = INSIGHTS_URL_REST + "/api/v1/schemas/kronos_scoring"
                else:
                    insights_url = INSIGHTS_URL_REST + "/api/v1/companion_recommendation"
                response = get_session_retry().post(insights_url, json=payload)
                if response.status_code != 200:
                    logger.error(
                        "HTTP error {}. Error retrieving insights data.".
                        format(response.status_code))
                    return None
                else:
                    json_response = response.json()
                    return json_response
            else:
                logger.error(
                    'Payload information not passed in the call, Quitting! inights '
                    'recommender\'s call')
        except Exception as e:
            logger.error("Failed retrieving insights data.")
            logger.error("%s" % e)
            return None
def perform_license_analysis(license_score_list, dependencies):
    """Pass given license_score_list to stack_license analysis and process response."""
    license_url = LICENSE_SCORING_URL_REST + "/api/v1/stack_license"

    payload = {"packages": license_score_list}
    resp = {}
    flag_stack_license_exception = False
    try:
        lic_response = get_session_retry().post(license_url,
                                                data=json.dumps(payload))
        lic_response.raise_for_status(
        )  # raise exception for bad http-status codes
        resp = lic_response.json()
    except requests.exceptions.RequestException:
        current_app.logger.exception(
            "Unexpected error happened while invoking license analysis!")
        flag_stack_license_exception = True
        pass

    stack_license = []
    stack_license_status = None
    unknown_licenses = []
    license_conflict_packages = []
    license_outliers = []
    if not flag_stack_license_exception:
        list_components = resp.get('packages', [])
        for comp in list_components:  # output from license analysis
            for dep in dependencies:  # the known dependencies
                if dep.get('name', '') == comp.get('package', '') and \
                                dep.get('version', '') == comp.get('version', ''):
                    dep['license_analysis'] = comp.get('license_analysis', {})

        _stack_license = resp.get('stack_license', None)
        if _stack_license is not None:
            stack_license = [_stack_license]
        stack_license_status = resp.get('status', None)
        unknown_licenses = _extract_unknown_licenses(resp)
        license_conflict_packages = _extract_conflict_packages(resp)
        license_outliers = _extract_license_outliers(resp)

    output = {
        "status": stack_license_status,
        "f8a_stack_licenses": stack_license,
        "unknown_licenses": unknown_licenses,
        "conflict_packages": license_conflict_packages,
        "outlier_packages": license_outliers
    }
    return output, dependencies
Example #7
0
    def execute_gremlin_dsl(payload):
        """Execute the gremlin query and return the response."""
        try:
            response = get_session_retry().post(GREMLIN_SERVER_URL_REST, data=json.dumps(payload))

            if response.status_code == 200:
                json_response = response.json()

                return json_response
            else:
                _logger.error("HTTP error {}. Error retrieving Gremlin data.".format(
                    response.status_code))
                return None

        except Exception:
            _logger.error(traceback.format_exc())
            return None