From 744076c2fe34ad9b4786cec9c0abd57309e12fc8 Mon Sep 17 00:00:00 2001 From: checktheroads Date: Thu, 16 Apr 2020 09:30:20 -0700 Subject: [PATCH] fix network info gathering --- hyperglass/api/routes.py | 12 ++---------- hyperglass/util.py | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/hyperglass/api/routes.py b/hyperglass/api/routes.py index 8acb5a8..a731639 100644 --- a/hyperglass/api/routes.py +++ b/hyperglass/api/routes.py @@ -4,7 +4,6 @@ import os import json import time -from ipaddress import ip_address # Third Party from fastapi import HTTPException @@ -33,15 +32,7 @@ else: async def query(query_data: Query, request: Request): """Ingest request data pass it to the backend application to perform the query.""" - if ip_address(request.client.host).is_loopback: - network_info = {"prefix": None, "asn": None} - else: - network_info = get_network_info(request.client.host) - - network_info = { - "prefix": str(network_info["prefix"]), - "asn": network_info["asns"][0], - } + network_info = get_network_info(request.client.host, serialize=True) header_keys = ( "content-length", @@ -79,6 +70,7 @@ async def query(query_data: Query, request: Request): log.debug(f"Cache Timeout: {cache_timeout}") log.info(f"Starting query execution for query {query_data.summary}") + # Check if cached entry exists if not await cache.get(cache_key): log.debug(f"No existing cache entry for query {cache_key}") diff --git a/hyperglass/util.py b/hyperglass/util.py index f0fd4aa..5f24824 100644 --- a/hyperglass/util.py +++ b/hyperglass/util.py @@ -695,7 +695,7 @@ def parse_exception(exc): return ", caused by ".join(parsed) -def get_network_info(valid_ip): +def get_network_info(ip, serialize=False): """Get containing prefix for an IP host query from RIPEstat API. Arguments: @@ -709,10 +709,17 @@ def get_network_info(valid_ip): {IPv4Network|IPv6Network} -- Valid IP Network object """ import httpx - from ipaddress import ip_network + from ipaddress import ip_network, ip_address from hyperglass.exceptions import InputInvalid - log.debug("Attempting to find containing prefix for {ip}", ip=str(valid_ip)) + log.debug("Attempting to find network details for {ip}", ip=str(ip)) + + try: + valid_ip = ip_address(ip) + if not valid_ip.is_global: + return {"prefix": None, "asn": None} + except ValueError: + return {"prefix": None, "asn": None} try: response = httpx.get( @@ -737,7 +744,11 @@ def get_network_info(valid_ip): i=str(valid_ip), ) - network_info["prefix"] = ip_network(network_info["prefix"]) + if not serialize: + network_info["prefix"] = ip_network(network_info["prefix"]) + + if serialize: + network_info["asns"] = network_info["asns"][0] return network_info