def check_redis_instance() -> bool: """Ensure Redis is running before starting server.""" cache = SyncCache(db=params.cache.database, **REDIS_CONFIG) cache.test() log.debug("Redis is running at: {}:{}", REDIS_CONFIG["host"], REDIS_CONFIG["port"]) return True
def cache_config(): """Add configuration to Redis cache as a pickled object.""" # Standard Library import pickle cache = SyncCache(db=params.cache.database, **REDIS_CONFIG) cache.set("HYPERGLASS_CONFIG", pickle.dumps(params)) return True
def sync_clear_redis_cache() -> None: """Clear the Redis cache.""" # Project from hyperglass.cache import SyncCache from hyperglass.configuration import REDIS_CONFIG, params try: cache = SyncCache(db=params.cache.database, **REDIS_CONFIG) cache.clear() except BaseException as err: raise RuntimeError from err
def network_info_sync(*targets: str) -> Dict[str, Dict[str, str]]: """Get ASN, Containing Prefix, and other info about an internet resource.""" targets = [str(t) for t in targets] cache = SyncCache(db=params.cache.database, **REDIS_CONFIG) # Set default data structure. data = {t: {k: "" for k in DEFAULT_KEYS} for t in targets} # Get all cached bgp.tools data. cached = cache.get_dict(CACHE_KEY) # Try to use cached data for each of the items in the list of # resources. for t in targets: if t in cached: # Reassign the cached network info to the matching resource. data[t] = cached[t] log.debug("Using cached network info for {}", t) # Remove cached items from the resource list so they're not queried. targets = [t for t in targets if t not in cached] try: if targets: whoisdata = run_whois_sync(targets) if whoisdata: # If the response is not empty, parse it. data.update(parse_whois(whoisdata, targets)) # Cache the response for t in targets: cache.set_dict(CACHE_KEY, t, data[t]) log.debug("Cached network info for {}", t) except Exception as err: log.error(str(err)) return data
"""Validate RPKI state via Cloudflare GraphQL API.""" # Project from hyperglass.log import log from hyperglass.cache import SyncCache from hyperglass.configuration import REDIS_CONFIG, params from hyperglass.external._base import BaseExternal RPKI_STATE_MAP = {"Invalid": 0, "Valid": 1, "NotFound": 2, "DEFAULT": 3} RPKI_NAME_MAP = {v: k for k, v in RPKI_STATE_MAP.items()} CACHE_KEY = "hyperglass.external.rpki" cache = SyncCache(db=params.cache.database, **REDIS_CONFIG) def rpki_state(prefix, asn): """Get RPKI state and map to expected integer.""" log.debug("Validating RPKI State for {p} via AS{a}", p=prefix, a=asn) state = 3 ro = f"{prefix}@{asn}" cached = cache.get_dict(CACHE_KEY, ro) if cached is not None: state = cached else: ql = 'query GetValidation {{ validation(prefix: "{}", asn: {}) {{ state }} }}' query = ql.format(prefix, asn)