laiwei 8 rokov pred
rodič
commit
631bc0f2d7

+ 15 - 0
rrd/model/portal/alarm.py

@@ -0,0 +1,15 @@
+# -*- coding:utf-8 -*-
+from .bean import Bean
+
+class EventCase(Bean):
+    _tbl = 'event_cases'
+    _cols = ''
+
+class Event(Bean):
+    _tbl = 'events'
+    _cols = ''
+
+class EventNote(Bean):
+    _tbl = 'event_note'
+    _cols = ''
+

+ 47 - 0
rrd/static/js/portal.js

@@ -625,3 +625,50 @@ function delete_cluster_monitor_item(cluster_id) {
         return false;
     });
 }
+
+// - alarm-dash business function -
+function events_all_select() {
+    var boxes = $("input[type=checkbox]");
+    for (var i = 0; i < boxes.length; i++) {
+        boxes[i].checked="checked";
+    }
+}
+
+function events_reverse_select() {
+    var boxes = $("input[type=checkbox]");
+    for (var i = 0; i < boxes.length; i++) {
+        if (boxes[i].checked) {
+            boxes[i].checked=""
+        } else {
+            boxes[i].checked="checked";
+        }
+    }
+}
+
+function events_batch_solve() {
+    var boxes = $("input[type=checkbox]");
+    var ids = []
+    for (var i = 0; i < boxes.length; i++) {
+        if (boxes[i].checked) {
+            ids.push($(boxes[i]).attr("alarm"))
+        }
+    }
+
+    $.post("/portal/event/solve", {"ids": ids.join(',,')}, function(msg){
+        if (msg=="") {
+            location.reload();
+        } else {
+            alert(msg);
+        }
+    });
+}
+
+function events_solve(id) {
+    $.post("/portal/event/solve", {"ids": id}, function(msg){
+        if (msg=="") {
+            location.reload();
+        } else {
+            alert(msg);
+        }
+    });
+}

+ 30 - 0
rrd/templates/portal/alarm/index.html

@@ -0,0 +1,30 @@
+{% extends "portal/layout.html" %}
+{% block content %}
+
+    <div class="panel panel-danger">
+        <div class="panel-heading">
+            <h3 class="panel-title">未恢复的报警</h3>
+        </div>
+        <div class="panel-body">
+            <div class="alarms">
+                {{range Events}}
+                <div class="alarm">
+                    <input type="checkbox" alarm="{{Id}}">
+                    [P{{Priority}} #{{CurrentStep}}/{{MaxStep}}] {{Counter}}<br>
+                    <span style="padding-left:17px;">{{Func}} {{LeftValue}}{{Operator}}{{RightValue}} {{Note}}</span>
+                    <span class="orange">{{duration Now Timestamp}}</span>
+                    <span class="gray">[</span>
+                    <a href="{{Link}}" target="_blank">config</a>
+                    <span class="cut-line">¦</span>
+                    <a href="javascript:events_solve('{{.Id}}');">solved</a>
+                    <span class="gray">]</span>
+                </div>
+                <hr>
+                {{end}}
+                <a href="javascript:events_all_select();">全选</a>/<a href="javascript:events_reverse_select();">反选</a>
+                <button class="btn btn-warning btn-sm" onclick="events_batch_solve();">标记选中部分为已解决</button>
+            </div>
+        </div>
+    </div>
+
+{%endblock%}

+ 1 - 0
rrd/view/portal/__init__.py

@@ -12,4 +12,5 @@ __all__ = [
         "plugin",
         "strategy",
         "template",
+        "alarm",
         ]

+ 7 - 0
rrd/view/portal/alarm.py

@@ -0,0 +1,7 @@
+#-*- coding:utf-8 -*-
+from flask import jsonify, render_template, request, g
+from rrd import app
+
+@app.route("/portal/alarm-dash")
+def alarm_dash_get():
+    return render_template("portal/alarm/index.html", **locals())