start introducing modules
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class Time:
|
||||
@staticmethod
|
||||
def _get_date_format() -> str:
|
||||
"""date format as used by zpool status
|
||||
|
||||
%a: day of week, short version
|
||||
%b: month, short version
|
||||
%d: day of month, zero-padded
|
||||
%H, %M, %S: hour, minute, second, zero-padded
|
||||
%Y: year
|
||||
"""
|
||||
return "%a %b %d %H:%M:%S %Y"
|
||||
|
||||
@classmethod
|
||||
def _extract_datetime_segment(cls, line_with_datetime: str) -> str:
|
||||
"""From the line in `zpool status` that includes the date and time, extract only the part with date and time."""
|
||||
return line_with_datetime.split(" errors on ")[-1]
|
||||
|
||||
@classmethod
|
||||
def _get_line_with_datetime_from_status_output(cls, output: str) -> str:
|
||||
"""From `zpool status`, extract the line that contains the date and time of the last scrub."""
|
||||
lines = output.split("\n")
|
||||
for line in lines:
|
||||
if line.startswith(" scan: scrub repaired"):
|
||||
return line.strip()
|
||||
else:
|
||||
raise ValueError("Could not find the correct line")
|
||||
|
||||
@classmethod
|
||||
def get_last_scrub_from_status_output(cls, output: str) -> datetime:
|
||||
"""Given the output of `zfs status`, return the `datetime` object of the last scrub."""
|
||||
line_with_datetime = cls._get_line_with_datetime_from_status_output(output)
|
||||
date_str = cls._extract_datetime_segment(line_with_datetime)
|
||||
return datetime.strptime(date_str, cls._get_date_format())
|
||||
Reference in New Issue
Block a user