From 1a105698c5bb3109f0232f7c724eb559a2fb718c Mon Sep 17 00:00:00 2001 From: Mehdi Abaakouk Date: Mon, 28 May 2012 13:51:16 +0200 Subject: [PATCH] Add AS name persistant cache and reenable it --- lg.py | 7 ++++--- toolbox.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lg.py b/lg.py index 6e89670..86d1835 100755 --- a/lg.py +++ b/lg.py @@ -26,7 +26,7 @@ from urllib2 import urlopen from urllib import quote, unquote import json -from toolbox import mask_is_valid, ipv6_is_valid, ipv4_is_valid, resolve +from toolbox import mask_is_valid, ipv6_is_valid, ipv4_is_valid, resolve, save_cache_pickle, load_cache_pickle import pydot from flask import Flask, render_template, jsonify, redirect, session, request, abort, Response @@ -257,9 +257,9 @@ def show_route_for(hosts, proto): def show_route_for_detail(hosts, proto): return show_route("prefix_detail", hosts, proto) -ASNAME_CACHE = {} +ASNAME_CACHE_FILE = "/tmp/asname_cache.pickle" +ASNAME_CACHE = load_cache_pickle(ASNAME_CACHE_FILE, {}) def get_as_name(_as): - return "AS%s" % _as if not ASNAME_CACHE.has_key(_as): whois_answer = whois_command("as%s" % _as) as_name = re.search('as-name: (.*)', whois_answer) @@ -267,6 +267,7 @@ def get_as_name(_as): ASNAME_CACHE[_as] = as_name.group(1).strip() else: ASNAME_CACHE[_as] = _as + save_cache_pickle(ASNAME_CACHE_FILE, ASNAME_CACHE) if ASNAME_CACHE[_as] == _as: return "AS%s" % _as else: diff --git a/toolbox.py b/toolbox.py index bbaae95..6b5a253 100644 --- a/toolbox.py +++ b/toolbox.py @@ -21,6 +21,7 @@ from dns import resolver import socket +import pickle def resolve(n, q): @@ -49,5 +50,20 @@ def ipv6_is_valid(n): except socket.error: return False +def save_cache_pickle(filename, data): + output = open(filename, 'wb') + pickle.dump(data, output) + output.close() +def load_cache_pickle(filename, default = None): + try: + pkl_file = open(filename, 'rb') + except IOError: + return default + try: + data = pickle.load(pkl_file) + except: + data = default + pkl_file.close() + return data