263 lines
7.4 KiB
Python
263 lines
7.4 KiB
Python
# 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 PlansContainers(PgSQLModel):
|
||
datacenter = ForeignKeyField(DataCenters, unique=True)
|
||
name = CharField(default='')
|
||
price_ip = IntegerField(null=False)
|
||
price_storage_gb = IntegerField(null=False)
|
||
price_memory_mb = IntegerField(null=False)
|
||
price_traffic_gb = 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_serverapi
|
||
alert = CharField(null=False)
|
||
notified = DateTimeField(default=datetime.datetime.now)
|
||
details = TextField()
|