From ca88d352e2a62d9723e7360991280f24d324a38d Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Tue, 16 May 2023 20:55:20 -0300 Subject: [PATCH] Create makefile --- danix/danixfs.py | 17 ++++++++++++++--- danix/db/models.py | 38 ++++++++++++++++++++++++-------------- danix/main.py | 6 ++++-- danix/makefile | 32 ++++++++++++++++++++++++++++++++ danix/requirements.txt | 1 + 5 files changed, 75 insertions(+), 19 deletions(-) mode change 100644 => 100755 danix/main.py create mode 100644 danix/makefile diff --git a/danix/danixfs.py b/danix/danixfs.py index ad19198..0b36295 100644 --- a/danix/danixfs.py +++ b/danix/danixfs.py @@ -1,4 +1,5 @@ import uuid, os, settings, app +from sh import du from settings import MAIN_REPO from time import sleep @@ -12,11 +13,21 @@ class Danix(): def rm(filesystem_name): return os.system(f"rm -r {MAIN_REPO}{filesystem_name}") + @staticmethod + def get_size(environment_name, snapshot_name): + try: + if snapshot_name is None: + return du(f'{MAIN_REPO}{environment_name}/','-ch').split('\n')[-2].split('\t')[0] + else: + return du(f'{MAIN_REPO}.snapshots/{snapshot_name}/{environment_name}.tar.gz','-ch').split('\n')[-2].split('\t')[0] + except Exception: + return "0M" + @staticmethod def make_snapshot(filesystem_name, snapshot_name): - os.system(f"mkdir {MAIN_REPO}.snapshots/{snapshot_name}") - resp = os.system(f"tar -czf {MAIN_REPO}.snapshots/{snapshot_name}/{filesystem_name}.tar.gz {MAIN_REPO}{filesystem_name}/") + os.system(f"mkdir {MAIN_REPO}.snapshots/{snapshot_name} >/dev/null 2>&1") + resp = os.system(f"tar czf {MAIN_REPO}.snapshots/{snapshot_name}/{filesystem_name}.tar.gz {MAIN_REPO}{filesystem_name}/ >/dev/null 2>&1") return resp @@ -24,7 +35,7 @@ class Danix(): def back_snapshot(filesystem_name, snapshot_name): os.system(f"rm -r {MAIN_REPO}{filesystem_name} > /dev/null") - resp1 = os.system(f"tar -xf {MAIN_REPO}.snapshots/{snapshot_name}/{filesystem_name}.tar.gz -C {MAIN_REPO}") + resp1 = os.system(f"tar -xf {MAIN_REPO}.snapshots/{snapshot_name}/{filesystem_name}.tar.gz -C {MAIN_REPO} >/dev/null 2>&1") resp2 = os.system(f"mv {MAIN_REPO}/opt/danix/{filesystem_name} {MAIN_REPO}") resp3 = os.system(f"rm -r {MAIN_REPO}opt") diff --git a/danix/db/models.py b/danix/db/models.py index e41eeb3..c0480b6 100644 --- a/danix/db/models.py +++ b/danix/db/models.py @@ -18,7 +18,7 @@ class Environment(models.Model): environment = Environment.objects.filter(filesystem_name=filesystem_name) if environment.count() == 0: - print("Environment does exist!") + print("Environment does not exist!") exit(1) else: if environment.first().status: @@ -33,7 +33,7 @@ class Environment(models.Model): exit(1) except ValidationError as error: - print("Environment doenst exist!") + print("Environment doenst not exist!") exit(1) @staticmethod @@ -98,9 +98,9 @@ class Environment(models.Model): def list_environments(): environments = Environment.objects.all() - print("============================================================================================================================================") - print("| ENVIRONMENT NAME | TEMPLATE | CREATED | SUBSYSTEM NAME | IMAGE | STATUS | SIZE |") - print("=============================================================================================================================================") + print("===============================================================================================================================================") + print("| ENVIRONMENT NAME | TEMPLATE | CREATED | SUBSYSTEM NAME | IMAGE | STATUS | SIZE |") + print("|=============================================================================================================================================|") if environments.count() > 0: for environment in environments: @@ -112,9 +112,10 @@ class Environment(models.Model): repeat_template = (6-len(template)) * ' ' - print(f" {name[0:11]}{repeat} {template}{repeat_template} {environment.created} {environment.filesystem_name} Alpine {status_icon} 211 MB") + size = Danix.get_size(environment.filesystem_name, None) + print(f"| {name[0:11]}{repeat} {template}{repeat_template} {environment.created} {environment.filesystem_name} Alpine {status_icon} {size}B |") - print("=============================================================================================================================================") + print("===============================================================================================================================================") class Meta: @@ -195,12 +196,17 @@ class Snapshot(models.Model): snapshot_name = uuid.uuid4() + print('Wait a minute! Taking snapshot') snapshot = Snapshot.objects.create(snapshot_name=snapshot_name,environment_id=environment).save() resp = Danix.make_snapshot(subsystem_name, snapshot_name) if resp == 0: print("Snapshot created successfully") - print(f"Snapshot name {snapshot_name}") + print(f"Snapshot name {snapshot_name}\n") + print(f"======================================") + print(f"Environment size: {Danix.get_size(subsystem_name, None)}B") + print(f"Snapshot size: {Danix.get_size(subsystem_name, snapshot_name)}B") + print(f"======================================") exit(0) else: @@ -217,9 +223,9 @@ class Snapshot(models.Model): snapshots = Snapshot.objects.all() - print("==========================================================================================================================================") - print("| SNAPSHOT NAME | ENVIRONMENT NAME | CREATED | LAST SNAPSHOT | SIZE |") - print("==========================================================================================================================================") + print("===========================================================================================================================================") + print("| SNAPSHOT NAME | ENVIRONMENT NAME | CREATED | LAST SNAPSHOT | SIZE |") + print("|==========================================================================================================================================|") if snapshots.count() > 0: for snapshot in snapshots: @@ -228,13 +234,17 @@ class Snapshot(models.Model): lastsnapshot_icon = "🟢 Yes" if snapshot.last else "🟠 No " if snapshot.environment_id: + + environment_name = Environment.objects.filter(id=snapshot.environment_id.id).first().filesystem_name + size = Danix.get_size(environment_name, name) else: repeated = 14*' ' environment_name = f'Environment Removed 🔴{repeated}' - - print(f" {name} {environment_name} {snapshot.created} {lastsnapshot_icon} 73,5 MB ") - print("==========================================================================================================================================") + size = "---" + + print(f"| {name} {environment_name} {snapshot.created} {lastsnapshot_icon} {size}B |") + print("===========================================================================================================================================") class Meta: db_table = "snapshot" diff --git a/danix/main.py b/danix/main.py old mode 100644 new mode 100755 index 2677638..92de797 --- a/danix/main.py +++ b/danix/main.py @@ -1,3 +1,4 @@ +#!./venv/bin/python import argparse, os import app from utils import is_root @@ -55,7 +56,8 @@ if args.rm: for environment in environments: Environment.rm_environment(environment) - exit(0) + + exit(0) print("[Danix]: System abort!") if args.stop: @@ -90,6 +92,6 @@ if args.snapshotremove: for snapshot in snapshots: Snapshot.rm_snapshot(snapshot) - exit(0) + exit(0) print("[Danix]: System abort!") \ No newline at end of file diff --git a/danix/makefile b/danix/makefile new file mode 100644 index 0000000..7a9cfa0 --- /dev/null +++ b/danix/makefile @@ -0,0 +1,32 @@ +PIP=pip +PYTHON=python +SNAPSHOT_LIMIT=3 +DB_NAME=db.sqlite3 +MAIN_REPO=/opt/danix/ +ROOT_FS=danixfs.tar.gz +DANIX_PATH=$(shell pwd) +REPO_NAME=https://silvavinicius.com.br/danixfs/ + +config: + + @mkdir $(MAIN_REPO) > /dev/null 2>&1 + @mkdir $(MAIN_REPO)/.snapshot > /dev/null 2>&1 + + @echo REPO_NAME =$(REPO_NAME) >> $(DANIX_PATH)/.env + @echo MAIN_REPO =$(MAIN_REPO) >> $(DANIX_PATH)/.env + @echo ROOT_FS =$(ROOT_FS) >> $(DANIX_PATH)/.env + @echo SNAPSHOT_LIMIT =$(SNAPSHOT_LIMIT) >> $(DANIX_PATH)/.env + + @$(PIP) install -r $(DANIX_PATH)/requirements.txt > /dev/null 2>&1 + + $(PYTHON) $(DANIX_PATH)/manage.py migrate + + alias danix="sudo main.py" + + echo Danix configured successfully! Please run danix -h! + +clean: + + @rm -r $(MAIN_REPO) > /dev/null 2>&1 + @rm $(DANIX_PATH)/$(DB_NAME) > /dev/null 2>&1 + echo Danix cleaned! \ No newline at end of file diff --git a/danix/requirements.txt b/danix/requirements.txt index 52eb013..250ba7f 100644 --- a/danix/requirements.txt +++ b/danix/requirements.txt @@ -1,3 +1,4 @@ django argparse django-environ +sh \ No newline at end of file