From a170fd6b4c87d41c5e096093e8ee10a762c58290 Mon Sep 17 00:00:00 2001 From: moisseev Date: Fri, 7 Aug 2020 19:08:31 +0300 Subject: [PATCH 1/2] [WebUI] Use /stat path to get stat instead of /auth path --- interface/js/app/stats.js | 92 ++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/interface/js/app/stats.js b/interface/js/app/stats.js index 4c7f5067b..26ac26b44 100644 --- a/interface/js/app/stats.js +++ b/interface/js/app/stats.js @@ -68,7 +68,16 @@ define(["jquery", "d3pie"], var stat_w = []; $.each(data, function (i, item) { - var widget = ""; + var widgetsOrder = ["scanned", "no action", "greylist", "add header", "reject", "learned"]; + + function widget(k, v) { + var titleAtt = d3.format(",")(v) + " " + k; + return '
' + + '
' + + d3.format(".3~s")(v) + "" + k + "
"; + } + if (i === "auth" || i === "error") return; // Skip to the next iteration if (i === "uptime" || i === "version") { var cls = "border-right "; @@ -77,27 +86,15 @@ define(["jquery", "d3pie"], cls = ""; val = msToTime(item); } - widget = "
" + val + - "" + i + "
"; - $(widget).appendTo(widgets); + $('
' + + val + "" + i + "
") + .appendTo(widgets); + } else if (i === "actions") { + $.each(item, function (action, count) { + stat_w[widgetsOrder.indexOf(action)] = widget(action, count); + }); } else { - var titleAtt = d3.format(",")(item) + " " + i; - widget = "
" + - d3.format(".3~s")(item) + "" + i + "
"; - if (i === "scanned") { - stat_w[0] = widget; - } else if (i === "clean") { - stat_w[1] = widget; - } else if (i === "greylist") { - stat_w[2] = widget; - } else if (i === "probable") { - stat_w[3] = widget; - } else if (i === "reject") { - stat_w[4] = widget; - } else if (i === "learned") { - stat_w[5] = widget; - } + stat_w[widgetsOrder.indexOf(i)] = widget(i, item); } }); $.each(stat_w, function (i, item) { @@ -146,22 +143,22 @@ define(["jquery", "d3pie"], var creds = JSON.parse(sessionStorage.getItem("Credentials")); if (!creds || !creds[checked_server]) return null; - var data = creds[checked_server].data; + var data = creds[checked_server].data.actions; var new_data = [{ color: "#66CC00", label: "Clean", - data: data.clean, - value: data.clean + data: data["no action"], + value: data["no action"] }, { color: "#BF8040", label: "Temporarily rejected", - data: data.soft_reject, - value: data.soft_reject + data: data["soft reject"], + value: data["soft reject"] }, { color: "#FFAD00", label: "Probable spam", - data: data.probable, - value: data.probable + data: data["add header"], + value: data["add header"] }, { color: "#436EEE", label: "Greylisted", @@ -179,34 +176,39 @@ define(["jquery", "d3pie"], // Public API var ui = { statWidgets: function (rspamd, graphs, checked_server) { - rspamd.query("auth", { + rspamd.query("stat", { success: function (neighbours_status) { var neighbours_sum = { version: neighbours_status[0].data.version, - auth: "ok", uptime: 0, - clean: 0, - probable: 0, - greylist: 0, - reject: 0, - soft_reject: 0, scanned: 0, learned: 0, - config_id: "" + actions: { + "no action": 0, + "add header": 0, + "greylist": 0, + "reject": 0, + "soft reject": 0, + } }; var status_count = 0; for (var e in neighbours_status) { if (neighbours_status[e].status === true) { - // Remove alert status + // Remove alert status localStorage.removeItem(e + "_alerted"); - neighbours_sum.clean += neighbours_status[e].data.clean; - neighbours_sum.probable += neighbours_status[e].data.probable; - neighbours_sum.greylist += neighbours_status[e].data.greylist; - neighbours_sum.reject += neighbours_status[e].data.reject; - neighbours_sum.soft_reject += neighbours_status[e].data.soft_reject; - neighbours_sum.scanned += neighbours_status[e].data.scanned; - neighbours_sum.learned += neighbours_status[e].data.learned; - neighbours_sum.uptime += neighbours_status[e].data.uptime; + + var data = neighbours_status[e].data; + for (var action in neighbours_sum.actions) { + if ({}.hasOwnProperty.call(neighbours_sum.actions, action)) { + neighbours_sum.actions[action] += data.actions[action]; + } + } + var items = ["learned", "scanned", "uptime"]; + for (var i in items) { + if ({}.hasOwnProperty.call(items, i)) { + neighbours_sum[items[i]] += data[items[i]]; + } + } status_count++; } } From 587c5215b6bab63f073fc202dcfe44fa3b84d725 Mon Sep 17 00:00:00 2001 From: moisseev Date: Fri, 7 Aug 2020 20:03:13 +0300 Subject: [PATCH 2/2] [WebUI] Use actions names as labels --- interface/js/app/config.js | 19 +++---------------- interface/js/app/graph.js | 12 ++++++------ interface/js/app/stats.js | 10 +++++----- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/interface/js/app/config.js b/interface/js/app/config.js index 8b391582b..082806088 100644 --- a/interface/js/app/config.js +++ b/interface/js/app/config.js @@ -33,27 +33,14 @@ define(["jquery", "codejar", "linenumbers", "prism"], $("#actionsFormField").empty(); var items = []; $.each(data[0].data, function (i, item) { - var idx = -1; - var label = null; - if (item.action === "greylist") { - label = "Greylist"; - idx = 0; - } else if (item.action === "add header") { - label = "Probably Spam"; - idx = 1; - } else if (item.action === "rewrite subject") { - label = "Rewrite subject"; - idx = 2; - } else if (item.action === "reject") { - label = "Spam"; - idx = 3; - } + var actionsOrder = ["greylist", "add header", "rewrite subject", "reject"]; + var idx = actionsOrder.indexOf(item.action); if (idx >= 0) { items.push({ idx: idx, html: '
' + - '" + + '" + '
' + '' + diff --git a/interface/js/app/graph.js b/interface/js/app/graph.js index 624566a8a..d2e3c5ac6 100644 --- a/interface/js/app/graph.js +++ b/interface/js/app/graph.js @@ -65,22 +65,22 @@ define(["jquery", "d3evolution", "footable"], legend: { space: 140, entries: [{ - label: "Rejected", + label: "reject", color: "#FF0000" }, { - label: "Temporarily rejected", + label: "soft reject", color: "#BF8040" }, { - label: "Subject rewritten", + label: "rewrite subject", color: "#FF6600" }, { - label: "Probable spam", + label: "add header", color: "#FFAD00" }, { - label: "Greylisted", + label: "greylist", color: "#436EEE" }, { - label: "Clean", + label: "no action", color: "#66CC00" }] } diff --git a/interface/js/app/stats.js b/interface/js/app/stats.js index 26ac26b44..18c3a2c08 100644 --- a/interface/js/app/stats.js +++ b/interface/js/app/stats.js @@ -146,27 +146,27 @@ define(["jquery", "d3pie"], var data = creds[checked_server].data.actions; var new_data = [{ color: "#66CC00", - label: "Clean", + label: "no action", data: data["no action"], value: data["no action"] }, { color: "#BF8040", - label: "Temporarily rejected", + label: "soft reject", data: data["soft reject"], value: data["soft reject"] }, { color: "#FFAD00", - label: "Probable spam", + label: "add header", data: data["add header"], value: data["add header"] }, { color: "#436EEE", - label: "Greylisted", + label: "greylist", data: data.greylist, value: data.greylist }, { color: "#FF0000", - label: "Rejected", + label: "reject", data: data.reject, value: data.reject }];