This commit is contained in:
Vyacheslav Anzhiganov 2015-11-26 23:50:33 +03:00
parent 4aa755fc12
commit 0a38ba474a
3 changed files with 240 additions and 0 deletions

91
app/__init__.py Normal file
View 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
View 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
View 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"