console/SWSCloudCore/models.py

264 lines
7.4 KiB
Python
Raw Normal View History

2015-11-26 23:50:33 +03:00
# coding: utf-8
import datetime
2016-04-02 00:42:22 +03:00
2015-12-14 05:00:33 +03:00
from peewee import DateTimeField, TextField, FloatField, BigIntegerField
2016-04-02 00:42:22 +03:00
from peewee import Model, UUIDField, CharField, ForeignKeyField, IntegerField
from peewee import PostgresqlDatabase
2016-05-10 02:42:07 +03:00
from SWSCloudCore.config import config
2015-11-26 23:50:33 +03:00
# connect to database
database = PostgresqlDatabase(
2016-05-10 02:42:07 +03:00
config.get('Database', 'name'),
host=config.get('Database', 'host'),
port=config.getint('Database', 'port'),
user=config.get('Database', 'user'),
password=config.get('Database', 'password'),
2015-11-26 23:50:33 +03:00
threadlocals=True,
fields={'uuid': 'uuid'}
)
class PgSQLModel(Model):
class Meta:
database = database
class DataCenters(PgSQLModel):
2016-04-03 19:10:18 +03:00
"""
Модель датацентров
"""
2015-11-26 23:50:33 +03:00
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)
2016-04-03 19:10:18 +03:00
datacenter = ForeignKeyField(DataCenters)
2015-11-26 23:50:33 +03:00
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)
2015-11-29 00:08:10 +03:00
ipv4 = CharField()
ipv6 = CharField()
2015-12-01 02:45:57 +03:00
ipv4_gateway = CharField()
ipv6_gateway = CharField()
2016-04-03 19:10:18 +03:00
# 0: free, 1: used
2015-11-29 00:08:10 +03:00
status = IntegerField()
2015-11-26 23:50:33 +03:00
2016-05-16 09:24:27 +03:00
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)
2016-05-16 09:24:27 +03:00
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)
2015-11-26 23:50:33 +03:00
class Users(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
email = CharField(unique=True, null=False)
password = CharField()
2016-04-03 19:10:18 +03:00
created = DateTimeField(default=datetime.datetime.now)
2015-11-26 23:50:33 +03:00
status = IntegerField()
class UsersRecoveryCodes(PgSQLModel):
2016-04-03 19:10:18 +03:00
user = ForeignKeyField(Users)
2015-11-26 23:50:33 +03:00
recovery_code = CharField(null=False)
created = DateTimeField(default=datetime.datetime.now)
class UsersSecrets(PgSQLModel):
2016-04-03 19:10:18 +03:00
user = ForeignKeyField(Users)
2015-12-24 01:52:14 +03:00
# 4f235008-a9bd-11e5-a24e-28d244e159e9
2015-11-26 23:50:33 +03:00
secret = CharField(unique=True, null=False)
2015-12-24 01:52:14 +03:00
# 1.1.1.1,1.2.3.4
2015-11-26 23:50:33 +03:00
acl = TextField()
2015-12-14 01:49:38 +03:00
# 0 - inactive
# 1 - active
2015-11-26 23:50:33 +03:00
status = IntegerField()
class UsersDetails(PgSQLModel):
2016-04-03 19:10:18 +03:00
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='')
2016-04-09 16:52:33 +03:00
zipcode = IntegerField(null=True, default=0)
2015-11-26 23:50:33 +03:00
class UsersBalance(PgSQLModel):
2016-04-03 19:10:18 +03:00
"""
Текущий баланс пользователей
"""
user = ForeignKeyField(Users)
2015-11-26 23:50:33 +03:00
balance = FloatField(default=0, null=False)
class UsersBalanceTransactions(PgSQLModel):
2016-04-03 19:10:18 +03:00
"""
Транзакции
"""
user = ForeignKeyField(Users)
2015-11-26 23:50:33 +03:00
amount = FloatField(default=0, null=False)
created = DateTimeField(default=datetime.datetime.now)
notified = IntegerField(null=False, default=0)
2015-12-11 08:23:56 +03:00
# success
# process
# fail
2015-11-26 23:50:33 +03:00
status = TextField(null=False)
2015-11-29 00:08:10 +03:00
class SSHKeys(PgSQLModel):
user = ForeignKeyField(Users)
sshkey = TextField(null=True)
2016-04-03 19:10:18 +03:00
# с какого ip был добавлен ключ
remote = TextField(null=True)
# когда был добавлен ключ
created = DateTimeField(default=datetime.datetime.now)
2015-11-29 00:08:10 +03:00
2015-11-26 23:50:33 +03:00
class Containers(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
2015-11-29 00:08:10 +03:00
datacenter = ForeignKeyField(DataCenters)
2015-11-26 23:50:33 +03:00
server = ForeignKeyField(Servers)
user = ForeignKeyField(Users)
2015-11-29 00:08:10 +03:00
ipv4 = CharField()
ipv6 = CharField()
2016-04-03 19:10:18 +03:00
# 0: inactive, 1: active, 2: ..., 3: ..., 4: ..., 5: ...
2015-11-26 23:50:33 +03:00
status = IntegerField()
2015-12-13 04:48:00 +03:00
class ContainersStatistics(PgSQLModel):
2015-11-26 23:50:33 +03:00
container = ForeignKeyField(Containers)
2015-12-14 05:00:33 +03:00
created = DateTimeField(default=datetime.datetime.now)
cpu = BigIntegerField(default=0, null=False)
memory = BigIntegerField(default=0, null=False)
2015-12-16 08:39:53 +03:00
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)
2015-12-15 11:22:41 +03:00
size = BigIntegerField(default=0, null=False)
2015-12-14 05:00:33 +03:00
net_tx = BigIntegerField(default=0, null=False)
net_rx = BigIntegerField(default=0, null=False)
net_total = BigIntegerField(default=0, null=False)
2015-11-26 23:50:33 +03:00
2016-05-16 09:24:27 +03:00
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()
2015-11-26 23:50:33 +03:00
class Tasks(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
2016-04-03 19:10:18 +03:00
datacenter = ForeignKeyField(DataCenters)
server = ForeignKeyField(Servers)
user = ForeignKeyField(Users)
2015-11-26 23:50:33 +03:00
created = DateTimeField(default=datetime.datetime.now)
2015-12-01 02:45:57 +03:00
task = CharField(null=False)
2016-04-20 03:39:13 +03:00
# 0 - new, 1 - working, 2 - completed
2015-12-01 02:45:57 +03:00
status = IntegerField(null=False, default=0)
2015-11-26 23:50:33 +03:00
plain = TextField()
class Settings(PgSQLModel):
2016-04-03 19:10:18 +03:00
"""
Модель настроек
"""
2015-11-26 23:50:33 +03:00
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()
2015-12-23 02:31:43 +03:00
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
2015-12-23 02:31:43 +03:00
alert = CharField(null=False)
notified = DateTimeField(default=datetime.datetime.now)
details = TextField()