James Iter 8 лет назад
Родитель
Сommit
1dfdb990c8
4 измененных файлов с 95 добавлено и 61 удалено
  1. 78 2
      api/log.py
  2. 1 1
      api_route_table.py
  3. 2 2
      templates/logs.html
  4. 14 56
      views/log.py

+ 78 - 2
api/log.py

@@ -1,8 +1,11 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
+import json
+from math import ceil
+import jimit as ji
 
-
-from flask import Blueprint
+import requests
+from flask import Blueprint, request, url_for
 
 from api.base import Base
 from models import Log
@@ -46,3 +49,76 @@ def r_get_by_filter():
 def r_content_search():
     return log_base.content_search()
 
+
+@Utils.dumps2response
+def r_show():
+    args = list()
+    page = int(request.args.get('page', 1))
+    page_size = int(request.args.get('page_size', 50))
+    keyword = request.args.get('keyword', None)
+    order_by = request.args.get('order_by', None)
+    order = request.args.get('order', 'desc')
+    resource_path = request.path
+
+    if page is not None:
+        args.append('page=' + page.__str__())
+
+    if page_size is not None:
+        args.append('page_size=' + page_size.__str__())
+
+    if keyword is not None:
+        args.append('keyword=' + keyword.__str__())
+
+    if order_by is not None:
+        args.append('order_by=' + order_by)
+
+    if order is not None:
+        args.append('order=' + order)
+
+    logs_url = url_for('api_logs.r_get_by_filter', _external=True)
+    if keyword is not None:
+        logs_url = url_for('api_logs.r_content_search', _external=True)
+
+    if args.__len__() > 0:
+        logs_url = logs_url + '?' + '&'.join(args)
+
+    logs_ret = requests.get(url=logs_url, cookies=request.cookies)
+    logs_ret = json.loads(logs_ret.content)
+
+    last_page = int(ceil(logs_ret['paging']['total'] / float(page_size)))
+    page_length = 5
+    pages = list()
+    if page < int(ceil(page_length / 2.0)):
+        for i in range(1, page_length + 1):
+            pages.append(i)
+            if i == last_page or last_page == 0:
+                break
+
+    elif last_page - page < page_length / 2:
+        for i in range(last_page - page_length + 1, last_page + 1):
+            if i < 1:
+                continue
+            pages.append(i)
+
+    else:
+        for i in range(page - page_length / 2, page + int(ceil(page_length / 2.0))):
+            pages.append(i)
+            if i == last_page or last_page == 0:
+                break
+    ret = dict()
+    ret['state'] = ji.Common.exchange_state(20000)
+
+    ret['data'] = {
+        'logs': logs_ret['data'],
+        'paging': logs_ret['paging'],
+        'page': page,
+        'page_size': page_size,
+        'keyword': keyword,
+        'pages': pages,
+        'last_page': last_page,
+        'order_by': order_by,
+        'order': order
+    }
+
+    return ret
+

+ 1 - 1
api_route_table.py

@@ -140,6 +140,7 @@ add_rule_api(disk.blueprint, '/_detail/<uuid>', api_func='disk.r_detail', method
 add_rule_api(log.blueprints, '/<ids>', api_func='log.r_get', methods=['GET'])
 add_rule_api(log.blueprints, '', api_func='log.r_get_by_filter', methods=['GET'])
 add_rule_api(log.blueprints, '/_search', api_func='log.r_content_search', methods=['GET'])
+add_rule_api(log.blueprints, '/_show', api_func='log.r_show', methods=['GET'])
 
 # 计算节点操作
 add_rule_api(host.blueprints, '/<nodes_id>', api_func='host.r_get', methods=['GET'])
@@ -175,7 +176,6 @@ add_rule_api(snapshot.blueprints, '/_mapping_by_disks_uuid/<disks_uuid>',
 add_rule_api(snapshot.blueprint, '/_convert_to_os_template_image/<snapshot_id>/<disk_uuid>',
              api_func='snapshot.r_convert_to_os_template_image', methods=['PUT'])
 
-# 日志查询
 # Guest 性能查询
 add_rule_api(guest_performance.blueprint, '/cpu_memory',
              api_func='guest_performance.r_cpu_memory_get_by_filter', methods=['GET'])

+ 2 - 2
templates/logs.html

@@ -143,7 +143,7 @@
                 </tr>
                 </thead>
                 <tbody>
-                {% for item in logs_ret.data %}
+                {% for item in logs %}
                 <tr role="row" class="odd" style="
                         {% if item.type == 3 %}
                             background-color: #ffffff;
@@ -190,7 +190,7 @@
                                 <div class="col-sm-6">
                                 </div>
                                 <div class="col-sm-3" style="font-size: 12px; padding-top: 5px; text-align: right;">
-                                    共有{{ logs_ret.paging.total }}条,每页显示:
+                                    共有{{ paging.total }}条,每页显示:
                                     <select id="page_size" name="datatable-row-highlight_length" title="page_size" class="form-control" style="height: 22px; vertical-align: baseline;">
                                         <option value="20" {% if page_size == 20 %} selected {% endif %}>20</option>
                                         <option value="50" {% if page_size == 50  %} selected {% endif %}>50</option>

+ 14 - 56
views/log.py

@@ -5,7 +5,6 @@
 import json
 from flask import Blueprint, render_template, url_for, request
 import requests
-from math import ceil
 
 
 __author__ = 'James Iter'
@@ -28,64 +27,23 @@ blueprints = Blueprint(
 
 
 def show():
-    args = list()
-    page = int(request.args.get('page', 1))
-    page_size = int(request.args.get('page_size', 50))
-    keyword = request.args.get('keyword', None)
-    order_by = request.args.get('order_by', None)
-    order = request.args.get('order', 'desc')
-    resource_path = request.path
+    url = url_for('api_logs.r_show', _external=True)
+    if request.args.__len__() >= 1:
+        args = list()
 
-    if page is not None:
-        args.append('page=' + page.__str__())
+        for k, v in request.args.items():
+            args.append('='.join([k, v]))
 
-    if page_size is not None:
-        args.append('page_size=' + page_size.__str__())
+        url += '?' + '&'.join(args)
 
-    if keyword is not None:
-        args.append('keyword=' + keyword.__str__())
+    ret = requests.get(url=url, cookies=request.cookies)
+    ret = json.loads(ret.content)
 
-    if order_by is not None:
-        args.append('order_by=' + order_by)
-
-    if order is not None:
-        args.append('order=' + order)
-
-    host_url = request.host_url.rstrip('/')
-
-    logs_url = host_url + url_for('api_logs.r_get_by_filter')
-    if keyword is not None:
-        logs_url = host_url + url_for('api_logs.r_content_search')
-
-    if args.__len__() > 0:
-        logs_url = logs_url + '?' + '&'.join(args)
-
-    logs_ret = requests.get(url=logs_url, cookies=request.cookies)
-    logs_ret = json.loads(logs_ret.content)
-
-    last_page = int(ceil(logs_ret['paging']['total'] / float(page_size)))
-    page_length = 5
-    pages = list()
-    if page < int(ceil(page_length / 2.0)):
-        for i in range(1, page_length + 1):
-            pages.append(i)
-            if i == last_page or last_page == 0:
-                break
-
-    elif last_page - page < page_length / 2:
-        for i in range(last_page - page_length + 1, last_page + 1):
-            if i < 1:
-                continue
-            pages.append(i)
-
-    else:
-        for i in range(page - page_length / 2, page + int(ceil(page_length / 2.0))):
-            pages.append(i)
-            if i == last_page or last_page == 0:
-                break
-
-    return render_template('logs.html', logs_ret=logs_ret, resource_path=resource_path, page=page,
-                           page_size=page_size, keyword=keyword, pages=pages, order_by=order_by, order=order,
-                           last_page=last_page)
+    return render_template('logs.html', logs=ret['data']['logs'],
+                           resource_path=request.path, page=ret['data']['page'],
+                           page_size=ret['data']['page_size'], keyword=ret['data']['keyword'],
+                           paging=ret['data']['paging'],
+                           pages=ret['data']['pages'], order_by=ret['data']['order_by'], order=ret['data']['order'],
+                           last_page=ret['data']['last_page'])