From 27a84759b18ae1ffe0597147b9f18eecb291461f Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Tue, 13 Jan 2026 01:55:22 +0100 Subject: [PATCH] reduce the cost to store the respnoses by lowering the limit and changing to brotli --- .../2025-10-15-0001-add-monitor-response-config.js | 2 +- server/model/heartbeat.js | 6 +++--- server/model/monitor.js | 6 +++--- src/pages/EditMonitor.vue | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/db/knex_migrations/2025-10-15-0001-add-monitor-response-config.js b/db/knex_migrations/2025-10-15-0001-add-monitor-response-config.js index d1f4ccf09..589e8aefc 100644 --- a/db/knex_migrations/2025-10-15-0001-add-monitor-response-config.js +++ b/db/knex_migrations/2025-10-15-0001-add-monitor-response-config.js @@ -2,7 +2,7 @@ exports.up = function (knex) { return knex.schema.alterTable("monitor", function (table) { table.boolean("save_response").notNullable().defaultTo(false); table.boolean("save_error_response").notNullable().defaultTo(true); - table.integer("response_max_length").notNullable().defaultTo(10240); // Default 10KB + table.integer("response_max_length").notNullable().defaultTo(256); // Default 256B }); }; diff --git a/server/model/heartbeat.js b/server/model/heartbeat.js index 19dbd4a6a..3b2c75a25 100644 --- a/server/model/heartbeat.js +++ b/server/model/heartbeat.js @@ -1,7 +1,7 @@ const { BeanModel } = require("redbean-node/dist/bean-model"); const zlib = require("node:zlib"); const { promisify } = require("node:util"); -const gunzip = promisify(zlib.gunzip); +const brotliDecompress = promisify(zlib.brotliDecompress); /** * status: @@ -73,8 +73,8 @@ class Heartbeat extends BeanModel { } try { - // Offload gzip decode from main event loop to libuv thread pool - return (await gunzip(Buffer.from(response, "base64"))).toString("utf8"); + // Offload brotli decode from main event loop to libuv thread pool + return (await brotliDecompress(Buffer.from(response, "base64"))).toString("utf8"); } catch (error) { return response; } diff --git a/server/model/monitor.js b/server/model/monitor.js index 50fdb2a2e..01d655f23 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -60,7 +60,7 @@ const https = require("https"); const http = require("http"); const zlib = require("node:zlib"); const { promisify } = require("node:util"); -const gzip = promisify(zlib.gzip); +const brotliCompress = promisify(zlib.brotliCompress); const DomainExpiry = require("./domain_expiry"); const rootCertificates = rootCertificatesFingerprints(); @@ -1174,8 +1174,8 @@ class Monitor extends BeanModel { responseData = responseData.substring(0, maxSize) + "... (truncated)"; } - // Offload gzip compression from main event loop to libuv thread pool - bean.response = (await gzip(Buffer.from(responseData, "utf8"))).toString("base64"); + // Offload brotli compression from main event loop to libuv thread pool + bean.response = (await brotliCompress(Buffer.from(responseData, "utf8"))).toString("base64"); } /** diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index b3d09d1b4..c629dca0f 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -2269,7 +2269,7 @@ const monitorDefaults = { accepted_statuscodes: ["200-299"], saveResponse: false, saveErrorResponse: true, - responseMaxLength: 10240, + responseMaxLength: 256, dns_resolve_type: "A", dns_resolve_server: "1.1.1.1", docker_container: "",