Exemple #1
0
    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)
Exemple #2
0
    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'))
Exemple #3
0
    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)
Exemple #4
0
    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))
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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))
Exemple #8
0
    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"
                )
            )
Exemple #9
0
    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)
Exemple #10
0
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'))
Exemple #11
0
    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))
Exemple #12
0
    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))
Exemple #13
0
    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))
Exemple #14
0
    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)
Exemple #15
0
 def update_func(json_obj, thrift_obj):
     json_obj["eventLogs"] = [
         utils.thrift_to_dict(e) for e in thrift_obj.eventLogs
     ]