console/app/models.py
2015-12-23 02:31:43 +03:00

204 lines
5.6 KiB
Python

# 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()