icinga2-checks/checker/humanfriendly.py

25 lines
807 B
Python

import re
import humanfriendly
SYSTEMCTL_TIMESPAN_RE = re.compile(r'([0-9]+((\s[a-z]*)|([a-z]+)))')
def parse_systemctl_time_delta(time_str: str):
"""
https://humanfriendly.readthedocs.io/en/latest/api.html?highlight=parse_timespan#humanfriendly.parse_timespan
"""
time_str = time_str.replace(' left', '').replace(' ago', '')
spans = []
for part in re.findall(SYSTEMCTL_TIMESPAN_RE, time_str):
delta = part[0]
if 'months' in delta:
# humanfriendly does not support "months" so we convert it to weeks
num = int(delta.split(' ')[0])
delta = f'{num * 4} weeks'
try:
spans.append(humanfriendly.parse_timespan(delta))
except humanfriendly.InvalidTimespan as e:
return e
return sum(spans)