up
This commit is contained in:
parent
4aa755fc12
commit
0a38ba474a
3 changed files with 240 additions and 0 deletions
91
app/__init__.py
Normal file
91
app/__init__.py
Normal file
|
@ -0,0 +1,91 @@
|
|||
# coding: utf-8
|
||||
|
||||
# import ConfigParser
|
||||
from flask import g
|
||||
from flask import Flask
|
||||
from flask import request
|
||||
from flask import render_template
|
||||
|
||||
from app.cloud.views import viewHomepage
|
||||
from app.cloud.views.account import viewAccount
|
||||
from app.cloud.views.tasks import viewTasks
|
||||
from app.cloud.views.payments import viewPayments
|
||||
from app.cloud.views.containers import viewContainers
|
||||
from app.cloud.views.administrator import viewAdministrator
|
||||
from app.cloud.views.api import viewAPI
|
||||
from app.cloud.views.server_api import viewServerAPI
|
||||
from app.settings import settings
|
||||
from app import models
|
||||
from app.models import database
|
||||
|
||||
app = Flask(__name__)
|
||||
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
|
||||
app.config['DEBUG'] = settings.getboolean('Application', 'DEBUG')
|
||||
app.config['SECRET_KEY'] = settings.get("Application", "SECRET_KEY")
|
||||
|
||||
# /
|
||||
app.register_blueprint(viewHomepage)
|
||||
# /tasks
|
||||
app.register_blueprint(viewTasks)
|
||||
# /containers
|
||||
app.register_blueprint(viewContainers)
|
||||
# /id
|
||||
app.register_blueprint(viewAccount)
|
||||
# /payments
|
||||
app.register_blueprint(viewPayments)
|
||||
# /api
|
||||
# app.register_blueprint(viewServerAPI)
|
||||
# /administrator
|
||||
app.register_blueprint(viewAdministrator)
|
||||
|
||||
|
||||
@app.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
return render_template('errors/404.html'), 404
|
||||
|
||||
|
||||
@app.errorhandler(403)
|
||||
def page_not_found(e):
|
||||
return render_template('errors/403.html'), 403
|
||||
|
||||
|
||||
@app.errorhandler(410)
|
||||
def page_not_found(e):
|
||||
return render_template('errors/410.html'), 410
|
||||
|
||||
|
||||
@app.errorhandler(500)
|
||||
def page_not_found(e):
|
||||
print e
|
||||
return render_template('errors/500.html'), 500
|
||||
|
||||
|
||||
@app.before_request
|
||||
def before_request():
|
||||
# app.logger.debug("db.connect")
|
||||
g.errors = {'total': 0, 'items': []}
|
||||
g.settings = dict()
|
||||
|
||||
try:
|
||||
database.connect()
|
||||
except Exception as e:
|
||||
# TODO: code to email alert
|
||||
print e
|
||||
print request.path
|
||||
# g.endpoint = request.endpoint.replace('.', '/')
|
||||
return render_template('errors/500.html'), 500
|
||||
|
||||
# извлекаем настройки и определяем их в глобальную переменную
|
||||
for setting in models.Settings.select(models.Settings.key, models.Settings.val):
|
||||
g.settings[setting.key] = setting.val
|
||||
|
||||
|
||||
@app.after_request
|
||||
def after_request(response):
|
||||
# app.logger.debug("db.close")
|
||||
try:
|
||||
database.close()
|
||||
except Exception as e:
|
||||
# TODO: code to email alert
|
||||
print e
|
||||
return response
|
135
app/models.py
Normal file
135
app/models.py
Normal file
|
@ -0,0 +1,135 @@
|
|||
# coding: utf-8
|
||||
|
||||
import datetime
|
||||
from peewee import PostgresqlDatabase
|
||||
from peewee import Model, UUIDField, CharField, ForeignKeyField, IntegerField, DateTimeField, TextField, FloatField
|
||||
|
||||
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)
|
||||
ip = CharField()
|
||||
hostname = CharField()
|
||||
|
||||
|
||||
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()
|
||||
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)
|
||||
status = TextField(null=False)
|
||||
|
||||
|
||||
class Containers(PgSQLModel):
|
||||
id = UUIDField(primary_key=True, unique=True)
|
||||
server = ForeignKeyField(Servers)
|
||||
user = ForeignKeyField(Users)
|
||||
ip = CharField()
|
||||
status = IntegerField()
|
||||
|
||||
|
||||
class ContainerTraffic(PgSQLModel):
|
||||
id = UUIDField(primary_key=True, unique=True)
|
||||
container = ForeignKeyField(Containers)
|
||||
timestamp = DateTimeField()
|
||||
|
||||
|
||||
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)
|
||||
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()
|
14
app/settings.py
Normal file
14
app/settings.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
# coding: utf-8
|
||||
|
||||
import os
|
||||
import ConfigParser
|
||||
|
||||
__author__ = 'sa'
|
||||
|
||||
current_path = os.path.dirname(os.path.abspath(__file__))
|
||||
# setting file read
|
||||
settings = ConfigParser.ConfigParser()
|
||||
if os.path.exists(current_path + "/../settings.ini"):
|
||||
settings.read(current_path + "/../settings.ini")
|
||||
else:
|
||||
print "Fail"
|
Loading…
Add table
Reference in a new issue