Improve device size reporting in the description
i.e. support 512GB SSDs, 1.5TB HDDs, etc Addresses issue #199
This commit is contained in:
parent
fc8f81b66d
commit
2c9e56e830
1 changed files with 30 additions and 9 deletions
|
|
@ -20,7 +20,7 @@ from wk.hw.smart import (
|
||||||
get_known_disk_attributes,
|
get_known_disk_attributes,
|
||||||
update_smart_details,
|
update_smart_details,
|
||||||
)
|
)
|
||||||
from wk.std import PLATFORM, bytes_to_string, color_string, strip_colors
|
from wk.std import PLATFORM, color_string, strip_colors
|
||||||
|
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
|
|
@ -39,6 +39,7 @@ class Disk:
|
||||||
attributes: dict[Any, dict] = field(init=False, default_factory=dict)
|
attributes: dict[Any, dict] = field(init=False, default_factory=dict)
|
||||||
bus: str = field(init=False)
|
bus: str = field(init=False)
|
||||||
children: list[dict] = field(init=False, default_factory=list)
|
children: list[dict] = field(init=False, default_factory=list)
|
||||||
|
description: str = field(init=False)
|
||||||
filesystem: str = field(init=False)
|
filesystem: str = field(init=False)
|
||||||
known_attributes: dict[Any, dict] = field(init=False, default_factory=dict)
|
known_attributes: dict[Any, dict] = field(init=False, default_factory=dict)
|
||||||
log_sec: int = field(init=False)
|
log_sec: int = field(init=False)
|
||||||
|
|
@ -59,6 +60,7 @@ class Disk:
|
||||||
def __post_init__(self) -> None:
|
def __post_init__(self) -> None:
|
||||||
self.path = pathlib.Path(self.path).resolve()
|
self.path = pathlib.Path(self.path).resolve()
|
||||||
self.update_details()
|
self.update_details()
|
||||||
|
self.set_description()
|
||||||
self.known_attributes = get_known_disk_attributes(self.model)
|
self.known_attributes = get_known_disk_attributes(self.model)
|
||||||
enable_smart(self)
|
enable_smart(self)
|
||||||
update_smart_details(self)
|
update_smart_details(self)
|
||||||
|
|
@ -88,14 +90,6 @@ class Disk:
|
||||||
present = True
|
present = True
|
||||||
return present
|
return present
|
||||||
|
|
||||||
@property
|
|
||||||
def description(self) -> str:
|
|
||||||
"""Get disk description from details."""
|
|
||||||
return (
|
|
||||||
f'{bytes_to_string(self.size, use_binary=False)}'
|
|
||||||
f' ({self.bus}) {self.model} {self.serial}'
|
|
||||||
)
|
|
||||||
|
|
||||||
def disable_disk_tests(self) -> None:
|
def disable_disk_tests(self) -> None:
|
||||||
"""Disable all tests."""
|
"""Disable all tests."""
|
||||||
LOG.warning('Disabling all tests for: %s', self.path)
|
LOG.warning('Disabling all tests for: %s', self.path)
|
||||||
|
|
@ -162,6 +156,33 @@ class Disk:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def set_description(self) -> None:
|
||||||
|
"""Set disk description from details."""
|
||||||
|
decimals = 1
|
||||||
|
suffix = ' '
|
||||||
|
|
||||||
|
# Set size_str (try binary scale first)
|
||||||
|
for scale in (1024, 1000):
|
||||||
|
size = float(self.size)
|
||||||
|
units = list('KMGTPEZY')
|
||||||
|
while units:
|
||||||
|
if abs(size) < scale:
|
||||||
|
break
|
||||||
|
size /= scale
|
||||||
|
suffix = units.pop(0)
|
||||||
|
size = ((size * 10) // 1) / 10
|
||||||
|
if size % 1 == 0:
|
||||||
|
# Found an exact whole number, drop the decimal
|
||||||
|
decimals = 0
|
||||||
|
break
|
||||||
|
if size % 1 == 0.5:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Done
|
||||||
|
self.description = (
|
||||||
|
f'{size:0.{decimals}f} {suffix}B ({self.bus}) {self.model} {self.serial}'
|
||||||
|
)
|
||||||
|
|
||||||
def update_details(self, skip_children=True) -> None:
|
def update_details(self, skip_children=True) -> None:
|
||||||
"""Update disk details using OS specific methods.
|
"""Update disk details using OS specific methods.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue