83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
from vacuumtube.config import config
|
|
from vacuumtube.prepare import borg_info_raw, readable_csize, csize, archive_num, last_archive_time, df_avail_readable, df_avail_bytes
|
|
from rich import box
|
|
from rich.console import Console
|
|
from rich.layout import Layout
|
|
from rich.padding import Padding
|
|
from rich.panel import Panel
|
|
from rich.progress import Progress, BarColumn
|
|
from rich.style import Style
|
|
|
|
|
|
def main():
|
|
emphasis = Style(color=config['color'] or '#d89961', bold=True)
|
|
|
|
flomp = f'''[{emphasis}]
|
|
.=--::
|
|
-***##- ::. ...
|
|
+**##*: =##*. =*****:
|
|
:******+::.. :##*: :******.
|
|
=*************+====-::+*****+
|
|
.+**=:-==+++++****************:
|
|
-***. .:--==+++++******+
|
|
=**+. .:-+#***-
|
|
:***= *****
|
|
-***- -#***-
|
|
.=+**=:. *****
|
|
.:-+++=-:. =#***=
|
|
.:-=*+=-:. :#****.
|
|
.:-=+++-::*****=
|
|
.:-=+****
|
|
.:.
|
|
'''
|
|
|
|
if borg_info_raw.returncode == 0:
|
|
online = Padding('[#82bfe0 bold]◉[/#82bfe0 bold] Host online', (0, 2))
|
|
else:
|
|
online = Padding('[#34454f bold]◌[/#34454f bold] Host offline', (0, 2))
|
|
|
|
# it's hacky, but should work as expected
|
|
used = Progress(
|
|
'[progress.description]{task.description}',
|
|
# space used
|
|
f'[{emphasis}]{readable_csize}[/{emphasis}]',
|
|
BarColumn(complete_style=emphasis, finished_style="#d34141"),
|
|
# space available
|
|
f'[{emphasis}]{df_avail_readable}[/{emphasis}]',
|
|
'[progress.percentage]{task.percentage:>3.0f}%'
|
|
)
|
|
used.add_task('Used:', completed=csize, total=df_avail_bytes)
|
|
|
|
disk_usage = Panel(used, box=box.SQUARE, border_style=emphasis)
|
|
|
|
avail_backups = Panel(f"Available: [{emphasis}]{archive_num}[/{emphasis}] backups. Last backup from: [{emphasis}]{last_archive_time}[/{emphasis}]", box=box.SQUARE, border_style=emphasis)
|
|
|
|
if config['ascii_art']:
|
|
console = Console(width=85, height=18)
|
|
else:
|
|
console = Console(width=70, height=8)
|
|
|
|
layout = Layout()
|
|
layout.split_row(
|
|
Layout(flomp, name="left"),
|
|
Layout(name="right")
|
|
)
|
|
|
|
layout['right'].split_column(
|
|
Layout(online, size=1),
|
|
Layout(disk_usage, size=3),
|
|
Layout(avail_backups, size=4)
|
|
)
|
|
|
|
layout['left'].visible = config['ascii_art']
|
|
|
|
# actually print the thing
|
|
console.print(Panel.fit(
|
|
layout,
|
|
box=box.DOUBLE, border_style=emphasis
|
|
))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|