2015-12-01 02:43:10 +03:00
|
|
|
# coding: utf-8
|
|
|
|
|
|
|
|
import uuid
|
|
|
|
from datetime import datetime
|
|
|
|
from datetime import timedelta
|
|
|
|
|
|
|
|
from flask import jsonify
|
|
|
|
from flask import render_template
|
|
|
|
from flask import session
|
|
|
|
from flask import redirect
|
|
|
|
from flask import url_for
|
|
|
|
from flask import request
|
|
|
|
from flask import Blueprint
|
|
|
|
|
|
|
|
from app import models
|
|
|
|
from app.settings import settings
|
|
|
|
from app.cloud.controllers.users import ControllerUsers
|
2015-12-23 02:31:43 +03:00
|
|
|
from app.cloud.controllers.containers import ControllerContainers
|
|
|
|
from cloudnsru import CloudnsClient
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
viewAPI = Blueprint('api', __name__, url_prefix='/api')
|
|
|
|
|
|
|
|
|
2015-12-23 02:31:43 +03:00
|
|
|
# /auth
|
|
|
|
@viewAPI.route('/auth', methods=['POST'])
|
|
|
|
def auth():
|
|
|
|
"""
|
|
|
|
Процесс авторизации
|
|
|
|
- получаем емейл и секретный ключ
|
|
|
|
- создаём временный токен
|
|
|
|
- выдаём токен
|
|
|
|
:return:
|
|
|
|
"""
|
|
|
|
email = request.form['email']
|
|
|
|
secret = request.form['secret']
|
|
|
|
expire = request.form['expire']
|
|
|
|
token = ''
|
|
|
|
return jsonify(token=token)
|
|
|
|
# /container/create
|
|
|
|
# /container/details/<uuid:container_id>
|
|
|
|
|
|
|
|
|
|
|
|
@viewAPI.route('/container/list', methods=['GET', 'POST', 'PUT', 'DELETE'])
|
|
|
|
def container_list():
|
|
|
|
# get containers list
|
|
|
|
containers = ControllerContainers(session['user_id']).get_items()
|
|
|
|
|
|
|
|
return jsonify(status=0, message='ok', containers=containers)
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
@viewAPI.route('/stats/<uuid:rule_id>')
|
|
|
|
def stats(rule_id):
|
|
|
|
# auth user
|
|
|
|
if not ControllerUsers().auth(session['email'], session['password']):
|
|
|
|
return redirect(url_for("app_id_logout"))
|
|
|
|
|
|
|
|
rules = ControllerRules(session['user_id'])
|
|
|
|
|
|
|
|
# check the user have a selected rule
|
|
|
|
# if user not have a container then redirect to the container list
|
|
|
|
if not rules.check_exists_item(rule_id):
|
|
|
|
return redirect(url_for('rules.index'))
|
|
|
|
|
|
|
|
rules_statistics = ControllerRulesStatistics(rule_id)
|
|
|
|
|
|
|
|
errors = {'total': 0, 'items': []}
|
|
|
|
stats_string = {'requests': '', 'traffic': ''}
|
|
|
|
last_days = datetime.today() - timedelta(days=30)
|
|
|
|
|
|
|
|
# get rule details
|
|
|
|
rule_details = rules.get_item(rule_id)
|
|
|
|
|
|
|
|
stats_string['traffic'] = rules_statistics.traffic_total_get(last_days)
|
|
|
|
stats_string['requests'] = rules_statistics.requests_total_get(last_days)
|
|
|
|
|
|
|
|
traffic_by_country = rules_statistics.traffic_by_country_get(last_days)
|
|
|
|
|
|
|
|
if stats_string['traffic'] > 0:
|
|
|
|
stats_string['cost'] = 0
|
|
|
|
elif stats_string['traffic'] > 50:
|
|
|
|
stats_string['cost'] = 4
|
|
|
|
elif stats_string['traffic'] > 1000:
|
|
|
|
stats_string['cost'] = 3
|
|
|
|
elif stats_string['traffic'] > 2000:
|
|
|
|
stats_string['cost'] = 2.7
|
|
|
|
elif stats_string['traffic'] > 3000:
|
|
|
|
stats_string['cost'] = 2.6
|
|
|
|
elif stats_string['traffic'] > 4000:
|
|
|
|
stats_string['cost'] = 2.5
|
|
|
|
elif stats_string['traffic'] > 5000:
|
|
|
|
stats_string['cost'] = 2.4
|
|
|
|
|
|
|
|
# for data_item in data:
|
|
|
|
# print data_item.timestamp, data_item.body_bytes_sent
|
|
|
|
|
|
|
|
return render_template('rules/stats.twig',
|
|
|
|
rule=rule_details,
|
|
|
|
stats_string=stats_string,
|
|
|
|
traffic_by_country=traffic_by_country,
|
|
|
|
errors=errors)
|