import peewee import datetime def migrate(migrator, database, **kwargs): db = database class Users(peewee.Model): user_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) last_login = peewee.DateTimeField(default=datetime.datetime.now) last_update = peewee.DateTimeField(default=datetime.datetime.now) last_ip = peewee.CharField(default="") username = peewee.CharField(default="", unique=True, index=True) password = peewee.CharField(default="") enabled = peewee.BooleanField(default=True) superuser = peewee.BooleanField(default=False) # we may need to revisit this api_token = peewee.CharField(default="", unique=True, index=True) class Meta: table_name = "users" database = db class Roles(peewee.Model): role_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) last_update = peewee.DateTimeField(default=datetime.datetime.now) role_name = peewee.CharField(default="", unique=True, index=True) class Meta: table_name = "roles" database = db class User_Roles(peewee.Model): user_id = peewee.ForeignKeyField(Users, backref="user_role") role_id = peewee.ForeignKeyField(Roles, backref="user_role") class Meta: table_name = "user_roles" primary_key = peewee.CompositeKey("user_id", "role_id") database = db class Audit_Log(peewee.Model): audit_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) user_name = peewee.CharField(default="") user_id = peewee.IntegerField(default=0, index=True) source_ip = peewee.CharField(default="127.0.0.1") # When auditing global events, use server ID 0 server_id = peewee.IntegerField(default=None, index=True) log_msg = peewee.TextField(default="") class Meta: database = db class Host_Stats(peewee.Model): time = peewee.DateTimeField(default=datetime.datetime.now, index=True) boot_time = peewee.CharField(default="") cpu_usage = peewee.FloatField(default=0) cpu_cores = peewee.IntegerField(default=0) cpu_cur_freq = peewee.FloatField(default=0) cpu_max_freq = peewee.FloatField(default=0) mem_percent = peewee.FloatField(default=0) mem_usage = peewee.CharField(default="") mem_total = peewee.CharField(default="") disk_json = peewee.TextField(default="") class Meta: table_name = "host_stats" database = db class Servers(peewee.Model): server_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) server_uuid = peewee.CharField(default="", index=True) server_name = peewee.CharField(default="Server", index=True) path = peewee.CharField(default="") backup_path = peewee.CharField(default="") executable = peewee.CharField(default="") log_path = peewee.CharField(default="") execution_command = peewee.CharField(default="") auto_start = peewee.BooleanField(default=0) auto_start_delay = peewee.IntegerField(default=10) crash_detection = peewee.BooleanField(default=0) stop_command = peewee.CharField(default="stop") executable_update_url = peewee.CharField(default="") server_ip = peewee.CharField(default="127.0.0.1") server_port = peewee.IntegerField(default=25565) logs_delete_after = peewee.IntegerField(default=0) class Meta: table_name = "servers" database = db class User_Servers(peewee.Model): user_id = peewee.ForeignKeyField(Users, backref="user_server") server_id = peewee.ForeignKeyField(Servers, backref="user_server") class Meta: table_name = "user_servers" primary_key = peewee.CompositeKey("user_id", "server_id") database = db class Role_Servers(peewee.Model): role_id = peewee.ForeignKeyField(Roles, backref="role_server") server_id = peewee.ForeignKeyField(Servers, backref="role_server") class Meta: table_name = "role_servers" primary_key = peewee.CompositeKey("role_id", "server_id") database = db class Server_Stats(peewee.Model): stats_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) server_id = peewee.ForeignKeyField(Servers, backref="server", index=True) started = peewee.CharField(default="") running = peewee.BooleanField(default=False) cpu = peewee.FloatField(default=0) mem = peewee.FloatField(default=0) mem_percent = peewee.FloatField(default=0) world_name = peewee.CharField(default="") world_size = peewee.CharField(default="") server_port = peewee.IntegerField(default=25565) int_ping_results = peewee.CharField(default="") online = peewee.IntegerField(default=0) max = peewee.IntegerField(default=0) players = peewee.CharField(default="") desc = peewee.CharField(default="Unable to Connect") version = peewee.CharField(default="") updating = peewee.BooleanField(default=False) class Meta: table_name = "server_stats" database = db class Commands(peewee.Model): command_id = peewee.AutoField() created = peewee.DateTimeField(default=datetime.datetime.now) server_id = peewee.ForeignKeyField(Servers, backref="server", index=True) user = peewee.ForeignKeyField(Users, backref="user", index=True) source_ip = peewee.CharField(default="127.0.0.1") command = peewee.CharField(default="") executed = peewee.BooleanField(default=False) class Meta: table_name = "commands" database = db class Webhooks(peewee.Model): id = peewee.AutoField() name = peewee.CharField(max_length=64, unique=True, index=True) method = peewee.CharField(default="POST") url = peewee.CharField(unique=True) event = peewee.CharField(default="") send_data = peewee.BooleanField(default=True) class Meta: table_name = "webhooks" database = db class Schedules(peewee.Model): schedule_id = peewee.IntegerField(unique=True, primary_key=True) server_id = peewee.ForeignKeyField(Servers, backref="schedule_server") enabled = peewee.BooleanField() action = peewee.CharField() interval = peewee.IntegerField() interval_type = peewee.CharField() start_time = peewee.CharField(null=True) command = peewee.CharField(null=True) comment = peewee.CharField() class Meta: table_name = "schedules" database = db class Backups(peewee.Model): directories = peewee.CharField(null=True) max_backups = peewee.IntegerField() server_id = peewee.ForeignKeyField(Servers, backref="backups_server") schedule_id = peewee.ForeignKeyField(Schedules, backref="backups_schedule") class Meta: table_name = "backups" database = db migrator.create_table(Backups) migrator.create_table(Users) migrator.create_table(Roles) migrator.create_table(User_Roles) migrator.create_table(User_Servers) migrator.create_table(Host_Stats) migrator.create_table(Webhooks) migrator.create_table(Servers) migrator.create_table(Role_Servers) migrator.create_table(Server_Stats) migrator.create_table(Commands) migrator.create_table(Audit_Log) migrator.create_table(Schedules) def rollback(migrator, database, **kwargs): migrator.drop_table("users") migrator.drop_table("roles") migrator.drop_table("user_roles") migrator.drop_table( "audit_log" ) # ? Not 100% sure of the table name, please specify in the schema migrator.drop_table("host_stats") migrator.drop_table("servers") migrator.drop_table("user_servers") migrator.drop_table("role_servers") migrator.drop_table("server_stats") migrator.drop_table("commands") migrator.drop_table("webhooks") migrator.drop_table("schedules") migrator.drop_table("backups")