From 03b0f7fc8d43c3575deb17a5a10d1e020d50ef9e Mon Sep 17 00:00:00 2001 From: vanzhiganov Date: Thu, 24 Dec 2015 02:24:11 +0300 Subject: [PATCH] start api && upadte container list page --- .gitmodules | 3 + app/cloud/controllers/containers/__init__.py | 17 ++-- app/cloud/controllers/users/__init__.py | 8 ++ app/cloud/views/api/__init__.py | 88 +++++++------------- app/templates/default/containers/index.html | 2 +- 5 files changed, 54 insertions(+), 64 deletions(-) create mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..66aa0e7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "kb/kb"] + path = kb/kb + url = http://github.com/apescale/kb diff --git a/app/cloud/controllers/containers/__init__.py b/app/cloud/controllers/containers/__init__.py index c4914f7..dc2ad4e 100644 --- a/app/cloud/controllers/containers/__init__.py +++ b/app/cloud/controllers/containers/__init__.py @@ -29,21 +29,28 @@ class ControllerContainers: return True def get_items(self): - state = ControllerContainersStatisticsState() + # state = ControllerContainersStatisticsState() query = models.Containers.select( models.Containers.id, models.Containers.ipv4, models.Containers.ipv6, models.Containers.status, models.ContainersStatisticsState.size, - ).join(models.ContainersStatisticsState).where(models.Containers.user == self.user_id) - print query + ).join(models.ContainersStatisticsState).where( + models.Containers.user == self.user_id + ) + # containers = dict() containers["total"] = query.count() containers["items"] = [] for item in query.execute(): - print (item.containersstatisticsstate.size) - containers['items'].append(item) + containers['items'].append({ + 'id': str(item.id), + 'ipv4': item.ipv4, + 'ipv6': item.ipv6, + 'status': item.status, + 'size': item.containersstatisticsstate.size, + }) return containers def get_item(self, container_id): diff --git a/app/cloud/controllers/users/__init__.py b/app/cloud/controllers/users/__init__.py index a35b7e4..8b4eb6f 100644 --- a/app/cloud/controllers/users/__init__.py +++ b/app/cloud/controllers/users/__init__.py @@ -186,6 +186,14 @@ class ControllerSSHKey: class ControllerAPI: + def auth(self, email, secret): + if models.UsersSecrets.select().join(models.Users).where( + models.Users.email == email, + models.UsersSecrets.secret == secret + ).count() == 0: + return False + return True + def get(self, user_id): secret = models.UsersSecrets.select().where( models.UsersSecrets.user == user_id diff --git a/app/cloud/views/api/__init__.py b/app/cloud/views/api/__init__.py index 71fe9a8..405f89f 100644 --- a/app/cloud/views/api/__init__.py +++ b/app/cloud/views/api/__init__.py @@ -15,6 +15,7 @@ from flask import Blueprint from app import models from app.settings import settings from app.cloud.controllers.users import ControllerUsers +from app.cloud.controllers.users import ControllerAPI from app.cloud.controllers.containers import ControllerContainers from cloudnsru import CloudnsClient @@ -25,6 +26,8 @@ viewAPI = Blueprint('api', __name__, url_prefix='/api') @viewAPI.route('/auth', methods=['POST']) def auth(): """ + curl -X POST http://localhost:5000/api/auth --data 'email=&secret=' + TODO: Процесс авторизации - получаем емейл и секретный ключ - создаём временный токен @@ -33,68 +36,37 @@ def auth(): """ email = request.form['email'] secret = request.form['secret'] - expire = request.form['expire'] - token = '' - return jsonify(token=token) + # expire = request.form['expire'] + + if not ControllerAPI().auth(email, secret): + return jsonify(status=1) + + user_id = ControllerUsers().get_id_by_email(email) + + return jsonify(user_id=user_id) # /container/create # /container/details/ @viewAPI.route('/container/list', methods=['GET', 'POST', 'PUT', 'DELETE']) def container_list(): + """ + curl -X POST http://localhost:5000/api/container/list --data 'email=&secret=' + :return: + """ + email = request.form['email'] + secret = request.form['secret'] + # expire = request.form['expire'] + # + if not ControllerAPI().auth(email, secret): + return jsonify(status=1) + # + user_id = ControllerUsers().get_id_by_email(email) # get containers list - containers = ControllerContainers(session['user_id']).get_items() - - return jsonify(status=0, message='ok', containers=containers) - - -@viewAPI.route('/stats/') -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) + containers = ControllerContainers(user_id).get_items() + # + return jsonify( + status=0, + total=containers['total'], + items=containers['items'] + ) diff --git a/app/templates/default/containers/index.html b/app/templates/default/containers/index.html index 953df05..f576a17 100644 --- a/app/templates/default/containers/index.html +++ b/app/templates/default/containers/index.html @@ -40,7 +40,7 @@ {% endif %} - {% set size_gb = (container.containersstatisticsstate.size / 1024 / 1024) %} + {% set size_gb = (container.size / 1024 / 1024) %} {{ '%0.2f' | format(size_gb|float) }}GB