Exemple #1
0
    def print_adj_delta(self, key, value, delta, global_adj_db,
                        global_publication_db):
        _, reported_node_name = key.split(":", 1)
        new_adj_db = serializer.deserialize_thrift_object(
            value.value, lsdb_types.AdjacencyDatabase)
        if delta:
            old_adj_db = global_adj_db.get(new_adj_db.thisNodeName, None)
            if old_adj_db is None:
                lines = ("ADJ_DB_ADDED: {}\n".format(new_adj_db.thisNodeName) +
                         utils.sprint_adj_db_full(global_adj_db, new_adj_db,
                                                  False)[1])
            else:
                lines = utils.sprint_adj_db_delta(new_adj_db, old_adj_db)
                lines = "\n".join(lines)
        else:
            _, lines = utils.sprint_adj_db_full(global_adj_db, new_adj_db,
                                                False)

        if lines:
            self.print_timestamp()
            self.print_publication_delta(
                "{}'s adjacencies".format(reported_node_name),
                utils.sprint_pub_update(global_publication_db, key, value),
                lines,
            )

        utils.update_global_adj_db(global_adj_db, new_adj_db)
Exemple #2
0
    def print_db_delta(self, key, our_kv_pub_db, value, other_val):
        ''' print db delta '''

        if key.startswith(Consts.PREFIX_DB_MARKER):
            prefix_db = deserialize_thrift_object(value.value,
                                                  lsdb_types.PrefixDatabase)
            other_prefix_db = deserialize_thrift_object(
                other_val.value, lsdb_types.PrefixDatabase)
            other_prefix_set = {}
            utils.update_global_prefix_db(other_prefix_set, other_prefix_db)
            lines = utils.sprint_prefixes_db_delta(other_prefix_set, prefix_db)

        elif key.startswith(Consts.ADJ_DB_MARKER):
            adj_db = deserialize_thrift_object(value.value,
                                               lsdb_types.AdjacencyDatabase)
            other_adj_db = deserialize_thrift_object(
                value.value, lsdb_types.AdjacencyDatabase)
            lines = utils.sprint_adj_db_delta(adj_db, other_adj_db)

        else:
            lines = None

        if lines != []:
            print_publication_delta(
                "Key: {} difference".format(key),
                utils.sprint_pub_update(our_kv_pub_db, key, other_val),
                "\n".join(lines) if lines else "")
Exemple #3
0
    def print_delta(self, msg, regex, pattern, ttl, delta, global_dbs):

        for key, value in msg.keyVals.items():
            if not key.startswith(regex) and not pattern.match(key):
                continue
            if value.value is None:
                if ttl:
                    self.print_timestamp()
                    print("Traversal List: {}".format(msg.nodeIds))
                    self.print_publication_delta(
                        "Key: {}, ttl update".format(key),
                        "ttl: {}, ttlVersion: {}".format(
                            value.ttl, value.ttlVersion),
                    )
                continue

            if key.startswith(Consts.ADJ_DB_MARKER):
                self.print_adj_delta(key, value, delta, global_dbs.adjs,
                                     global_dbs.publications)
                continue

            if key.startswith(Consts.PREFIX_DB_MARKER):
                self.print_prefix_delta(key, value, delta, global_dbs.prefixes,
                                        global_dbs.publications)
                continue

            self.print_timestamp()
            print("Traversal List: {}".format(msg.nodeIds))
            self.print_publication_delta(
                "Key: {} update".format(key),
                utils.sprint_pub_update(global_dbs.publications, key, value),
            )
Exemple #4
0
    def print_prefix_delta(
        self,
        key: str,
        value: openr_types.Publication,
        delta: bool,
        global_prefix_db: Dict,
        global_publication_db: Dict,
    ):
        prefix_db = serializer.deserialize_thrift_object(
            value.value, openr_types.PrefixDatabase)
        if delta:
            lines = "\n".join(
                utils.sprint_prefixes_db_delta(global_prefix_db, prefix_db,
                                               key))
        else:
            lines = utils.sprint_prefixes_db_full(prefix_db)

        if lines:
            self.print_publication_delta(
                "{}'s prefixes".format(prefix_db.thisNodeName),
                utils.sprint_pub_update(global_publication_db, key, value),
                lines,
                timestamp=True,
            )

        utils.update_global_prefix_db(global_prefix_db, prefix_db, key)
Exemple #5
0
    def print_delta(self, msg: openr_types.Publication, ttl: bool, delta: bool,
                    global_dbs: Dict):

        for key, value in msg.keyVals.items():
            if value.value is None:
                print("Traversal List: {}".format(msg.nodeIds))
                self.print_publication_delta(
                    "Key: {}, ttl update".format(key),
                    "ttl: {}, ttlVersion: {}".format(value.ttl,
                                                     value.ttlVersion),
                    timestamp=True,
                )
                continue

            if key.startswith(Consts.ADJ_DB_MARKER):
                self.print_adj_delta(key, value, delta, global_dbs.adjs,
                                     global_dbs.publications)
                continue

            if key.startswith(Consts.PREFIX_DB_MARKER):
                self.print_prefix_delta(key, value, delta, global_dbs.prefixes,
                                        global_dbs.publications)
                continue

            print("Traversal List: {}".format(msg.nodeIds))
            self.print_publication_delta(
                "Key: {} update".format(key),
                utils.sprint_pub_update(global_dbs.publications, key, value),
                timestamp=True,
            )
Exemple #6
0
    def print_adj_delta(
        self,
        key: str,
        value: openr_types.Value,
        delta: bool,
        global_adj_db: Dict,
        global_publication_db: Dict,
    ):
        new_adj_db = serializer.deserialize_thrift_object(
            value.value, openr_types.AdjacencyDatabase)
        if delta:
            old_adj_db = global_adj_db.get(new_adj_db.thisNodeName, None)
            if old_adj_db is None:
                lines = "ADJ_DB_ADDED: {}\n".format(
                    new_adj_db.thisNodeName) + utils.sprint_adj_db_full(
                        global_adj_db, new_adj_db, False)
            else:
                lines = utils.sprint_adj_db_delta(new_adj_db, old_adj_db)
                lines = "\n".join(lines)
        else:
            lines = utils.sprint_adj_db_full(global_adj_db, new_adj_db, False)

        if lines:
            self.print_publication_delta(
                "{}'s adjacencies".format(new_adj_db.thisNodeName),
                utils.sprint_pub_update(global_publication_db, key, value),
                lines,
                timestamp=True,
            )

        utils.update_global_adj_db(global_adj_db, new_adj_db)
Exemple #7
0
    def print_prefix_delta(self, key, value, delta, global_prefix_db,
                           global_publication_db):
        _, reported_node_name = key.split(':', 1)
        prefix_db = deserialize_thrift_object(value.value,
                                              lsdb_types.PrefixDatabase)
        if delta:
            lines = utils.sprint_prefixes_db_delta(global_prefix_db, prefix_db)
        else:
            lines = utils.sprint_prefixes_db_full(prefix_db)

        if lines:
            print_publication_delta(
                "{}'s prefixes".format(reported_node_name),
                utils.sprint_pub_update(global_publication_db, key, value),
                "\n".join(lines))

        utils.update_global_prefix_db(global_prefix_db, prefix_db)
Exemple #8
0
    def print_delta(self, msg, regex, pattern, ttl, delta, global_dbs):

        for (key, value) in msg.keyVals.items():
            if not key.startswith(regex) and not pattern.match(key):
                continue
            if value.value is None:
                if ttl:
                    print_timestamp()
                    print_publication_delta(
                        "Key: {}, ttl update".format(key),
                        "ttl: {}, ttlVersion: {}".format(value.ttl,
                                                         value.ttlVersion))
                continue

            if key.startswith(Consts.ADJ_DB_MARKER):
                print_timestamp()
                self.print_adj_delta(key, value, delta,
                                     global_dbs.adjs,
                                     global_dbs.publications)
                continue

            if key.startswith(Consts.PREFIX_DB_MARKER):
                print_timestamp()
                self.print_prefix_delta(key, value, delta,
                                        global_dbs.prefixes,
                                        global_dbs.publications)
                continue

            if key.startswith(Consts.INTERFACE_DB_MARKER):
                print_timestamp()
                self.print_interface_delta(key, value, delta,
                                           global_dbs.interfaces,
                                           global_dbs.publications)
                continue

            if delta:
                print_timestamp()
                print_publication_delta(
                    "Key: {} update".format(key),
                    utils.sprint_pub_update(global_dbs.publications,
                                            key, value))
Exemple #9
0
    def print_interface_delta(self, key, value, delta, global_intf_db,
                              global_publication_db):
        _, node_name = key.split(':', 1)
        new_intf_db = utils.interface_db_to_dict(value)

        if delta:
            old_intf_db = global_intf_db.get(node_name, None)

            if old_intf_db is None:
                lines = ["INTERFACE_DB_ADDED: {}".format(node_name)]
            else:
                lines = utils.sprint_interface_db_delta(
                    new_intf_db, old_intf_db)
                lines = '\n'.join(lines)
        else:
            lines = utils.sprint_interface_table(new_intf_db)

        if lines:
            print_publication_delta(
                "{}'s interfaces'".format(node_name),
                utils.sprint_pub_update(global_publication_db, key, value),
                lines)

        global_intf_db[new_intf_db.thisNodeName] = new_intf_db