commit 5210699: [WebUI] Show message size in IEC (base 1024) units

moisseev moiseev at mezonplus.ru
Mon Jul 29 17:51:00 UTC 2024


Author: moisseev
Date: 2023-12-30 18:06:40 +0300
URL: https://github.com/rspamd/rspamd/commit/5210699735731b5ea9851cea772e47d0191ee83d (refs/pull/4765/head)

[WebUI] Show message size in IEC (base 1024) units

---
 .eslintrc.json              |  3 +++
 interface/js/app/history.js |  6 +++---
 interface/js/app/libft.js   | 22 +++++++++++++++++++---
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index 6aa347e1d..b9dbe1679 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -10,6 +10,9 @@
     "globals": {
         "define": false
     },
+    "parserOptions": {
+        "ecmaVersion": 2016
+    },
     "plugins": [
       "@stylistic"
     ],
diff --git a/interface/js/app/history.js b/interface/js/app/history.js
index f2b8b8e46..0d953ec1e 100644
--- a/interface/js/app/history.js
+++ b/interface/js/app/history.js
@@ -24,8 +24,8 @@
 
 /* global FooTable */
 
-define(["jquery", "app/common", "app/libft", "d3", "footable"],
-    ($, common, libft, d3) => {
+define(["jquery", "app/common", "app/libft", "footable"],
+    ($, common, libft) => {
         "use strict";
         const ui = {};
         let prevVersion = null;
@@ -94,7 +94,7 @@ define(["jquery", "app/common", "app/libft", "d3", "footable"],
                 title: "Message size",
                 breakpoints: "xs sm",
                 style: {width: 120, maxWidth: 120},
-                formatter: d3.format(".3~s")
+                formatter: libft.formatBytesIEC
             }, {
                 name: "scan_time",
                 title: "Scan time",
diff --git a/interface/js/app/libft.js b/interface/js/app/libft.js
index eab3b6d3a..463ddec16 100644
--- a/interface/js/app/libft.js
+++ b/interface/js/app/libft.js
@@ -1,7 +1,7 @@
 /* global FooTable */
 
-define(["jquery", "app/common", "d3", "footable"],
-    ($, common, d3) => {
+define(["jquery", "app/common", "footable"],
+    ($, common) => {
         "use strict";
         const ui = {};
 
@@ -35,6 +35,22 @@ define(["jquery", "app/common", "d3", "footable"],
 
         // Public functions
 
+        ui.formatBytesIEC = function (bytes) {
+            // FooTable represents data as text even column type is "number".
+            if (!Number.isInteger(Number(bytes)) || bytes < 0) return "NaN";
+
+            const base = 1024;
+            const exponent = Math.floor(Math.log(bytes) / Math.log(base));
+
+            if (exponent > 8) return "∞";
+
+            const value = parseFloat((bytes / (base ** exponent)).toPrecision(3));
+            let unit = "BKMGTPEZY"[exponent];
+            if (exponent) unit += "iB";
+
+            return value + " " + unit;
+        };
+
         ui.columns_v2 = function (table) {
             return [{
                 name: "id",
@@ -125,7 +141,7 @@ define(["jquery", "app/common", "d3", "footable"],
                 title: "Msg size",
                 breakpoints: "xs sm md",
                 style: {minwidth: 50},
-                formatter: d3.format(".3~s")
+                formatter: ui.formatBytesIEC
             }, {
                 name: "time_real",
                 title: "Scan time",


More information about the Commits mailing list