# coding: utf-8 import datetime from peewee import PostgresqlDatabase from peewee import Model, UUIDField, CharField, ForeignKeyField, IntegerField from peewee import DateTimeField, TextField, FloatField, BigIntegerField from app.settings import settings # connect to database database = PostgresqlDatabase( settings.get('Database', 'name'), host=settings.get('Database', 'host'), port=settings.getint('Database', 'port'), user=settings.get('Database', 'user'), password=settings.get('Database', 'password'), threadlocals=True, fields={'uuid': 'uuid'} ) class PgSQLModel(Model): class Meta: database = database class DataCenters(PgSQLModel): id = UUIDField(unique=True, primary_key=True, null=False) code = CharField(unique=True) name = CharField(unique=True) country = CharField() city = CharField() status = IntegerField(default=0) class Servers(PgSQLModel): id = UUIDField(unique=True, primary_key=True) datacenter = ForeignKeyField(DataCenters, related_name='dcsservers') secret = CharField() created = DateTimeField(default=datetime.datetime.now()) status = IntegerField() ip = CharField(unique=True) hostname = CharField() class ServersSettings(PgSQLModel): server = ForeignKeyField(Servers) key = CharField() val = CharField() class Ips(PgSQLModel): datacenter = ForeignKeyField(DataCenters) server = ForeignKeyField(Servers) ipv4 = CharField() ipv6 = CharField() ipv4_gateway = CharField() ipv6_gateway = CharField() # 0 - free # 1 - used status = IntegerField() class Users(PgSQLModel): id = UUIDField(primary_key=True, unique=True) email = CharField(unique=True, null=False) password = CharField() status = IntegerField() class UsersRecoveryCodes(PgSQLModel): user = ForeignKeyField(Users, related_name='usersrecoverycodes') recovery_code = CharField(null=False) created = DateTimeField(default=datetime.datetime.now) class UsersSecrets(PgSQLModel): user = ForeignKeyField(Users, related_name='userssecrets') secret = CharField(unique=True, null=False) acl = TextField() # 0 - inactive # 1 - active status = IntegerField() class UsersDetails(PgSQLModel): user = ForeignKeyField(Users, related_name='usersdetails') fname = CharField(null=True) lname = CharField(null=True) address = CharField(null=True) city = CharField(null=True) country = CharField(null=True) state = CharField(null=True) zipcode = IntegerField(null=True) class UsersBalance(PgSQLModel): user = ForeignKeyField(Users, related_name='usersbalance') balance = FloatField(default=0, null=False) class UsersBalanceTransactions(PgSQLModel): id = IntegerField(primary_key=True, null=False, sequence='nextval') user = ForeignKeyField(Users, related_name='usersbalancetransaction') amount = FloatField(default=0, null=False) created = DateTimeField(default=datetime.datetime.now) notified = IntegerField(null=False, default=0) # success # process # fail status = TextField(null=False) class SSHKeys(PgSQLModel): user = ForeignKeyField(Users) sshkey = TextField(null=True) class Containers(PgSQLModel): id = UUIDField(primary_key=True, unique=True) datacenter = ForeignKeyField(DataCenters) server = ForeignKeyField(Servers) user = ForeignKeyField(Users) ipv4 = CharField() ipv6 = CharField() # 0 # 1 # 2 # 3 # 4 # 5 status = IntegerField() class ContainersStatistics(PgSQLModel): container = ForeignKeyField(Containers) created = DateTimeField(default=datetime.datetime.now) cpu = BigIntegerField(default=0, null=False) memory = BigIntegerField(default=0, null=False) size = BigIntegerField(default=0, null=False) net_tx = BigIntegerField(default=0, null=False) net_rx = BigIntegerField(default=0, null=False) net_total = BigIntegerField(default=0, null=False) class ContainersStatisticsState(PgSQLModel): container = ForeignKeyField(Containers) updated = DateTimeField(default=datetime.datetime.now) cpu = BigIntegerField(default=0, null=False) memory = BigIntegerField(default=0, null=False) size = BigIntegerField(default=0, null=False) net_tx = BigIntegerField(default=0, null=False) net_rx = BigIntegerField(default=0, null=False) net_total = BigIntegerField(default=0, null=False) class Tasks(PgSQLModel): id = UUIDField(primary_key=True, unique=True) datacenter = ForeignKeyField(DataCenters, related_name='dcstasks') server = ForeignKeyField(Servers, related_name='serverstasks') user = ForeignKeyField(Users, related_name='userstasks') created = DateTimeField(default=datetime.datetime.now) task = CharField(null=False) # 0 - new # 1 - working # 2 - completed status = IntegerField(null=False, default=0) plain = TextField() class Settings(PgSQLModel): key = TextField(unique=True, null=False) val = TextField(null=True) class Admins(PgSQLModel): id = UUIDField(primary_key=True, unique=True) email = CharField(unique=True, null=False) password = CharField() status = IntegerField() class Notifications(PgSQLModel): user = ForeignKeyField(Users) # 0 - unread # 1 - read status = IntegerField(null=False) # Default # Primary # Success # Info # Warning # Danger message_type = CharField(null=False) title = TextField() message = TextField() class NotificationsSecurity(PgSQLModel): # auth_web # auth_api # auth_api alert = CharField(null=False) notified = DateTimeField(default=datetime.datetime.now) details = TextField()