console/SWSCloudCore/models.py

254 lines
7.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
import datetime
from peewee import DateTimeField, TextField, FloatField, BigIntegerField
from peewee import Model, UUIDField, CharField, ForeignKeyField, IntegerField
from peewee import PostgresqlDatabase
from SWSCloudCore.config import config
# connect to database
database = PostgresqlDatabase(
config.get('Database', 'name'),
host=config.get('Database', 'host'),
port=config.getint('Database', 'port'),
user=config.get('Database', 'user'),
password=config.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)
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 Plans(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
name = CharField(unique=True, null=False)
status = CharField(null=False, default='active')
storage = IntegerField(null=False)
swap = IntegerField(null=False)
memory = IntegerField(null=False)
cores = IntegerField(null=False)
class PlansVMs(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
name = CharField(unique=True, null=False)
status = CharField(null=False, default='active')
price = FloatField(null=False)
storage = IntegerField(null=False)
swap = IntegerField(null=False)
memory = IntegerField(null=False)
cores = IntegerField(null=False)
class Users(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
email = CharField(unique=True, null=False)
password = CharField()
created = DateTimeField(default=datetime.datetime.now)
status = IntegerField()
class UsersRecoveryCodes(PgSQLModel):
user = ForeignKeyField(Users)
recovery_code = CharField(null=False)
created = DateTimeField(default=datetime.datetime.now)
class UsersSecrets(PgSQLModel):
user = ForeignKeyField(Users)
# 4f235008-a9bd-11e5-a24e-28d244e159e9
secret = CharField(unique=True, null=False)
# 1.1.1.1,1.2.3.4
acl = TextField()
# 0 - inactive
# 1 - active
status = IntegerField()
class UsersDetails(PgSQLModel):
user = ForeignKeyField(Users)
fname = CharField(null=True, default='')
lname = CharField(null=True, default='')
address = CharField(null=True, default='')
city = CharField(null=True, default='')
country = CharField(null=True, default='')
state = CharField(null=True, default='')
zipcode = IntegerField(null=True, default=0)
class UsersBalance(PgSQLModel):
"""
Текущий баланс пользователей
"""
user = ForeignKeyField(Users)
balance = FloatField(default=0, null=False)
class UsersBalanceTransactions(PgSQLModel):
"""
Транзакции
"""
user = ForeignKeyField(Users)
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)
# с какого ip был добавлен ключ
remote = TextField(null=True)
# когда был добавлен ключ
created = DateTimeField(default=datetime.datetime.now)
class Containers(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
datacenter = ForeignKeyField(DataCenters)
server = ForeignKeyField(Servers)
user = ForeignKeyField(Users)
ipv4 = CharField()
ipv6 = CharField()
# 0: inactive, 1: active, 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 Vms(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
datacenter = ForeignKeyField(DataCenters)
server = ForeignKeyField(Servers)
user = ForeignKeyField(Users)
plan = ForeignKeyField(PlansVMs)
# 386, x86_64
hostname = CharField()
platform = CharField()
os_name = CharField()
os_suite = CharField()
ipv4 = CharField()
ipv6 = CharField()
# 0: inactive, 1: active, 2: ..., 3: ..., 4: ..., 5: ...
status = IntegerField()
class Tasks(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
datacenter = ForeignKeyField(DataCenters)
server = ForeignKeyField(Servers)
user = ForeignKeyField(Users)
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()