def __init__(self): self.config = ConfigParser.RawConfigParser() config_file = "/path/to/bgp-ranking.conf" self.config.read(config_file) self.templates = config.get('web','templates') self.website_root = os.path.join(self.config.get('directories','root'),\ config.get('web','root_web')) self.rgraph_scripts = [ 'RGraph.common.core.js',\ 'RGraph.common.zoom.js', \ 'RGraph.common.resizing.js',\ 'RGraph.common.context.js',\ 'RGraph.line.js',\ 'RGraph.common.tooltips.js'] self.controler = MasterControler()
def reload(self): """ Recompute all the ranks and return on the index """ self.controler = MasterControler() return self.default()
class Master(object): def __init__(self): self.config = ConfigParser.RawConfigParser() config_file = "/path/to/bgp-ranking.conf" self.config.read(config_file) self.templates = config.get('web','templates') self.website_root = os.path.join(self.config.get('directories','root'),\ config.get('web','root_web')) self.rgraph_scripts = [ 'RGraph.common.core.js',\ 'RGraph.common.zoom.js', \ 'RGraph.common.resizing.js',\ 'RGraph.common.context.js',\ 'RGraph.line.js',\ 'RGraph.common.tooltips.js'] self.controler = MasterControler() @cherrypy.expose def maps(self): self.template = Template(file = os.path.join(self.website_root, self.templates, 'maps.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') return str(self.template) @cherrypy.expose def protovis(self): """ Some tests with protovis """ dates, data, max_y, stats = self.controler.protovis() self.template = Template(file = os.path.join(self.website_root, self.templates, 'protovis.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') self.template.panel = dates self.template.data = data self.template.max_y = max_y self.template.data_2 = stats return str(self.template) @cherrypy.expose def stats(self): """ Some stats """ stats, graph, graph_name = self.controler.get_stats() self.template = Template(file = os.path.join(self.website_root, self.templates, 'statistics.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') rowspan = {} for section in stats: rowspan[section] = len(stats[section]) + 1 self.template.order_stats = sorted(stats.keys()) self.template.stats = stats self.template.rowspan = rowspan self.template.js_stats = graph self.template.js_stats_name = graph_name return str(self.template) @cherrypy.expose @cherrypy.tools.json_out() def json(self, source = None, date = None, asn = None, ip_details = None): """ JSON interface """ source = self.reset_if_empty(source) date = self.reset_if_empty(date) asn = self.reset_if_empty(asn) ip_details = self.reset_if_empty(ip_details) to_return = {} to_return["dates"] = list(sorted(self.controler.get_dates())) if asn is not None: temp_as_info = self.controler.get_as_infos(asn, source, date) to_return["sources"] = list(temp_as_info[1]) to_return["asn"] = list(temp_as_info[0]) if ip_details is not None and len(temp_as_info[0]) > 0: to_return["ip"] = list(self.controler.get_ip_infos(asn, ip_details, source, date)) else: to_return["sources"] = list(self.controler.get_sources(date)) to_return["ranking"] = list(self.controler.prepare_index(source, date)) return to_return def init_template(self, source = None, date = None): """ Initialize the basic components of the template """ source = self.reset_if_empty(source) date = self.reset_if_empty(date) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') self.template.sources = self.controler.get_sources(date) self.template.dates = sorted(self.controler.get_dates()) self.template.source = source self.template.date = date def escape(self, var): """ Escape input """ return cgi.escape(var) def reset_if_empty(self, to_check = None): """ Ensure the empty paramaters are None before doing anything """ if to_check is None or len(to_check) == 0: return None return self.escape(to_check) @cherrypy.expose def asns(self, source = None, asn = None, date = None): """ Generate the view of the global ranking """ source = self.reset_if_empty(source) asn = self.reset_if_empty(asn) date = self.reset_if_empty(date) if asn is not None: return self.asn_details(source = source, asn = asn, date = date) histo = self.controler.prepare_index(source, date) self.template = Template(file = os.path.join(self.website_root, self.templates, 'index_asn.tmpl')) self.init_template(source, date) self.template.histories = histo return str(self.template) @cherrypy.expose def asn_details(self, source = None, asn = None, ip_details = None, date = None): """ Generate the view of an ASN """ asn = self.reset_if_empty(asn) source = self.reset_if_empty(source) ip_details = self.reset_if_empty(ip_details) date = self.reset_if_empty(date) self.template = Template(file = os.path.join(self.website_root, self.templates, 'asn_details.tmpl')) self.init_template(source, date) self.controler.js = self.controler.js_name = None if asn is not None: asn = asn.lstrip('AS') if asn.isdigit(): self.template.asn = asn as_infos, current_sources, raw_sources = self.controler.get_as_infos(asn, source, date) if len(as_infos) > 0: self.template.sources = self.controler.get_sources(date) self.template.dates = sorted(self.controler.get_dates()) self.template.asn_descs = as_infos self.template.current_sources = current_sources if len(raw_sources) > 0: self.template.sources = raw_sources if ip_details is not None: self.template.ip_details = ip_details self.template.ip_descs = self.controler.get_ip_infos(asn, ip_details, source, date) if self.controler.js is not None: self.template.javascript = self.controler.js self.template.js_name = self.controler.js_name else: self.template.error = "Invalid query: " + asn if self.template.javascript is None: self.template.error = "No data available to generate the graph for "+ asn return str(self.template) else: return str(self.default()) @cherrypy.expose def comparator(self, source = None, asns = None): """ Generate the view comparing a set of ASNs """ asns = self.reset_if_empty(asns) source = self.reset_if_empty(source) self.template = Template(file = os.path.join(self.website_root, self.templates, 'comparator.tmpl')) self.init_template(source) if asns is not None: self.template.asns = self.controler.comparator(asns) self.template.sources = self.controler.get_sources() self.template.js_comparator = self.controler.js self.template.js_comparator_name = self.controler.js_name if self.template.js_comparator is None: self.template.error = "No valid ASN in the list..." return str(self.template) @cherrypy.expose def reload(self): """ Recompute all the ranks and return on the index """ self.controler = MasterControler() return self.default() @cherrypy.expose def default(self): """ Load the index """ return str(self.asns())
def reload(self): self.controler = MasterControler() return self.default()
def __init__(self): self.controler = MasterControler()
class Master(object): def __init__(self): self.controler = MasterControler() def init_template(self, source = None): self.template.rgraph_dir = rgraph_dir self.template.rgraph_scripts = rgraph_scripts self.template.css_file = css_file self.controler.get_sources() self.template.sources = self.controler.sources self.template.source = source def asns(self, source = None, asn = None): if asn is not None and len(asn) > 0: return self.asn_details(source, asn) self.template = Template(file = os.path.join(website_root, templates, 'index_asn.tmpl')) self.init_template(source) self.controler.prepare_index(source) self.template.histories = self.controler.histories return str(self.template) asns.exposed = True def asn_details(self, source = None, asn = None, ip_details = None): self.template = Template(file = os.path.join(website_root, templates, 'asn_details.tmpl')) self.init_template(source) self.controler.js = self.controler.js_name = None if asn is not None and len(asn) > 0: asn = asn.lstrip('AS') if asn.isdigit(): self.template.asn = asn self.controler.get_as_infos(asn, source) if self.controler.as_infos is not None: self.template.asn_descs = self.controler.as_infos if len(self.template.asn_descs) is not None: self.template.javascript = self.controler.js self.template.js_name = self.controler.js_name if ip_details is not None and ip_details.isdigit(): self.template.ip_details = ip_details self.controler.get_ip_infos(ip_details, source) self.template.ip_descs = self.controler.ip_infos else: self.template.error = "No data for " + asn + " on " + source else: self.template.error = asn + " not found in the database." else: self.template.error = "Invalid query: " + asn if self.template.javascript is None: self.template.error = "No data available to generate the graph for "+ asn return str(self.template) else: return str(self.default()) asn_details.exposed = True def comparator(self, source = None, asns = None): self.template = Template(file = os.path.join(website_root, templates, 'comparator.tmpl')) self.init_template(source) self.template.asns = asns if self.template.asns is not None: self.controler.comparator(self.template.asns) self.template.js_comparator = self.controler.js self.template.js_comparator_name = self.controler.js_name if self.template.js_comparator is None: self.template.error = "No valid ASN in the list..." return str(self.template) comparator.exposed = True def reload(self): self.controler = MasterControler() return self.default() reload.exposed = True def default(self): return str(self.asns()) default.exposed = True
class Master(object): def __init__(self): self.config = ConfigParser.RawConfigParser() config_file = "/path/to/bgp-ranking.conf" self.config.read(config_file) self.templates = config.get('web','templates') self.website_root = os.path.join(self.config.get('directories','root'),\ config.get('web','root_web')) self.rgraph_scripts = [ 'RGraph.common.core.js',\ 'RGraph.common.zoom.js', \ 'RGraph.common.resizing.js',\ 'RGraph.common.context.js',\ 'RGraph.line.js',\ 'RGraph.common.tooltips.js'] self.controler = MasterControler() @cherrypy.expose def maps(self): self.template = Template(file = os.path.join(self.website_root, self.templates, 'maps.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') return str(self.template) @cherrypy.expose def protovis(self): """ Some tests with protovis """ dates, data, max_y, stats = self.controler.protovis() self.template = Template(file = os.path.join(self.website_root, self.templates, 'protovis.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') self.template.panel = dates self.template.data = data self.template.max_y = max_y self.template.data_2 = stats return str(self.template) @cherrypy.expose def stats(self): """ Some stats """ stats, graph, graph_name = self.controler.get_stats() self.template = Template(file = os.path.join(self.website_root, self.templates, 'statistics.tmpl')) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') rowspan = {} for section in stats: rowspan[section] = len(stats[section]) + 1 self.template.order_stats = sorted(stats.keys()) self.template.stats = stats self.template.rowspan = rowspan self.template.js_stats = graph self.template.js_stats_name = graph_name return str(self.template) @cherrypy.expose @cherrypy.tools.json_out() def json(self, source = None, date = None, asn = None, ip_details = None): """ JSON interface """ source = self.reset_if_empty(source) date = self.reset_if_empty(date) asn = self.reset_if_empty(asn) ip_details = self.reset_if_empty(ip_details) to_return = {} to_return["dates"] = list(sorted(self.controler.get_dates())) if asn is not None: temp_as_info = self.controler.get_as_infos(asn, source, date) to_return["sources"] = list(temp_as_info[1]) to_return["asn"] = list(temp_as_info[0]) if ip_details is not None and len(temp_as_info[0]) > 0: to_return["ip"] = list(self.controler.get_ip_infos(asn, ip_details, source, date)) else: to_return["sources"] = list(self.controler.get_sources(date)) to_return["ranking"] = list(self.controler.prepare_index(source, date)) return to_return def init_template(self, source = None, date = None): """ Initialize the basic components of the template """ source = self.reset_if_empty(source) date = self.reset_if_empty(date) self.template.rgraph_dir = config.get('web','rgraph_dir') self.template.rgraph_scripts = self.rgraph_scripts self.template.css_file = self.config.get('web','css_file') self.template.logo = self.config.get('web','logo') self.template.banner = self.config.get('web','banner') self.template.sources = self.controler.get_sources(date) self.template.dates = sorted(self.controler.get_dates()) self.template.source = source self.template.date = date def escape(self, var): """ Escape input """ return cgi.escape(var, True) def reset_if_empty(self, to_check = None): """ Ensure the empty paramaters are None before doing anything """ if to_check is None or len(to_check) == 0: return None return self.escape(to_check) @cherrypy.expose def asns(self, source = None, asn = None, date = None): """ Generate the view of the global ranking """ source = self.reset_if_empty(source) asn = self.reset_if_empty(asn) date = self.reset_if_empty(date) if asn is not None: return self.asn_details(source = source, asn = asn, date = date) histo = self.controler.prepare_index(source, date) self.template = Template(file = os.path.join(self.website_root, self.templates, 'index_asn.tmpl')) self.init_template(source, date) self.template.histories = histo return str(self.template) @cherrypy.expose def asn_details(self, source = None, asn = None, ip_details = None, date = None): """ Generate the view of an ASN """ asn = self.reset_if_empty(asn) source = self.reset_if_empty(source) ip_details = self.reset_if_empty(ip_details) date = self.reset_if_empty(date) self.template = Template(file = os.path.join(self.website_root, self.templates, 'asn_details.tmpl')) self.init_template(source, date) self.controler.js = self.controler.js_name = None if asn is not None: asn = asn.lstrip('AS') if asn.isdigit(): self.template.asn = asn as_infos, current_sources, raw_sources = self.controler.get_as_infos(asn, source, date) if len(as_infos) > 0: self.template.sources = self.controler.get_sources(date) self.template.dates = sorted(self.controler.get_dates()) self.template.asn_descs = as_infos self.template.current_sources = current_sources if len(raw_sources) > 0: self.template.sources = raw_sources if ip_details is not None: self.template.ip_details = ip_details self.template.ip_descs = self.controler.get_ip_infos(asn, ip_details, source, date) if self.controler.js is not None: self.template.javascript = self.controler.js self.template.js_name = self.controler.js_name else: self.template.error = "Invalid query: " + asn if self.template.javascript is None: self.template.error = "No data available to generate the graph for "+ asn return str(self.template) else: return str(self.default()) @cherrypy.expose def comparator(self, source = None, asns = None): """ Generate the view comparing a set of ASNs """ asns = self.reset_if_empty(asns) source = self.reset_if_empty(source) self.template = Template(file = os.path.join(self.website_root, self.templates, 'comparator.tmpl')) self.init_template(source) if asns is not None: self.template.asns = self.controler.comparator(asns) self.template.sources = self.controler.get_sources() self.template.js_comparator = self.controler.js self.template.js_comparator_name = self.controler.js_name if self.template.js_comparator is None: self.template.error = "No valid ASN in the list..." return str(self.template) @cherrypy.expose def reload(self): """ Recompute all the ranks and return on the index """ self.controler = MasterControler() return self.default() @cherrypy.expose def default(self): """ Load the index """ return str(self.asns())