Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 def reload(self):
     """
         Recompute all the ranks and return on the index
     """
     self.controler = MasterControler()
     return self.default()
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
 def reload(self):
     self.controler = MasterControler()
     return self.default()
Ejemplo n.º 6
0
 def __init__(self):
     self.controler = MasterControler()
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 def reload(self):
     """
         Recompute all the ranks and return on the index
     """
     self.controler = MasterControler()
     return self.default()
Ejemplo n.º 9
0
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())