]> source.dussan.org Git - rspamd.git/commitdiff
[WebUI] Use /auth to get data missing in /stat 3471/head
authormoisseev <moiseev@mezonplus.ru>
Fri, 14 Aug 2020 10:43:02 +0000 (13:43 +0300)
committermoisseev <moiseev@mezonplus.ru>
Fri, 14 Aug 2020 10:43:02 +0000 (13:43 +0300)
response on legacy servers.

Namely "config_id", "version" and "uptime".

interface/js/app/stats.js

index f5a66c603376edf0902dba41d031eb4b39cdb9d3..d9fda8f6afa3765c9dd0301f4c4c827356f81a90 100644 (file)
@@ -113,15 +113,20 @@ define(["jquery", "d3pie"],
                 var version = "???";
                 var uptime = "???";
                 var short_id = "???";
-                if (!("config_id" in val.data)) {
-                    val.data.config_id = "";
-                }
                 if (val.status) {
                     row_class = "success";
                     glyph_status = "fas fa-check";
-                    uptime = msToTime(val.data.uptime);
-                    version = val.data.version;
-                    short_id = val.data.config_id.substring(0, 8);
+                    if (Number.isFinite(val.data.uptime)) {
+                        uptime = msToTime(val.data.uptime);
+                    }
+                    if ("version" in val.data) {
+                        version = val.data.version;
+                    }
+                    if (key === "All SERVERS") {
+                        short_id = "";
+                    } else if ("config_id" in val.data) {
+                        short_id = val.data.config_id.substring(0, 8);
+                    }
                 }
 
                 $("#clusterTable tbody").append('<tr class="' + row_class + '">' +
@@ -130,7 +135,9 @@ define(["jquery", "d3pie"],
                 "<td>" + val.host + "</td>" +
                 '<td class="text-center"><span class="icon"><i class="' + glyph_status + '"></i></span></td>' +
                 '<td class="text-right' +
-                  (val.data.uptime < 3600 ? ' warning" title="Has been restarted within the last hour"' : "") +
+                  ((Number.isFinite(val.data.uptime) && val.data.uptime < 3600)
+                      ? ' warning" title="Has been restarted within the last hour"'
+                      : "") +
                   '">' + uptime + "</td>" +
                 "<td>" + version + "</td>" +
                 "<td>" + short_id + "</td></tr>");
@@ -251,42 +258,78 @@ define(["jquery", "d3pie"],
                             }
                         };
                         var status_count = 0;
-                        for (var e in neighbours_status) {
-                            if (neighbours_status[e].status === true) {
-                                // Remove alert status
-                                sessionStorage.removeItem("alerted_stats_" + neighbours_status[e].name);
+                        var promises = [];
+                        var to_Credentials = {
+                            "All SERVERS": {
+                                name: "All SERVERS",
+                                url: "",
+                                host: "",
+                                checked: true,
+                                status: true
+                            }
+                        };
+
+                        function process_node_stat(e) {
+                            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];
+                                }
+                            }
+                            ["learned", "scanned", "uptime"].forEach(function (p) {
+                                neighbours_sum[p] += data[p];
+                            });
+                            status_count++;
+                        }
 
-                                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];
+                        // Get config_id, version and uptime using /auth query for Rspamd 2.5 and earlier
+                        function get_legacy_stat(e) {
+                            var alerted = "alerted_stats_legacy_" + neighbours_status[e].name;
+                            promises.push($.ajax({
+                                url: neighbours_status[e].url + "auth",
+                                headers: {Password:rspamd.getPassword()},
+                                success: function (data) {
+                                    sessionStorage.removeItem(alerted);
+                                    ["config_id", "version", "uptime"].forEach(function (p) {
+                                        neighbours_status[e].data[p] = data[p];
+                                    });
+                                    process_node_stat(e);
+                                },
+                                error: function (jqXHR, textStatus, errorThrown) {
+                                    if (!(alerted in sessionStorage)) {
+                                        sessionStorage.setItem(alerted, true);
+                                        rspamd.alertMessage("alert-error", neighbours_status[e].name + " > " +
+                                          "Cannot receive legacy stats data" + (errorThrown ? ": " + errorThrown : ""));
                                     }
+                                    process_node_stat(e);
                                 }
-                                var items = ["learned", "scanned", "uptime"];
-                                for (var i in items) {
-                                    if ({}.hasOwnProperty.call(items, i)) {
-                                        neighbours_sum[items[i]] += data[items[i]];
+                            }));
+                        }
+
+                        for (var e in neighbours_status) {
+                            if ({}.hasOwnProperty.call(neighbours_status, e)) {
+                                to_Credentials[neighbours_status[e].name] = neighbours_status[e];
+                                if (neighbours_status[e].status === true) {
+                                    // Remove alert status
+                                    sessionStorage.removeItem("alerted_stats_" + neighbours_status[e].name);
+
+                                    if ({}.hasOwnProperty.call(neighbours_status[e].data, "version")) {
+                                        process_node_stat(e);
+                                    } else {
+                                        get_legacy_stat(e);
                                     }
                                 }
-                                status_count++;
                             }
                         }
-                        neighbours_sum.uptime = Math.floor(neighbours_sum.uptime / status_count);
-                        var to_Credentials = {};
-                        to_Credentials["All SERVERS"] = {
-                            name: "All SERVERS",
-                            url: "",
-                            host: "",
-                            checked: true,
-                            data: neighbours_sum,
-                            status: true
-                        };
-                        neighbours_status.forEach(function (elmt) {
-                            to_Credentials[elmt.name] = elmt;
-                        });
-                        sessionStorage.setItem("Credentials", JSON.stringify(to_Credentials));
-                        displayStatWidgets(checked_server);
-                        graphs.chart = getChart(rspamd, graphs.chart, checked_server);
+                        setTimeout(function () {
+                            $.when.apply($, promises).always(function () {
+                                neighbours_sum.uptime = Math.floor(neighbours_sum.uptime / status_count);
+                                to_Credentials["All SERVERS"].data = neighbours_sum;
+                                sessionStorage.setItem("Credentials", JSON.stringify(to_Credentials));
+                                displayStatWidgets(checked_server);
+                                graphs.chart = getChart(rspamd, graphs.chart, checked_server);
+                            });
+                        }, promises.length ? 100 : 0);
                     },
                     errorMessage: "Cannot receive stats data",
                     errorOnceId: "alerted_stats_",