def links_to_dict(self, links): def _update(links_dict, links): links_dict.update( { "interfaceDetails": { k: self.interface_details_to_dict(v) for k, v in links.interfaceDetails.items() } } ) del links_dict["thisNodeName"] return utils.thrift_to_dict(links, _update)
def run(self, json): openr_version = self.client.get_openr_version() if json: version = utils.thrift_to_dict(openr_version) print(utils.json_dumps(version)) else: rows = [] rows.append(['Current Version', ':', openr_version.version]) rows.append(['Lowest Supported Version', ':', openr_version.lowestSupportedVersion]) print(printing.render_horizontal_table( rows, column_labels=[], tablefmt='plain'))
def interface_info_to_dict(self, interface_info): def _update(interface_info_dict, interface_info): interface_info_dict.update({ 'v4Addrs': [ utils.sprint_addr(v4Addr.addr) for v4Addr in interface_info.v4Addrs ], 'v6LinkLocalAddrs': [ utils.sprint_addr(v6Addr.addr) for v6Addr in interface_info.v6LinkLocalAddrs ] }) return utils.thrift_to_dict(interface_info, _update)
def print_kvstore_keys( self, resp: kv_store_types.Publication, ttl: bool, json: bool ) -> None: """ print keys from raw publication from KvStore""" # Force set value to None for value in resp.keyVals.values(): value.value = None # Export in json format if enabled if json: data = {} for k, v in resp.keyVals.items(): data[k] = utils.thrift_to_dict(v) print(utils.json_dumps(data)) return rows = [] for key, value in sorted(resp.keyVals.items(), key=lambda x: x[0]): hash_offset = "+" if value.hash > 0 else "" if ttl: if value.ttl != Consts.CONST_TTL_INF: ttlStr = str(datetime.timedelta(milliseconds=value.ttl)) else: ttlStr = "Inf" rows.append( [ key, value.originatorId, value.version, "{}{:x}".format(hash_offset, value.hash), "{} - {}".format(ttlStr, value.ttlVersion), ] ) else: rows.append( [ key, value.originatorId, value.version, "{}{:x}".format(hash_offset, value.hash), ] ) caption = "Available keys in KvStore" column_labels = ["Key", "Originator", "Ver", "Hash"] if ttl: column_labels = column_labels + ["TTL - Ver"] print(printing.render_horizontal_table(rows, column_labels, caption))
def print_log_data(self, resp, json_opt): """ print the log data""" if json_opt: data = {} data["eventLogs"] = [utils.thrift_to_dict(e) for e in resp] print(utils.json_dumps(data)) else: log_samples = [] for event_log in resp: log_samples.extend([json.loads(lg) for lg in event_log.samples]) for log_sample in log_samples: self.print_log_sample(log_sample)
def interface_info_to_dict(self, interface_info): def _update(interface_info_dict, interface_info): interface_info_dict.update({ # TO BE DEPRECATED SOON 'v4Addrs': [ipnetwork.sprint_addr(v4Addr.addr) for v4Addr in interface_info.v4Addrs], # TO BE DEPRECATED SOON 'v6LinkLocalAddrs': [ipnetwork.sprint_addr(v6Addr.addr) for v6Addr in interface_info.v6LinkLocalAddrs], 'networks': [ipnetwork.sprint_prefix(prefix) for prefix in interface_info.networks], }) return utils.thrift_to_dict(interface_info, _update)
def print_kvstore_keys( self, resp: kv_store_types.Publication, ttl: bool, json: bool ) -> None: """ print keys from raw publication from KvStore""" # Export in json format if enabled if json: # Force set value to None for value in resp.keyVals.values(): value.value = None data = {} for k, v in resp.keyVals.items(): data[k] = utils.thrift_to_dict(v) print(utils.json_dumps(data)) return rows = [] db_bytes = 0 for key, value in sorted(resp.keyVals.items(), key=lambda x: x[0]): # 32 bytes comes from version, ttlVersion, ttl and hash which are i64 kv_size = 32 + len(key) + len(value.originatorId) + len(value.value) db_bytes += kv_size hash_offset = "+" if value.hash > 0 else "" row = [ key, value.originatorId, value.version, f"{hash_offset}{value.hash:x}", printing.sprint_bytes(kv_size), ] if ttl: ttlStr = ( "Inf" if value.ttl == Consts.CONST_TTL_INF else str(datetime.timedelta(milliseconds=value.ttl)) ) row.append(f"{ttlStr} - {value.ttlVersion}") rows.append(row) db_bytes_str = printing.sprint_bytes(db_bytes) caption = f"KvStore Data - {len(resp.keyVals)} keys, {db_bytes_str}" column_labels = ["Key", "Originator", "Ver", "Hash", "Size"] if ttl: column_labels = column_labels + ["TTL - Ver"] print(printing.render_horizontal_table(rows, column_labels, caption))
def _run(self, client: OpenrCtrl.Client, json: bool) -> None: openr_version = client.getOpenrVersion() if json: version = utils.thrift_to_dict(openr_version) print(utils.json_dumps(version)) else: rows = [] rows.append(["Current Version", ":", openr_version.version]) rows.append( ["Lowest Supported Version", ":", openr_version.lowestSupportedVersion] ) print( printing.render_horizontal_table( rows, column_labels=[], tablefmt="plain" ) )
def print_log_data(self, resp, json_opt): ''' print the log data''' def update_func(json_obj, thrift_obj): json_obj['eventLogs'] = \ [utils.thrift_to_dict(e) for e in thrift_obj.eventLogs] if json_opt: data = utils.thrift_to_dict(resp, update_func) print(utils.json_dumps(data)) return log_samples = [] for event_log in resp.eventLogs: log_samples.extend([json.loads(lg) for lg in event_log.samples]) for log_sample in log_samples: print_log_sample(log_sample)
def get_openr_version_cmd(client, json): ''' Get OpenR version command ''' openr_version = client.get_openr_version() if json: version = utils.thrift_to_dict(openr_version) print(utils.json_dumps(version)) else: rows = [] columns = ['', '', ''] rows.append(['Current version', ':', openr_version.version]) rows.append([ 'Lowest supported version', ':', openr_version.lowestSupportedVersion ]) print(printing.render_horizontal_table(rows, columns, tablefmt='plain'))
def print_kvstore_values(self, resp, json_fmt): """ print values from raw publication from KvStore :param resp kv_store_types.Publication: pub from kv store """ # Export in json format if enabled if json_fmt: data = {} for k, v in resp.keyVals.items(): data[k] = utils.thrift_to_dict(v) print(utils.json_dumps(data)) return rows = [] for key, value in sorted(resp.keyVals.items(), key=lambda x: x[0]): val = self.deserialize_kvstore_publication(key, value) if not val: if all( isinstance(c, str) and c in string.printable for c in value.value ): val = value.value else: val = hexdump.hexdump(value.value, "return") ttl = "INF" if value.ttl == Consts.CONST_TTL_INF else value.ttl rows.append( [ "key: {}\n version: {}\n originatorId: {}\n " "ttl: {}\n ttlVersion: {}\n value:\n {}".format( key, value.version, value.originatorId, ttl, value.ttlVersion, val, ) ] ) caption = "Dump key-value pairs in KvStore" print(printing.render_vertical_table(rows, caption=caption))
def print_kvstore_keys(self, resp, ttl, json_fmt): ''' print keys from raw publication from KvStore :param resp kv_store_types.Publication: pub from kv store :param ttl bool: Show ttl value and version if True ''' # Force set value to None for value in resp.keyVals.values(): value.value = None # Export in json format if enabled if json_fmt: data = {} for k, v in resp.keyVals.items(): data[k] = utils.thrift_to_dict(v) print(utils.json_dumps(data)) return rows = [] for key, value in sorted(resp.keyVals.items(), key=lambda x: x[0]): if ttl: if value.ttl != Consts.CONST_TTL_INF: ttlStr = str(datetime.timedelta(milliseconds=value.ttl)) else: ttlStr = "Inf" rows.append([ key, value.originatorId, value.version, value.hash, ttlStr, value.ttlVersion ]) else: rows.append( [key, value.originatorId, value.version, value.hash]) caption = "Available keys in KvStore" column_labels = ["Key", "OriginatorId", "Version", "Hash"] if ttl: column_labels = column_labels + ["TTL (HH:MM:SS)", "TTL Version"] print(printing.render_horizontal_table(rows, column_labels, caption))
def run(self, json): info = self.client.get_build_info() if json: info = utils.thrift_to_dict(info) print(utils.json_dumps(info)) else: print("Build Information") print(" Built by: {}".format(info.buildUser)) print(" Built on: {}".format(info.buildTime)) print(" Built at: {}".format(info.buildHost)) print(" Build path: {}".format(info.buildPath)) print(" Package Name: {}".format(info.buildPackageName)) print(" Package Version: {}".format(info.buildPackageVersion)) print(" Package Release: {}".format(info.buildPackageRelease)) print(" Build Revision: {}".format(info.buildRevision)) print(" Build Upstream Revision: {}".format( info.buildUpstreamRevision)) print(" Build Platform: {}".format(info.buildPlatform)) print(" Build Rule: {} ({}, {}, {})".format( info.buildRule, info.buildType, info.buildTool, info.buildMode))
def interface_details_to_dict(self, interface_details): def _update(interface_details_dict, interface_details): interface_details_dict.update( {"info": self.interface_info_to_dict(interface_details.info)}) return utils.thrift_to_dict(interface_details, _update)
def update_func(json_obj, thrift_obj): json_obj["eventLogs"] = [ utils.thrift_to_dict(e) for e in thrift_obj.eventLogs ]