mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2025-01-18 09:05:15 +01:00
Add status file for migrations failure
This commit is contained in:
parent
40f753162f
commit
52a6e9ae59
@ -79,6 +79,7 @@ class Helpers:
|
|||||||
|
|
||||||
self.translation = Translation(self)
|
self.translation = Translation(self)
|
||||||
self.update_available = False
|
self.update_available = False
|
||||||
|
self.migration_notifications = []
|
||||||
self.ignored_names = ["crafty_managed.txt", "db_stats"]
|
self.ignored_names = ["crafty_managed.txt", "db_stats"]
|
||||||
self.crafty_starting = False
|
self.crafty_starting = False
|
||||||
self.minimum_password_length = 8
|
self.minimum_password_length = 8
|
||||||
@ -619,6 +620,7 @@ class Helpers:
|
|||||||
data = []
|
data = []
|
||||||
response = requests.get("https://craftycontrol.com/notify", timeout=2)
|
response = requests.get("https://craftycontrol.com/notify", timeout=2)
|
||||||
data = json.loads(response.content)
|
data = json.loads(response.content)
|
||||||
|
data.extend(self.migration_notifications)
|
||||||
if self.update_available:
|
if self.update_available:
|
||||||
data.append(self.update_available)
|
data.append(self.update_available)
|
||||||
return data
|
return data
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
import uuid
|
import uuid
|
||||||
import peewee
|
import peewee
|
||||||
@ -166,10 +167,15 @@ def migrate(migrator: Migrator, database, **kwargs):
|
|||||||
valid_backups = [
|
valid_backups = [
|
||||||
backup for backup in all_backups if is_valid_entry(backup, all_servers)
|
backup for backup in all_backups if is_valid_entry(backup, all_servers)
|
||||||
]
|
]
|
||||||
|
if len(valid_backups) < len(all_backups):
|
||||||
|
backup_migration_status = False
|
||||||
|
print("Orphan backup found")
|
||||||
Console.info("Cleaning up orphan schedules for all servers")
|
Console.info("Cleaning up orphan schedules for all servers")
|
||||||
valid_schedules = [
|
valid_schedules = [
|
||||||
schedule for schedule in all_schedules if is_valid_entry(schedule, all_servers)
|
schedule for schedule in all_schedules if is_valid_entry(schedule, all_servers)
|
||||||
]
|
]
|
||||||
|
if len(valid_schedules) > len(all_schedules):
|
||||||
|
schedule_migration_status = False
|
||||||
# Copy data from the existing backups table to the new one
|
# Copy data from the existing backups table to the new one
|
||||||
for backup in valid_backups:
|
for backup in valid_backups:
|
||||||
Console.info(f"Trying to get server for backup migration {backup.server_id}")
|
Console.info(f"Trying to get server for backup migration {backup.server_id}")
|
||||||
@ -266,6 +272,22 @@ def migrate(migrator: Migrator, database, **kwargs):
|
|||||||
# Rename the new table to backups
|
# Rename the new table to backups
|
||||||
migrator.rename_table("new_schedules", "schedules")
|
migrator.rename_table("new_schedules", "schedules")
|
||||||
|
|
||||||
|
with open("status/20240308_multi-backup.json", "w", encoding="utf-8") as file:
|
||||||
|
file.write(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"backup_migration": {
|
||||||
|
"status": backup_migration_status,
|
||||||
|
"pid": uuid.uuid4(),
|
||||||
|
},
|
||||||
|
"schedule_migration": {
|
||||||
|
"status": schedule_migration_status,
|
||||||
|
"pid": uuid.uuid4(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def rollback(migrator: Migrator, database, **kwargs):
|
def rollback(migrator: Migrator, database, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
22
main.py
22
main.py
@ -115,6 +115,23 @@ def controller_setup():
|
|||||||
controller.clear_support_status()
|
controller.clear_support_status()
|
||||||
|
|
||||||
|
|
||||||
|
def get_migration_notifications():
|
||||||
|
migration_notifications = []
|
||||||
|
for file in os.listdir(
|
||||||
|
os.path.join(APPLICATION_PATH, "app", "migrations", "status")
|
||||||
|
):
|
||||||
|
if os.path.isfile(file):
|
||||||
|
with open(
|
||||||
|
os.path.join(APPLICATION_PATH, "app", "migrations", "status", file),
|
||||||
|
encoding="utf-8",
|
||||||
|
) as status_file:
|
||||||
|
status_json = json.load(status_file)
|
||||||
|
for item in status_json:
|
||||||
|
if not status_json[item].get("status"):
|
||||||
|
migration_notifications.append(item)
|
||||||
|
return migration_notifications
|
||||||
|
|
||||||
|
|
||||||
def tasks_starter():
|
def tasks_starter():
|
||||||
"""
|
"""
|
||||||
Method starts stats recording, app scheduler, and
|
Method starts stats recording, app scheduler, and
|
||||||
@ -350,6 +367,9 @@ if __name__ == "__main__":
|
|||||||
helper.db_path, pragmas={"journal_mode": "wal", "cache_size": -1024 * 10}
|
helper.db_path, pragmas={"journal_mode": "wal", "cache_size": -1024 * 10}
|
||||||
)
|
)
|
||||||
database_proxy.initialize(database)
|
database_proxy.initialize(database)
|
||||||
|
Helpers.ensure_dir_exists(
|
||||||
|
os.path.join(APPLICATION_PATH, "app", "migrations", "status")
|
||||||
|
)
|
||||||
migration_manager = MigrationManager(database, helper)
|
migration_manager = MigrationManager(database, helper)
|
||||||
migration_manager.up() # Automatically runs migrations
|
migration_manager.up() # Automatically runs migrations
|
||||||
|
|
||||||
@ -408,7 +428,7 @@ if __name__ == "__main__":
|
|||||||
controller.set_project_root(APPLICATION_PATH)
|
controller.set_project_root(APPLICATION_PATH)
|
||||||
tasks_manager = TasksManager(helper, controller, file_helper)
|
tasks_manager = TasksManager(helper, controller, file_helper)
|
||||||
import3 = Import3(helper, controller)
|
import3 = Import3(helper, controller)
|
||||||
|
helper.migration_notifications = get_migration_notifications()
|
||||||
# Check to see if client config.json version is different than the
|
# Check to see if client config.json version is different than the
|
||||||
# Master config.json in helpers.py
|
# Master config.json in helpers.py
|
||||||
Console.info("Checking for remote changes to config.json")
|
Console.info("Checking for remote changes to config.json")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user