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)
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 "")
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), )
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)
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, )
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)
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)
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))
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