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
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}
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
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