mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
216 lines
8.3 KiB
Python
216 lines
8.3 KiB
Python
|
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')
|