예제 #1
0
 def to_columns_blob(self, file: BlobListing) -> Sequence[str]:
     date = time.strftime(TIME_FORMAT, time.localtime(file.modification_time))
     if self.human_readable:
         size = format_size(file.size).rstrip("B")
     else:
         size = str(file.size)
     name = self.painter.paint(str(file.uri), get_file_type(file))
     return ["", f"{size}", f"{date}", f"{name}"]
예제 #2
0
def _format_node_pools(node_pools: Iterable[_NodePool],
                       prefix: str) -> Iterator[str]:
    is_scalable = _is_scalable(node_pools)
    has_preemptible = _has_preemptible(node_pools)
    has_tpu = _has_tpu(node_pools)
    has_idle = _has_idle(node_pools)

    headers = ["Machine", "CPU", "Memory"]
    if has_preemptible:
        headers.append("Preemptible")
    headers.append("GPU")
    if has_tpu:
        headers.append("TPU")
    if is_scalable:
        headers.append("Min")
        headers.append("Max")
    else:
        headers.append("Size")
    if has_idle:
        headers.append("Idle")

    rows = [headers]
    for node_pool in node_pools:
        row = [
            node_pool.machine_type,
            str(node_pool.available_cpu),
            format_size(node_pool.available_memory_mb * 1024**2),
        ]
        if has_preemptible:
            row.append("√" if node_pool.is_preemptible else "×")
        row.append(_gpu(node_pool))
        if has_tpu:
            row.append("√" if node_pool.is_tpu_enabled else "×")
        if is_scalable:
            row.append(str(node_pool.min_size))
        row.append(str(node_pool.max_size))
        if has_idle:
            row.append(str(node_pool.idle_size))
        rows.append(row)

    aligns = [Align.LEFT, Align.RIGHT, Align.RIGHT]
    if has_preemptible:
        aligns.append(Align.CENTER)
    aligns.append(Align.RIGHT)
    if has_tpu:
        aligns.append(Align.CENTER)
    aligns.append(Align.RIGHT)
    if is_scalable:
        aligns.append(Align.RIGHT)
    if has_idle:
        aligns.append(Align.RIGHT)

    for line in table(rows=rows, aligns=aligns):
        yield prefix + line
예제 #3
0
 def _disk_to_table_row(self, disk: Disk) -> Sequence[str]:
     storage_str = utils.format_size(disk.storage)
     line = [
         disk.id, storage_str,
         self._uri_formatter(disk.uri), disk.status.value
     ]
     if self._long_format:
         line += [
             format_datetime(disk.created_at),
             format_datetime(disk.last_usage)
         ]
     return line
예제 #4
0
    def _columns_for_file(self, file: FileStatus) -> Sequence[str]:

        type = self.file_types_mapping[file.type]
        permission = self.permissions_mapping[file.permission]

        date = time.strftime(TIME_FORMAT, time.localtime(file.modification_time))

        if self.human_readable:
            size = format_size(file.size).rstrip("B")
        else:
            size = str(file.size)

        name = self.painter.paint(file.name, file.type)

        return [f"{type}{permission}", f"{size}", f"{date}", f"{name}"]
예제 #5
0
def _format_presets(
    presets: Mapping[str, Preset],
    available_jobs_counts: Optional[Mapping[str, int]],
    prefix: str,
) -> Iterator[str]:
    has_tpu = False
    for preset in presets.values():
        if preset.tpu_type:
            has_tpu = True
            break

    rows = []
    headers = ["Name", "#CPU", "Memory", "Preemptible", "GPU"]
    if available_jobs_counts:
        headers.append("Jobs Available")
    # TODO: support ANSI styles in headers
    # headers = [style(name, bold=True) for name in headers]
    rows.append(headers)
    if has_tpu:
        headers.append("TPU")

    for name, preset in presets.items():
        gpu = ""
        if preset.gpu:
            gpu = f"{preset.gpu} x {preset.gpu_model}"
        row = [
            name,
            str(preset.cpu),
            format_size(preset.memory_mb * 1024**2),
            "√" if preset.is_preemptible else "×",
            gpu,
        ]
        if has_tpu:
            tpu = (f"{preset.tpu_type}/{preset.tpu_software_version}"
                   if preset.tpu_type else "")
            row.append(tpu)
        if available_jobs_counts:
            if name in available_jobs_counts:
                row.append(str(available_jobs_counts[name]))
            else:
                row.append("")
        rows.append(row)
    aligns = [Align.LEFT, Align.RIGHT, Align.RIGHT, Align.CENTER, Align.LEFT]
    if available_jobs_counts:
        aligns.append(Align.RIGHT)
    for line in table(rows=rows, aligns=aligns):
        yield prefix + line
예제 #6
0
    def __call__(self, resources: Resources) -> str:
        lines = list()
        lines.append("Memory: " + format_size(resources.memory_mb * 1024**2))
        lines.append(f"CPU: {resources.cpu:0.1f}")
        if resources.gpu:
            lines.append(f"GPU: {resources.gpu:0.1f} x {resources.gpu_model}")

        if resources.tpu_type:
            lines.append(
                f"TPU: {resources.tpu_type}/{resources.tpu_software_version}")

        additional = list()
        if resources.shm:
            additional.append("Extended SHM space")

        if additional:
            lines.append(f'Additional: {",".join(additional)}')

        indent = "  "
        return "Resources:\n" + indent + f"\n{indent}".join(lines)
예제 #7
0
    def _format_presets(self,
                        presets: Dict[str, Preset],
                        indent: str = "    ") -> str:
        if platform == "win32":
            yes, no = "Yes", "No"
        else:
            yes, no = "✔︎", "✖︎"
        has_tpu = False
        for preset in presets.values():
            if preset.tpu_type:
                has_tpu = True
                break

        table = []
        headers = ["Name", "#CPU", "Memory", "Preemptible", "GPU"]
        if has_tpu:
            headers.append("TPU")

        for name, preset in presets.items():
            gpu = ""
            if preset.gpu:
                gpu = f"{preset.gpu} x {preset.gpu_model}"
            row = [
                name,
                preset.cpu,
                format_size(preset.memory_mb * 1024**2),
                yes if preset.is_preemptible else no,
                gpu,
            ]
            if preset.tpu_type:
                tpu = f"{preset.tpu_type}/{preset.tpu_software_version}"
                row.append(tpu)
            table.append(row)
        return tabulate(  # type: ignore
            table,
            headers=headers,
            tablefmt="plain",
            colalign=("left", "right", "right", "center"),
        )
예제 #8
0
    def __call__(self, resources: Resources) -> str:
        lines = []

        def add(descr: str, value: str) -> None:
            lines.append(f"{bold(descr)}: {value}")

        add("Memory", format_size(resources.memory_mb * 1024**2))
        add("CPU", f"{resources.cpu:0.1f}")
        if resources.gpu:
            add("GPU", f"{resources.gpu:0.1f} x {resources.gpu_model}")

        if resources.tpu_type:
            add("TPU",
                f"{resources.tpu_type}/{resources.tpu_software_version}")

        additional = []
        if resources.shm:
            additional.append("Extended SHM space")

        if additional:
            add("Additional", ",".join(additional))

        indent = "  "
        return f"{bold('Resources')}:\n" + indent + f"\n{indent}".join(lines)
예제 #9
0
 def fmt_size(self, size: int) -> str:
     return format_size(size)