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
|
|
|
|
|
|
|
|
|
|
from SWSCloudCore.settings import settings
|
2015-11-26 23:50:33 +03:00
|
|
|
|
|
|
|
|
|
# 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):
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_api
|
|
|
|
|
alert = CharField(null=False)
|
|
|
|
|
notified = DateTimeField(default=datetime.datetime.now)
|
|
|
|
|
details = TextField()
|