diff --git a/check-snapshot-age b/check-snapshot-age index 664d2c5..31f32d9 100644 --- a/check-snapshot-age +++ b/check-snapshot-age @@ -3,32 +3,42 @@ import subprocess import re import time +import argparse -#_snapshots = open("zfs.txt","r").read() +# Argumente verarbeiten +parser = argparse.ArgumentParser(description="ZFS Snapshot Übersicht") +parser.add_argument("--filter", help="Nur bestimmte Datasets anzeigen (Regex möglich, z. B. 'rpool/ROOT')", type=str) +args = parser.parse_args() + +# Snapshots abrufen _snapshots = subprocess.check_output("/usr/sbin/zfs list -t snapshot -Hpo name,creation".split()) -LABELS=("frequent","hourly","daily","weekly","monthly","yearly","backup-zfs","bashclub-zfs") +LABELS = ("frequent", "hourly", "daily", "weekly", "monthly", "yearly", "backup-zfs", "bashclub-zfs") RE_LABELSEARCH = re.compile("|".join(LABELS)) _datasets = {} -for _datastore,_snapshot,_creation in re.findall("^([\w_./-]+)@([\w_.-]+)\t(\d+)",_snapshots.decode('utf-8'),re.M): + +# Snapshots parsen +for _datastore, _snapshot, _creation in re.findall(r"^([\w_./-]+)@([\w_.-]+)\t(\d+)", _snapshots.decode('utf-8'), re.M): + if args.filter and not re.search(args.filter, _datastore): + continue # Dataset entspricht nicht dem Filter + if _datastore not in _datasets: _datasets[_datastore] = {} _label = RE_LABELSEARCH.search(_snapshot) - if _label: - _label = _label.group(0) - else: - _label = "other" + _label = _label.group(0) if _label else "other" + if _label not in _datasets[_datastore]: _datasets[_datastore][_label] = [] - _datasets[_datastore][_label].append((_snapshot,int(_creation))) + _datasets[_datastore][_label].append((_snapshot, int(_creation))) +# Ergebnisse anzeigen for _datastore in _datasets.keys(): print(_datastore) - print("-"*40) + print("-" * 40) for _label in _datasets[_datastore].keys(): _data = _datasets[_datastore][_label] - _first = time.strftime("%d.%m.%Y %H:%M:%S",time.localtime(_data[0][1])) - _last = time.strftime("%d.%m.%Y %H:%M:%S",time.localtime(_data[-1][1])) + _first = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(_data[0][1])) + _last = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(_data[-1][1])) _count = len(_data) print(f" {_label} {_count}") print(f" {_first} {_data[0][0]}")