def _query_filters(fqdn, display_name, hostname_or_id, insights_id, tags, staleness): if fqdn: query_filters = ({"fqdn": fqdn},) elif display_name: query_filters = ({"display_name": string_contains(display_name)},) elif hostname_or_id: contains = string_contains(hostname_or_id) hostname_or_id_filters = ({"display_name": contains}, {"fqdn": contains}) try: id = UUID(hostname_or_id) except ValueError: # Do not filter using the id logger.debug("The hostname (%s) could not be converted into a UUID", hostname_or_id, exc_info=True) else: logger.debug("Adding id (uuid) to the filter list") hostname_or_id_filters += ({"id": str(id)},) query_filters = ({"OR": hostname_or_id_filters},) elif insights_id: query_filters = ({"insights_id": insights_id},) else: query_filters = () if tags: query_filters += tuple({"tag": Tag().from_string(string_tag).data()} for string_tag in tags) if staleness: staleness_filters = tuple(staleness_filter(staleness)) query_filters += ({"OR": staleness_filters},) return query_filters
def get_tags(search=None, tags=None, order_by=None, order_how=None, page=None, per_page=None, staleness=None): if not xjoin_enabled(): flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "order_by": order_by, "order_how": order_how, "limit": limit, "offset": offset, "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, } if search: variables["filter"] = { # Escaped to prevent ReDoS "name": f".*{re.escape(url_quote(search, safe=''))}.*" } if tags: variables["hostFilter"]["AND"] = [{"tag": Tag().from_string(tag).data()} for tag in tags] response = graphql_query(TAGS_QUERY, variables) data = response["hostTags"] check_pagination(offset, data["meta"]["total"]) return flask_json_response(build_collection_response(data["data"], page, per_page, data["meta"]["total"]))
def get_sap_system(tags=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None): if not xjoin_enabled(): flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) } } hostfilter_and_variables = () if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if filter: if filter.get("system_profile"): if filter["system_profile"].get("sap_system"): hostfilter_and_variables += build_sap_system_filters( filter["system_profile"].get("sap_system")) if filter["system_profile"].get("sap_sids"): hostfilter_and_variables += build_sap_sids_filter( filter["system_profile"]["sap_sids"]) # TODO enable owner_id filtering after all hosts've been updated with "owner_id" # current_identity = get_current_identity() # if ( # current_identity.identity_type == "System" # and current_identity.auth_type != "classic-proxy" # and current_identity.system["cert_type"] == "system" # ): # hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(SAP_SYSTEM_QUERY, variables, log_get_sap_system_failed) data = response["hostSystemProfile"] check_pagination(offset, data["sap_system"]["meta"]["total"]) log_get_sap_system_succeeded(logger, data) return flask_json_response( build_collection_response(data["sap_system"]["data"], page, per_page, data["sap_system"]["meta"]["total"]))
def get_tags( search=None, tags=None, order_by=None, order_how=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None, ): if not xjoin_enabled(): flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "order_by": order_by, "order_how": order_how, "limit": limit, "offset": offset, "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, } hostfilter_and_variables = () if search: variables["filter"] = { # Escaped so that the string literals are not interpreted as regex "search": {"regex": f".*{re.escape(search)}.*"} } if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if filter: if filter.get("system_profile"): if filter["system_profile"].get("sap_system"): hostfilter_and_variables += build_sap_system_filters(filter["system_profile"].get("sap_system")) if filter["system_profile"].get("sap_sids"): hostfilter_and_variables += build_sap_sids_filter(filter["system_profile"]["sap_sids"]) if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(TAGS_QUERY, variables) data = response["hostTags"] check_pagination(offset, data["meta"]["total"]) return flask_json_response(build_collection_response(data["data"], page, per_page, data["meta"]["total"]))
def get_sap_system(tags=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None): if not xjoin_enabled(): logger.error("xjoin-search not enabled") flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, "limit": limit, "offset": offset, } hostfilter_and_variables = () if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: hostfilter_and_variables += build_registered_with_filter( registered_with) if filter: for key in filter: if key == "system_profile": hostfilter_and_variables += build_system_profile_filter( filter["system_profile"]) else: raise ValidationException("filter key is invalid") current_identity = get_current_identity() if current_identity.identity_type == IdentityType.SYSTEM: hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(SAP_SYSTEM_QUERY, variables, log_get_sap_system_failed) data = response["hostSystemProfile"] check_pagination(offset, data["sap_system"]["meta"]["total"]) log_get_sap_system_succeeded(logger, data) return flask_json_response( build_collection_response(data["sap_system"]["data"], page, per_page, data["sap_system"]["meta"]["total"]))
def get_sap_sids(search=None, tags=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None): if not xjoin_enabled(): logger.error("xjoin-search not enabled") flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, "limit": limit, "offset": offset, } hostfilter_and_variables = () if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if search: variables["filter"] = { # Escaped so that the string literals are not interpreted as regex "search": {"regex": f".*{custom_escape(search)}.*"} } if filter: for key in filter: if key == "system_profile": hostfilter_and_variables += build_system_profile_filter(filter["system_profile"]) else: raise ValidationException("filter key is invalid") current_identity = get_current_identity() if current_identity.identity_type == IdentityType.SYSTEM and current_identity.auth_type != AuthType.CLASSIC: hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(SAP_SIDS_QUERY, variables, log_get_sap_sids_failed) data = response["hostSystemProfile"] check_pagination(offset, data["sap_sids"]["meta"]["total"]) log_get_sap_sids_succeeded(logger, data) return flask_json_response( build_collection_response(data["sap_sids"]["data"], page, per_page, data["sap_sids"]["meta"]["total"]) )
def get_operating_system( tags=None, page: Optional[int] = None, per_page: Optional[int] = None, staleness: Optional[str] = None, registered_with: Optional[str] = None, filter=None, ): limit, offset = pagination_params(page, per_page) variables = { "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, "limit": limit, "offset": offset, } hostfilter_and_variables = () if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if filter: for key in filter: if key == "system_profile": hostfilter_and_variables += build_system_profile_filter( filter["system_profile"]) else: raise ValidationException("filter key is invalid") current_identity = get_current_identity() if current_identity.identity_type == IdentityType.SYSTEM: hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(OPERATING_SYSTEM_QUERY, variables, log_get_operating_system_failed) data = response["hostSystemProfile"] check_pagination(offset, data["operating_system"]["meta"]["total"]) log_get_operating_system_succeeded(logger, data) return flask_json_response( build_collection_response(data["operating_system"]["data"], page, per_page, data["operating_system"]["meta"]["total"]))
def _query_filters(fqdn, display_name, hostname_or_id, insights_id, tags, staleness, registered_with, filter): if fqdn: query_filters = ({"fqdn": {"eq": fqdn}}, ) elif display_name: query_filters = ({"display_name": string_contains_lc(display_name)}, ) elif hostname_or_id: contains = string_contains(hostname_or_id) contains_lc = string_contains_lc(hostname_or_id) hostname_or_id_filters = ({ "display_name": contains_lc }, { "fqdn": contains }) try: id = UUID(hostname_or_id) except ValueError: # Do not filter using the id logger.debug( "The hostname (%s) could not be converted into a UUID", hostname_or_id, exc_info=True) else: logger.debug("Adding id (uuid) to the filter list") hostname_or_id_filters += ({"id": {"eq": str(id)}}, ) query_filters = ({"OR": hostname_or_id_filters}, ) elif insights_id: query_filters = ({"insights_id": {"eq": insights_id}}, ) else: query_filters = () if tags: query_filters += build_tag_query_dict_tuple(tags) if staleness: staleness_filters = tuple(staleness_filter(staleness)) query_filters += ({"OR": staleness_filters}, ) if registered_with: query_filters += ({"NOT": {"insights_id": {"eq": None}}}, ) if filter: if filter.get("system_profile"): if filter["system_profile"].get("sap_system"): query_filters += build_sap_system_filters( filter["system_profile"]["sap_system"]) if filter["system_profile"].get("sap_sids"): query_filters += build_sap_sids_filter( filter["system_profile"]["sap_sids"]) logger.debug(query_filters) return query_filters
def get_sap_system(tags=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None): if not xjoin_enabled(): flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) } } hostfilter_and_variables = () if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if filter: if filter.get("system_profile"): if filter["system_profile"].get("sap_system"): hostfilter_and_variables += build_sap_system_filters( filter["system_profile"].get("sap_system")) if filter["system_profile"].get("sap_sids"): hostfilter_and_variables += build_sap_sids_filter( filter["system_profile"]["sap_sids"]) if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(SAP_SYSTEM_QUERY, variables) data = response["hostSystemProfile"] check_pagination(offset, data["sap_system"]["meta"]["total"]) return flask_json_response( build_collection_response(data["sap_system"]["data"], page, per_page, data["sap_system"]["meta"]["total"]))
def get_tags( search=None, tags=None, order_by=None, order_how=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None, ): if not xjoin_enabled(): flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "order_by": order_by, "order_how": order_how, "limit": limit, "offset": offset, "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, } hostfilter_and_variables = () if search: variables["filter"] = { # Escaped so that the string literals are not interpreted as regex "search": { "regex": f".*{re.escape(search)}.*" } } if tags: hostfilter_and_variables = build_tag_query_dict_tuple(tags) if registered_with: variables["hostFilter"]["NOT"] = {"insights_id": {"eq": None}} if filter: if filter.get("system_profile"): if filter["system_profile"].get("sap_system"): hostfilter_and_variables += build_sap_system_filters( filter["system_profile"].get("sap_system")) if filter["system_profile"].get("sap_sids"): hostfilter_and_variables += build_sap_sids_filter( filter["system_profile"]["sap_sids"]) # TODO enable owner_id filtering after all hosts've been updated with "owner_id" # current_identity = get_current_identity() # if ( # current_identity.identity_type == "System" # and current_identity.auth_type != "classic-proxy" # and current_identity.system["cert_type"] == "system" # ): # hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(TAGS_QUERY, variables, log_get_tags_failed) data = response["hostTags"] check_pagination(offset, data["meta"]["total"]) log_get_tags_succeeded(logger, data) return flask_json_response( build_collection_response(data["data"], page, per_page, data["meta"]["total"]))
def get_tags( search=None, tags=None, display_name=None, fqdn=None, hostname_or_id=None, insights_id=None, provider_id=None, provider_type=None, order_by=None, order_how=None, page=None, per_page=None, staleness=None, registered_with=None, filter=None, ): if not xjoin_enabled(): logger.error("xjoin-search not enabled") flask.abort(503) limit, offset = pagination_params(page, per_page) variables = { "order_by": order_by, "order_how": order_how, "limit": limit, "offset": offset, "hostFilter": { # we're not indexing null timestamps in ES "OR": list(staleness_filter(staleness)) }, } hostfilter_and_variables = query_filters( fqdn, display_name, hostname_or_id, insights_id, provider_id, provider_type, tags, None, registered_with, filter, ) if search: variables["filter"] = { # Escaped so that the string literals are not interpreted as regex "search": { "regex": f".*{custom_escape(search)}.*" } } current_identity = get_current_identity() if current_identity.identity_type == IdentityType.SYSTEM: hostfilter_and_variables += owner_id_filter() if hostfilter_and_variables != (): variables["hostFilter"]["AND"] = hostfilter_and_variables response = graphql_query(TAGS_QUERY, variables, log_get_tags_failed) data = response["hostTags"] check_pagination(offset, data["meta"]["total"]) log_get_tags_succeeded(logger, data) return flask_json_response( build_collection_response(data["data"], page, per_page, data["meta"]["total"]))
def query_filters( fqdn, display_name, hostname_or_id, insights_id, provider_id, provider_type, tags, staleness, registered_with, filter, ): num_ids = 0 for id_param in [fqdn, display_name, hostname_or_id, insights_id]: if id_param: num_ids += 1 if num_ids > 1: raise ValidationException( "Only one of [fqdn, display_name, hostname_or_id, insights_id] may be provided at a time." ) if fqdn: query_filters = ({"fqdn": {"eq": fqdn.casefold()}},) elif display_name: query_filters = ({"display_name": string_contains_lc(display_name)},) elif hostname_or_id: contains_lc = string_contains_lc(hostname_or_id) hostname_or_id_filters = ({"display_name": contains_lc}, {"fqdn": contains_lc}) try: id = UUID(hostname_or_id) except ValueError: # Do not filter using the id logger.debug("The hostname (%s) could not be converted into a UUID", hostname_or_id, exc_info=True) else: logger.debug("Adding id (uuid) to the filter list") hostname_or_id_filters += ({"id": {"eq": str(id)}},) query_filters = ({"OR": hostname_or_id_filters},) elif insights_id: query_filters = ({"insights_id": {"eq": insights_id.casefold()}},) else: query_filters = () if tags: query_filters += build_tag_query_dict_tuple(tags) if staleness: staleness_filters = tuple(staleness_filter(staleness)) query_filters += ({"OR": staleness_filters},) if registered_with: query_filters += ({"NOT": {"insights_id": {"eq": None}}},) if provider_type: query_filters += ({"provider_type": {"eq": provider_type.casefold()}},) if provider_id: query_filters += ({"provider_id": {"eq": provider_id.casefold()}},) for key in filter: if key == "system_profile": query_filters += build_system_profile_filter(filter["system_profile"]) else: raise ValidationException("filter key is invalid") logger.debug(query_filters) return query_filters