diff --git a/docs/services/lxc208-manage/alert/formatters.py b/docs/services/lxc208-manage/alert/formatters.py new file mode 100644 index 0000000..7895176 --- /dev/null +++ b/docs/services/lxc208-manage/alert/formatters.py @@ -0,0 +1,78 @@ +from alerts.utils import plural_sectors + + +def temperature(device, value=None): + if value is not None: + return f"\u26c3 {device:<8} {value}\u00b0C" + return f"\u26c3 {device:<8}" + + +def bad_blocks(device, value=None): + if value is not None: + return f"\u26c3 {device:<8} {value} {plural_sectors(value)}" + return f"\u26c3 {device:<8}" + + +def smart(device, value=None): + return f"\u26c3 {device:<8}" + + +def read_errors(device, value=None): + if value is not None: + return f"\u26c3 {device:<8} {value}" + return f"\u26c3 {device:<8}" + + +def zfs_pool(device, value=None): + return f"\U0001F3DB \u041e\u043b\u0438\u043c\u043f ({device})" + + +def backup_outdated(device, value=None): + return f"\U0001F4E6 {device:<8}" + + +def backup_success(info): + lines = [] + for b in info.get("backups", []): + lines.append(f"\U0001F4E6 {b['backup_id']}") + lines.append(f"\U0001F5C3 {b['size']}") + if b.get("duration"): + lines.append(f"\u23F1 {b['duration']}") + lines.append("") + + lines.append(f"\u23F0 {info.get('time', 'unknown')}") + if info.get("total_size"): + lines.append(f"\U0001F5C3 \u041e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440: {info['total_size']}") + + return "\n".join(lines) + + +def backup_failed(info): + lines = [] + for b in info.get("backups", []): + icon = "\u2705" if b["status"] == "ok" else "\u274C" + lines.append(f"{icon} {b['backup_id']}") + lines.append(f"\U0001F5C3 {b['size']}") + lines.append("") + + lines.append(f"\u23F0 {info.get('time', 'unknown')}") + if info.get("total_size"): + lines.append(f"\U0001F5C3 \u041e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440: {info['total_size']}") + + return "\n".join(lines) + + +FORMATTERS = { + "temperature": temperature, + "bad_blocks": bad_blocks, + "smart": smart, + "read_errors": read_errors, + "zfs_pool": zfs_pool, + "backup_outdated": backup_outdated, + "backup_success": backup_success, + "backup_failed": backup_failed, +} + + +def get_formatter(name): + return FORMATTERS.get(name) \ No newline at end of file