Ver Fonte

support list endpoints by page up and down

laiwei há 8 anos atrás
pai
commit
c62b3842bc

+ 4 - 2
rrd/static/js/dashboard.js

@@ -3,9 +3,10 @@ function fn_list_endpoints()
     var qs = $.trim($("input[name='endpoint_search']").val());
     var tags = $.trim($("input[name='tag_search']").val());
     var limit = $("#endpoint-limit").val();
+    var page = $("#endpoint-page").val();
 
     $(".loading").show();
-    $.getJSON("/api/endpoints", {q: qs, tags: tags, limit:limit, _r:Math.random()}, function(ret){
+    $.getJSON("/api/endpoints", {q: qs, tags: tags, limit:limit, page:page, _r:Math.random()}, function(ret){
                 $(".loading").hide();
                 if (!ret.ok) {
                     err_message_quietly(ret.msg);
@@ -45,12 +46,13 @@ function fn_list_counters(){
     }
 
     var limit = $("#counter-limit").val();
+    var page = $("#counter-page").val();
     $(".loading").show();
     $.ajax({
         method: "POST",
         url: "/api/counters",
         dataType: "json",
-        data: {"eids": JSON.stringify(eids), "q": qs, "limit": limit, "_r": Math.random()},
+        data: {"eids": JSON.stringify(eids), "q": qs, "limit": limit, "page":page, "_r": Math.random()},
         success:function(ret){
             $(".loading").hide();
             if(ret.ok){

+ 22 - 3
rrd/templates/index.html

@@ -88,6 +88,13 @@
                                         <option value="100">Limit 100</option>
                                         <option value="500">Limit 500</option>
                                     </select>
+                                    <select class="form-control input-sm" id="endpoint-page" onchange="fn_list_endpoints();return false;">
+                                        {%for p in range(1, 21)%}
+                                        <option value="{{p}}"> page {{p}}</option>
+                                        {%endfor%}
+                                    </select>
+                                    <span class="cut-line">¦</span>
+                                    <button class="btn btn-default btn-sm" onclick="fn_delete_endpoints();return false;">删除endpoints</button>
                                 </div>
                             </form>
                             <hr/>
@@ -109,7 +116,6 @@
                                 </span>
                                 <span class="pull-right">
                                     <button class="btn btn-default btn-xs" onclick="fn_list_counters();return false;">刷新counter列表</button>
-                                    <button class="btn btn-default btn-xs" onclick="fn_delete_endpoints();return false;">删除endpoints</button>
                                 </span>
                                 </th>
                             </tr></thead>
@@ -118,7 +124,15 @@
                             <thead>
                                 <th width="15"></th> <th></th>
                             </thead>
-                            <tbody id="tbody-endpoints"> </tbody>
+                            <tbody id="tbody-endpoints">
+                                {%for obj in endpoint_objs%}
+                                <tr>
+                                <td><input type="checkbox" class="input shiftCheckbox"
+                                    data-eid="{{obj['id']}}"  data-fullname="{{obj['endpoint']}}"></input></td>
+                                <td>{{obj['endpoint']}}</td>
+                                </tr>
+                                {%endfor%}
+                            </tbody>
                         </table>
 
                     </div>
@@ -156,14 +170,19 @@
                                         <option value="100">Limit 100</option>
                                         <option value="500">Limit 500</option>
                                     </select>
+                                    <select class="form-control input-sm" id="counter-page" onchange="fn_list_counters();return false;">
+                                        {%for p in range(1, 21)%}
+                                        <option value="{{p}}"> page {{p}}</option>
+                                        {%endfor%}
+                                    </select>
                                 </div>
                                 <div class="form-group">
                                     <input id="counter-filter" type="text" class="form-control input-sm">
                                     <button class="btn btn-default btn-sm btn-info" onclick="filter_counter();return false;">快速过滤</button>
+                                    <button class="btn btn-default btn-sm" onclick="fn_delete_counters();return false;">删除counters</button>
                                 </div>
 
                                 <div class="dropdown form-group pull-right">
-                                    <button class="btn btn-default btn-sm" onclick="fn_delete_counters();return false;">删除counters</button>
                                     <a class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" href="#"> 看图 <span class="caret"></span></a>
                                     <ul class="dropdown-menu" role="menu">
                                       <li><a href="#" class="btn btn-link btn-xs" onclick="fn_show_all('h');return false;">Endpoint视角</a></li>

+ 1 - 1
rrd/templates/portal/alarm/case.html

@@ -55,7 +55,7 @@
 
         {% import "portal/blocks.html" as blocks %}
         <div class="pull-left">
-            {{ blocks.pager('/portal/alarm-dash/case', total, limit, page) }}
+            {{ blocks.pager('/portal/alarm-dash/case?status='+status, total, limit, page) }}
         </div>
 
     </div>

+ 4 - 1
rrd/templates/screen/screen_layout.html

@@ -130,10 +130,11 @@ $(function(){
         </li>
         {%for c in top_screens%}
         <li class="screen" role="presentation">
-            <span role="menuitem" style="padding:10px;margin:10px;"> 
+            <span role="menuitem" style="margin-left:15px;line-height:25px;"> 
             <a href="/screen/{{c.id}}"><small>{{c.name}}</small></a>
             <a href='/screen/{{c.id}}/delete' class="glyphicon glyphicon-remove pull-right" style="margin-right:10px;" onclick="return confirm('确定要删除这个screen?');"></a>
             </span>
+            <hr style="margin:5px;"/>
         </li>
         {%endfor%}
       </ul>
@@ -160,6 +161,8 @@ $(function(){
         {%for c in sub_screens%}
         <li class="screen" role="presentation">
             <a role="menuitem" href="/screen/{{c.id}}"><small>{{c.name}}</small></a>
+            <hr style="margin:2px;"/>
+        </li>
         </li>
         {%endfor%}
       </ul>

+ 0 - 126
rrd/view/api.py

@@ -1,126 +0,0 @@
-#-*- coding:utf-8 -*-
-import json
-import re
-from flask import request, abort, g
-from rrd import app, config
-from rrd import corelib
-
-@app.route("/api/endpoints")
-def api_endpoints():
-    ret = {
-            "ok": False,
-            "msg": "",
-            "data": [],
-            }
-
-    q = request.args.get("q") or ""
-    raw_tag = request.args.get("tags") or ""
-    tags = ','.join(re.split('\s*,\s*', raw_tag))
-    limit = int(request.args.get("limit") or 100)
-
-    if not q:
-        q = "."
-    if not q and not tags:
-        ret["msg"] = "no query params given"
-        return json.dumps(ret)
-
-    h = {"Content-type": "application/json"}
-    r = corelib.auth_requests("GET", config.API_ADDR + "/graph/endpoint?q=%s&limit=%d&tags=%s" %(q, limit, tags), headers=h)
-    if r.status_code != 200:
-        abort(400, r.text)
-
-    j = sorted(r.json(), key=lambda x:x["endpoint"])
-    endpoints = [x["endpoint"] for x in j]
-
-    ret['data'] = j
-    ret['ok'] = True
-
-    return json.dumps(ret)
-
-@app.route("/api/counters", methods=["POST"])
-def api_get_counters():
-    ret = {
-            "ok": False,
-            "msg": "",
-            "data": [],
-            }
-
-    q = request.form.get("q") or ""
-    limit = int(request.form.get("limit") or 100)
-    eids = request.form.get("eids") or ""
-    eids = eids and json.loads(eids) or []
-
-    if not (eids or q):
-        ret['msg'] = "no endpoints or counter given"
-        return json.dumps(ret)
-
-
-    h = {"Content-type": "application/json"}
-    r = corelib.auth_requests("GET", config.API_ADDR + "/graph/endpoint_counter?eid=%s&metricQuery=%s&limit=%s" %(",".join(eids), q, limit), headers=h)
-    if r.status_code != 200:
-        abort(400, r.text)
-    j = r.json()
-
-    counters_map = {}
-    for x in j:
-        counters_map[x['counter']] = [x['counter'], x['type'], x['step']]
-    sorted_counters = sorted(counters_map.keys())
-    sorted_values = [counters_map[x] for x in sorted_counters]
-
-    ret['data'] = sorted_values
-    ret['ok'] = True
-
-    return json.dumps(ret)
-
-
-@app.route("/api/counters", methods=["DELETE"])
-def api_delete_counters():
-    ret = {
-            "ok": False,
-            "msg": "",
-    }
-
-    endpoints = request.form.getlist("endpoints[]") or []
-    counters = request.form.getlist("counters[]") or []
-    if len(endpoints) == 0 or len(counters) == 0:
-        ret['msg'] = "no endpoint and counter"
-        return json.dumps(ret)
-
-    h = {"Content-type": "application/json"}
-    d = {
-            "endpoints": endpoints,
-            "counters": counters,
-    }
-    r = corelib.auth_requests("DELETE", config.API_ADDR + "/graph/counter", headers=h, data=json.dumps(d))
-    if r.status_code != 200:
-        abort(r.status_code, r.text)
-    j = r.json()
-
-    ret["ok"] = True
-    ret["data"] = "%s counters affected" %j.get("affected_counter")
-    return json.dumps(ret)
-
-
-@app.route("/api/endpoints", methods=["DELETE"])
-def api_delete_endpoints():
-    ret = {
-            "ok": False,
-            "msg": "",
-    }
-
-    endpoints = request.form.getlist("endpoints[]") or []
-    if len(endpoints) == 0:
-        ret['msg'] = "no endpoint"
-        return json.dumps(ret)
-
-    h = {"Content-type": "application/json"}
-    d = endpoints
-
-    r = corelib.auth_requests("DELETE", config.API_ADDR + "/graph/endpoint", headers=h, data=json.dumps(d))
-    if r.status_code != 200:
-        abort(r.status_code, r.text)
-    j = r.json()
-
-    ret["ok"] = True
-    ret["data"] = "%s counters affected, %s endpoints affected" %(j.get("affected_counter"), j.get("affected_endpoint"))
-    return json.dumps(ret)

+ 138 - 2
rrd/view/index.py

@@ -1,7 +1,143 @@
 #-*- coding:utf-8 -*-
-from flask import render_template
-from rrd import app
+import json
+import re
+from flask import request, abort, g, render_template
+from rrd import app, config
+from rrd import corelib
+
+
+def get_api_endpoints(q, tags, page=1, limit=100):
+    if not q and not tags:
+        raise Exception("no query params given")
+
+    h = {"Content-type": "application/json"}
+    r = corelib.auth_requests("GET", config.API_ADDR + "/graph/endpoint?q=%s&limit=%d&page=%d&tags=%s" %(q, limit, page, tags), headers=h)
+    if r.status_code != 200:
+        raise Exception(r.text)
+
+    j = sorted(r.json(), key=lambda x:x["endpoint"])
+
+    return j
+
 
 @app.route("/")
 def index():
+    q = request.args.get("q") or "."
+    raw_tag = request.args.get("tags") or ""
+    tags = ','.join(re.split('\s*,\s*', raw_tag))
+    limit = int(request.args.get("limit") or 50)
+    page = int(request.args.get("page") or 1)
+
+    endpoint_objs = get_api_endpoints(q, tags, page, limit)
     return render_template("index.html", **locals())
+
+@app.route("/api/endpoints")
+def api_endpoints():
+    ret = {
+            "ok": False,
+            "msg": "",
+            "data": [],
+            }
+
+    q = request.args.get("q") or "."
+    raw_tag = request.args.get("tags") or ""
+    tags = ','.join(re.split('\s*,\s*', raw_tag))
+    limit = int(request.args.get("limit") or 100)
+    page = int(request.args.get("page") or 1)
+
+    try:
+        data = get_api_endpoints(q, tags, page, limit)
+        ret['data'] = data
+        ret['ok'] = True
+        return json.dumps(ret)
+    except Exception as e:
+        abort(400, str(ret))
+
+@app.route("/api/counters", methods=["POST"])
+def api_get_counters():
+    ret = {
+            "ok": False,
+            "msg": "",
+            "data": [],
+            }
+
+    q = request.form.get("q") or ""
+    limit = int(request.form.get("limit") or 50)
+    page = int(request.form.get("page") or 1)
+    eids = request.form.get("eids") or ""
+    eids = eids and json.loads(eids) or []
+
+    if not (eids or q):
+        ret['msg'] = "no endpoints or counter given"
+        return json.dumps(ret)
+
+
+    h = {"Content-type": "application/json"}
+    r = corelib.auth_requests("GET", config.API_ADDR + "/graph/endpoint_counter?eid=%s&metricQuery=%s&limit=%d&page=%d" %(",".join(eids), q, limit, page), headers=h)
+    if r.status_code != 200:
+        abort(400, r.text)
+    j = r.json()
+
+    counters_map = {}
+    for x in j:
+        counters_map[x['counter']] = [x['counter'], x['type'], x['step']]
+    sorted_counters = sorted(counters_map.keys())
+    sorted_values = [counters_map[x] for x in sorted_counters]
+
+    ret['data'] = sorted_values
+    ret['ok'] = True
+
+    return json.dumps(ret)
+
+
+@app.route("/api/counters", methods=["DELETE"])
+def api_delete_counters():
+    ret = {
+            "ok": False,
+            "msg": "",
+    }
+
+    endpoints = request.form.getlist("endpoints[]") or []
+    counters = request.form.getlist("counters[]") or []
+    if len(endpoints) == 0 or len(counters) == 0:
+        ret['msg'] = "no endpoint and counter"
+        return json.dumps(ret)
+
+    h = {"Content-type": "application/json"}
+    d = {
+            "endpoints": endpoints,
+            "counters": counters,
+    }
+    r = corelib.auth_requests("DELETE", config.API_ADDR + "/graph/counter", headers=h, data=json.dumps(d))
+    if r.status_code != 200:
+        abort(r.status_code, r.text)
+    j = r.json()
+
+    ret["ok"] = True
+    ret["data"] = "%s counters affected" %j.get("affected_counter")
+    return json.dumps(ret)
+
+
+@app.route("/api/endpoints", methods=["DELETE"])
+def api_delete_endpoints():
+    ret = {
+            "ok": False,
+            "msg": "",
+    }
+
+    endpoints = request.form.getlist("endpoints[]") or []
+    if len(endpoints) == 0:
+        ret['msg'] = "no endpoint"
+        return json.dumps(ret)
+
+    h = {"Content-type": "application/json"}
+    d = endpoints
+
+    r = corelib.auth_requests("DELETE", config.API_ADDR + "/graph/endpoint", headers=h, data=json.dumps(d))
+    if r.status_code != 200:
+        abort(r.status_code, r.text)
+    j = r.json()
+
+    ret["ok"] = True
+    ret["data"] = "%s counters affected, %s endpoints affected" %(j.get("affected_counter"), j.get("affected_endpoint"))
+    return json.dumps(ret)