From 307d736a69b67cfea179c61f6d415f889c809da6 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 12:15:54 +0200 Subject: [PATCH 1/8] restructure health-check architecture --- packages/health-check/src/api/all.js | 8 --- packages/health-check/src/api/critical.js | 8 +++ packages/health-check/src/api/index.js | 78 +++++++++++++---------- packages/health-check/src/api/recent.js | 16 ----- packages/health-check/src/api/verbose.js | 8 +++ packages/health-check/src/db.js | 4 +- packages/health-check/src/index.js | 4 +- packages/health-check/src/schedule.js | 10 +-- 8 files changed, 71 insertions(+), 65 deletions(-) delete mode 100644 packages/health-check/src/api/all.js create mode 100644 packages/health-check/src/api/critical.js delete mode 100644 packages/health-check/src/api/recent.js create mode 100644 packages/health-check/src/api/verbose.js diff --git a/packages/health-check/src/api/all.js b/packages/health-check/src/api/all.js deleted file mode 100644 index 782e0e52..00000000 --- a/packages/health-check/src/api/all.js +++ /dev/null @@ -1,8 +0,0 @@ -const db = require("../db"); - -// returns all health check entries -module.exports = (req, res) => { - const entries = db.get("entries").orderBy("date", "desc").value(); - - res.send(entries); -}; diff --git a/packages/health-check/src/api/critical.js b/packages/health-check/src/api/critical.js new file mode 100644 index 00000000..6837d17e --- /dev/null +++ b/packages/health-check/src/api/critical.js @@ -0,0 +1,8 @@ +const db = require("../db"); + +// returns all critical health check entries +module.exports = (req, res) => { + const entries = db.get("critical").orderBy("date", "desc").value(); + + res.send(entries); +}; diff --git a/packages/health-check/src/api/index.js b/packages/health-check/src/api/index.js index 733fb61d..0f70c212 100644 --- a/packages/health-check/src/api/index.js +++ b/packages/health-check/src/api/index.js @@ -2,61 +2,75 @@ const { StatusCodes } = require("http-status-codes"); const { sum, sumBy } = require("lodash"); const db = require("../db"); -// getStatus returns the server's current health check status -function getStatus() { - const disabled = db.get("disabled").value(); +/** + * Get status code that should be returned in the API response. + * - OK (200) in case everything is healthy + * - SERVICE_UNAVAILABLE (503) in case of any failures or if disabled + */ +function getStatusCode() { + // check whether the portal has been manually disabled + const disabled = getDisabled(); if (disabled) { return StatusCodes.SERVICE_UNAVAILABLE; } - // Grab entry element from DB - const entry = db.get("entries").orderBy("date", "desc").head().value(); + // grab one most recent critical entry element from DB + const entry = getCurrentCriticalEntry(); - // Check that every critical check entry is up - if (entry && entry.checks.every(({ up, critical }) => up && critical)) { + // find out whether every check in the entry is up + if (entry && entry.checks.every(({ up }) => up)) { return StatusCodes.OK; } - // At least one check failed + // in case at least one check failed return StatusCodes.SERVICE_UNAVAILABLE; } -// getTimeout returns the average time out from a sample of 10 health check -// entries. -function getTimeout() { - if (getStatus() === StatusCodes.SERVICE_UNAVAILABLE) { - return 0; - } - - // Grab 10 entries from the database as a sample to determine the average - // timeout for the server. +/** + * Get the sample of most recent critical entries and + * calculate the avarage response time of all of them + */ +function getAvarageResponseTime() { + // get most recent 10 successfull checks for the calculation const sample = db - .get("entries") + .get("critical") .orderBy("date", "desc") - .filter(({ checks }) => checks.every(({ up, critical }) => up && critical)) + .filter(({ checks }) => checks.every(({ up }) => up)) .take(10) .value(); - // Return average timeout + // calculate avarage time of response return Math.round(sum(sample.map(({ checks }) => sumBy(checks, "time"))) / sample.size); } -// getEntriesSinceYesterday gets the health check entries since yesterday -function getEntriesSinceYesterday() { - const yesterday = new Date(); +/** + * Get one, most current critical entry + */ +function getCurrentCriticalEntry() { + return db.get("critical").orderBy("date", "desc").head().value(); +} - yesterday.setDate(yesterday.getDate() - 1); - - return db - .get("entries") - .orderBy("date", "desc") - .filter(({ date }) => date >= yesterday.toISOString()) - .value(); +/** + * Get the disabled flag state (manual portal disable) + */ +function getDisabled() { + return db.get("disabled").value(); } module.exports = (req, res) => { + const statusCode = getStatusCode(); + const timeout = statusCode === StatusCodes.OK ? getAvarageResponseTime() : 0; + + // We want to delay the response for the load balancer to be able to prioritize + // servers based on the successful response time of thid endpoint. Load balancer + // will pull the server if the response is an error so there is no point in delaying + // failures, hence 0 timeout on those. setTimeout(() => { - res.status(getStatus()).send(getEntriesSinceYesterday()); - }, getTimeout()); + // include some health information in the response body + const entry = getCurrentCriticalEntry(); + const disabled = getDisabled(); + + res.status(statusCode).send({ disabled, entry }); + }, timeout); }; diff --git a/packages/health-check/src/api/recent.js b/packages/health-check/src/api/recent.js deleted file mode 100644 index 600b5814..00000000 --- a/packages/health-check/src/api/recent.js +++ /dev/null @@ -1,16 +0,0 @@ -const db = require("../db"); - -// returns all health check entries that are not older than one day -module.exports = (req, res) => { - const yesterday = new Date(); - - yesterday.setDate(yesterday.getDate() - 1); - - const entries = db - .get("entries") - .orderBy("date", "desc") - .filter(({ date }) => date >= yesterday.toISOString()) - .value(); - - res.send(entries); -}; diff --git a/packages/health-check/src/api/verbose.js b/packages/health-check/src/api/verbose.js new file mode 100644 index 00000000..01a3a666 --- /dev/null +++ b/packages/health-check/src/api/verbose.js @@ -0,0 +1,8 @@ +const db = require("../db"); + +// returns all verbose health check entries +module.exports = (req, res) => { + const entries = db.get("verbose").orderBy("date", "desc").value(); + + res.send(entries); +}; diff --git a/packages/health-check/src/db.js b/packages/health-check/src/db.js index 48a734d6..bb4e7aad 100644 --- a/packages/health-check/src/db.js +++ b/packages/health-check/src/db.js @@ -5,9 +5,9 @@ const Memory = require("lowdb/adapters/Memory"); if (!fs.existsSync("state")) fs.mkdirSync("state"); -const adapter = process.env.NODE_ENV === "production" ? new FileSync("state/state.json") : new Memory(); +const adapter = new FileSync("state/state.json"); const db = low(adapter); -db.defaults({ disabled: false, entries: [] }).write(); +db.defaults({ disabled: false, critical: [], verbose: [] }).write(); module.exports = db; diff --git a/packages/health-check/src/index.js b/packages/health-check/src/index.js index 28838845..169e005b 100644 --- a/packages/health-check/src/index.js +++ b/packages/health-check/src/index.js @@ -18,8 +18,8 @@ server.use(bodyparser.urlencoded({ extended: false })); server.use(bodyparser.json()); server.get("/health-check", require("./api/index")); -server.get("/health-check/recent", require("./api/recent")); -server.get("/health-check/all", require("./api/all")); +server.get("/health-check/critical", require("./api/critical")); +server.get("/health-check/verbose", require("./api/verbose")); server.get("/health-check/disabled", require("./api/disabled")); server.listen(port, host, (error) => { diff --git a/packages/health-check/src/schedule.js b/packages/health-check/src/schedule.js index 72dc321b..0901361d 100644 --- a/packages/health-check/src/schedule.js +++ b/packages/health-check/src/schedule.js @@ -4,12 +4,12 @@ const { criticalChecks } = require("./checks/critical"); const { verboseChecks } = require("./checks/verbose"); // execute the critical health-check script every 5 minutes -const basicJob = schedule.scheduleJob("*/5 * * * *", async () => { +const criticalJob = schedule.scheduleJob("*/5 * * * *", async () => { const entry = { date: new Date().toISOString(), checks: [] }; entry.checks = await Promise.all(criticalChecks.map((check) => new Promise(check))); - db.get("entries").push(entry).write(); + db.get("critical").push(entry).write(); }); // execute the verbose health-check script once per hour @@ -18,11 +18,11 @@ const verboseJob = schedule.scheduleJob("0 * * * *", async () => { entry.checks = await Promise.all(verboseChecks.map((check) => new Promise(check))); - db.get("entries").push(entry).write(); + db.get("verbose").push(entry).write(); }); // Launch Health check jobs setTimeout(() => { - basicJob.invoke(); + criticalJob.invoke(); verboseJob.invoke(); -}, 60 * 1000); // delay for 60s to give other services time to start up +}, 60 * 0); // delay for 60s to give other services time to start up From c08d53f6e0ec86184a5dae55e776e36437d7f923 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 12:42:37 +0200 Subject: [PATCH 2/8] drop critical: true from existing checks --- packages/health-check/src/checks/critical.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/health-check/src/checks/critical.js b/packages/health-check/src/checks/critical.js index d8e41251..300deab1 100644 --- a/packages/health-check/src/checks/critical.js +++ b/packages/health-check/src/checks/critical.js @@ -17,7 +17,6 @@ async function uploadCheck(done) { up: statusCode === StatusCodes.OK, statusCode, time: calculateElapsedTime(time), - critical: true, }); }); } @@ -41,7 +40,6 @@ async function downloadCheck(done) { up: statusCode === StatusCodes.OK, statusCode, time: calculateElapsedTime(time), - critical: true, }); } From ec4655f5818413671616cedd70c96aa78c907be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Wypch=C5=82o?= Date: Thu, 10 Sep 2020 13:49:26 +0200 Subject: [PATCH 3/8] Apply suggestions from code review Co-authored-by: Ivaylo Novakov --- packages/health-check/src/api/index.js | 4 ++-- packages/health-check/src/schedule.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/health-check/src/api/index.js b/packages/health-check/src/api/index.js index 0f70c212..0d1ac900 100644 --- a/packages/health-check/src/api/index.js +++ b/packages/health-check/src/api/index.js @@ -15,7 +15,7 @@ function getStatusCode() { return StatusCodes.SERVICE_UNAVAILABLE; } - // grab one most recent critical entry element from DB + // grab the most recent critical entry element from DB const entry = getCurrentCriticalEntry(); // find out whether every check in the entry is up @@ -63,7 +63,7 @@ module.exports = (req, res) => { const timeout = statusCode === StatusCodes.OK ? getAvarageResponseTime() : 0; // We want to delay the response for the load balancer to be able to prioritize - // servers based on the successful response time of thid endpoint. Load balancer + // servers based on the successful response time of this endpoint. Load balancer // will pull the server if the response is an error so there is no point in delaying // failures, hence 0 timeout on those. setTimeout(() => { diff --git a/packages/health-check/src/schedule.js b/packages/health-check/src/schedule.js index 0901361d..7a2c6957 100644 --- a/packages/health-check/src/schedule.js +++ b/packages/health-check/src/schedule.js @@ -25,4 +25,4 @@ const verboseJob = schedule.scheduleJob("0 * * * *", async () => { setTimeout(() => { criticalJob.invoke(); verboseJob.invoke(); -}, 60 * 0); // delay for 60s to give other services time to start up +}, 60 * 1000); // delay for 60s to give other services time to start up From 6e0f387cf113010133c2cf1ed8689022c9fea2fc Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 14:03:56 +0200 Subject: [PATCH 4/8] code review changes --- packages/health-check/src/api/critical.js | 8 +++++++- packages/health-check/src/api/index.js | 9 ++++----- packages/health-check/src/api/verbose.js | 8 +++++++- packages/health-check/src/utils.js | 17 +++++++++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/packages/health-check/src/api/critical.js b/packages/health-check/src/api/critical.js index 6837d17e..a84b4d25 100644 --- a/packages/health-check/src/api/critical.js +++ b/packages/health-check/src/api/critical.js @@ -1,8 +1,14 @@ const db = require("../db"); +const { getYesterdayISOString } = require("../utils"); // returns all critical health check entries module.exports = (req, res) => { - const entries = db.get("critical").orderBy("date", "desc").value(); + const yesterday = getYesterdayISOString(); + const entries = db + .get("critical") + .orderBy("date", "desc") + .filter(({ date }) => date > yesterday) + .value(); res.send(entries); }; diff --git a/packages/health-check/src/api/index.js b/packages/health-check/src/api/index.js index 0d1ac900..387a1e12 100644 --- a/packages/health-check/src/api/index.js +++ b/packages/health-check/src/api/index.js @@ -18,13 +18,12 @@ function getStatusCode() { // grab the most recent critical entry element from DB const entry = getCurrentCriticalEntry(); - // find out whether every check in the entry is up - if (entry && entry.checks.every(({ up }) => up)) { - return StatusCodes.OK; + // in case there is no entry yet or at least one check failed in the most recent entry + if (!entry || entry.checks.some(({ up }) => !up)) { + return StatusCodes.SERVICE_UNAVAILABLE; } - // in case at least one check failed - return StatusCodes.SERVICE_UNAVAILABLE; + return StatusCodes.OK; } /** diff --git a/packages/health-check/src/api/verbose.js b/packages/health-check/src/api/verbose.js index 01a3a666..12acaa97 100644 --- a/packages/health-check/src/api/verbose.js +++ b/packages/health-check/src/api/verbose.js @@ -1,8 +1,14 @@ const db = require("../db"); +const { getYesterdayISOString } = require("../utils"); // returns all verbose health check entries module.exports = (req, res) => { - const entries = db.get("verbose").orderBy("date", "desc").value(); + const yesterday = getYesterdayISOString(); + const entries = db + .get("verbose") + .orderBy("date", "desc") + .filter(({ date }) => date > yesterday) + .value(); res.send(entries); }; diff --git a/packages/health-check/src/utils.js b/packages/health-check/src/utils.js index d95880c1..bd6bc79c 100644 --- a/packages/health-check/src/utils.js +++ b/packages/health-check/src/utils.js @@ -1,8 +1,21 @@ -// return the time between start and now in milliseconds +/** + * Get the time between start and now in milliseconds + */ function calculateElapsedTime(start) { const diff = process.hrtime(start); return Math.round((diff[0] * 1e9 + diff[1]) / 1e6); // msec } -module.exports = { calculateElapsedTime }; +/** + * Get the ISO string with yesterday's date set (- 24 hours) + */ +function getYesterdayISOString() { + const date = new Date(); + + date.setDate(date.getDate() - 1); + + return date.toISOString(); +} + +module.exports = { calculateElapsedTime, getYesterdayISOString }; From 70fd6b0f8fdb6a50fb9a1dac34a85c0d6b56a565 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 14:05:21 +0200 Subject: [PATCH 5/8] typo --- packages/health-check/src/api/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/health-check/src/api/index.js b/packages/health-check/src/api/index.js index 387a1e12..a2f3f61b 100644 --- a/packages/health-check/src/api/index.js +++ b/packages/health-check/src/api/index.js @@ -28,9 +28,9 @@ function getStatusCode() { /** * Get the sample of most recent critical entries and - * calculate the avarage response time of all of them + * calculate the average response time of all of them */ -function getAvarageResponseTime() { +function getAverageResponseTime() { // get most recent 10 successfull checks for the calculation const sample = db .get("critical") @@ -39,7 +39,7 @@ function getAvarageResponseTime() { .take(10) .value(); - // calculate avarage time of response + // calculate average time of response return Math.round(sum(sample.map(({ checks }) => sumBy(checks, "time"))) / sample.size); } @@ -59,7 +59,7 @@ function getDisabled() { module.exports = (req, res) => { const statusCode = getStatusCode(); - const timeout = statusCode === StatusCodes.OK ? getAvarageResponseTime() : 0; + const timeout = statusCode === StatusCodes.OK ? getAverageResponseTime() : 0; // We want to delay the response for the load balancer to be able to prioritize // servers based on the successful response time of this endpoint. Load balancer From 394ae44aa9dda7eae4080d5b2cf891d3447561cb Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 14:07:24 +0200 Subject: [PATCH 6/8] rename getCurrent -> getMostRecent --- packages/health-check/src/api/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/health-check/src/api/index.js b/packages/health-check/src/api/index.js index a2f3f61b..641b154a 100644 --- a/packages/health-check/src/api/index.js +++ b/packages/health-check/src/api/index.js @@ -16,7 +16,7 @@ function getStatusCode() { } // grab the most recent critical entry element from DB - const entry = getCurrentCriticalEntry(); + const entry = getMostRecentCriticalEntry(); // in case there is no entry yet or at least one check failed in the most recent entry if (!entry || entry.checks.some(({ up }) => !up)) { @@ -46,7 +46,7 @@ function getAverageResponseTime() { /** * Get one, most current critical entry */ -function getCurrentCriticalEntry() { +function getMostRecentCriticalEntry() { return db.get("critical").orderBy("date", "desc").head().value(); } @@ -67,7 +67,7 @@ module.exports = (req, res) => { // failures, hence 0 timeout on those. setTimeout(() => { // include some health information in the response body - const entry = getCurrentCriticalEntry(); + const entry = getMostRecentCriticalEntry(); const disabled = getDisabled(); res.status(statusCode).send({ disabled, entry }); From 2e240e2819c55acb882be09ca4410e806b9f46a3 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 14:13:28 +0200 Subject: [PATCH 7/8] simplify values assignment --- packages/health-check/src/schedule.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/health-check/src/schedule.js b/packages/health-check/src/schedule.js index 7a2c6957..70f4d44b 100644 --- a/packages/health-check/src/schedule.js +++ b/packages/health-check/src/schedule.js @@ -5,18 +5,20 @@ const { verboseChecks } = require("./checks/verbose"); // execute the critical health-check script every 5 minutes const criticalJob = schedule.scheduleJob("*/5 * * * *", async () => { - const entry = { date: new Date().toISOString(), checks: [] }; - - entry.checks = await Promise.all(criticalChecks.map((check) => new Promise(check))); + const entry = { + date: new Date().toISOString(), + checks: await Promise.all(criticalChecks.map((check) => new Promise(check))), + }; db.get("critical").push(entry).write(); }); // execute the verbose health-check script once per hour const verboseJob = schedule.scheduleJob("0 * * * *", async () => { - const entry = { date: new Date().toISOString(), checks: [] }; - - entry.checks = await Promise.all(verboseChecks.map((check) => new Promise(check))); + const entry = { + date: new Date().toISOString(), + checks: await Promise.all(verboseChecks.map((check) => new Promise(check))), + }; db.get("verbose").push(entry).write(); }); From 20362fe7c507f1c02f1e9eee7d0f8f036e8993c6 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Thu, 10 Sep 2020 15:16:31 +0200 Subject: [PATCH 8/8] fix health checks --- packages/health-check/src/checks/verbose.js | 478 +++++++++++++++++++- setup-scripts/health-checker.py | 2 +- 2 files changed, 474 insertions(+), 6 deletions(-) diff --git a/packages/health-check/src/checks/verbose.js b/packages/health-check/src/checks/verbose.js index 3374cd0a..c35c291d 100644 --- a/packages/health-check/src/checks/verbose.js +++ b/packages/health-check/src/checks/verbose.js @@ -60,9 +60,477 @@ function dappExampleCheck(done) { skylink: "EADWpKD0myqH2tZa6xtKebg6kNnwYnI94fl4R8UKgNrmOA", bodyHash: "d6ad2506590bb45b5acc6a8a964a3da4d657354f", metadata: { - filename: "/index.html", - length: 4131, - subfiles: { "index.html": { filename: "index.html", contenttype: "text/html", len: 4131 } }, + filename: "build", + length: 15578459, + subfiles: { + "451.html": { + filename: "451.html", + contenttype: "text/html", + offset: 40966, + len: 200, + }, + "asset-manifest.json": { + filename: "asset-manifest.json", + contenttype: "application/json", + offset: 35832, + len: 5134, + }, + "favicon.ico": { + filename: "favicon.ico", + contenttype: "image/vnd.microsoft.icon", + len: 31701, + }, + "index.html": { + filename: "index.html", + contenttype: "text/html", + offset: 31701, + len: 4131, + }, + "locales/de.json": { + filename: "locales/de.json", + contenttype: "application/json", + offset: 15542609, + len: 4376, + }, + "locales/en.json": { + filename: "locales/en.json", + contenttype: "application/json", + offset: 15558827, + len: 4049, + }, + "locales/es-AR.json": { + filename: "locales/es-AR.json", + contenttype: "application/json", + offset: 15551984, + len: 3624, + }, + "locales/es-US.json": { + filename: "locales/es-US.json", + contenttype: "application/json", + offset: 15574829, + len: 3630, + }, + "locales/it-IT.json": { + filename: "locales/it-IT.json", + contenttype: "application/json", + offset: 15538386, + len: 4223, + }, + "locales/ro.json": { + filename: "locales/ro.json", + contenttype: "application/json", + offset: 15562876, + len: 3794, + }, + "locales/ru.json": { + filename: "locales/ru.json", + contenttype: "application/json", + offset: 15546985, + len: 4999, + }, + "locales/vi.json": { + filename: "locales/vi.json", + contenttype: "application/json", + offset: 15569928, + len: 4901, + }, + "locales/zh-CN.json": { + filename: "locales/zh-CN.json", + contenttype: "application/json", + offset: 15555608, + len: 3219, + }, + "locales/zh-TW.json": { + filename: "locales/zh-TW.json", + contenttype: "application/json", + offset: 15566670, + len: 3258, + }, + "manifest.json": { + filename: "manifest.json", + contenttype: "application/json", + offset: 41166, + len: 297, + }, + "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js": { + filename: "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js", + contenttype: "text/javascript", + offset: 41463, + len: 4721, + }, + "service-worker.js": { + filename: "service-worker.js", + contenttype: "text/javascript", + offset: 46184, + len: 1185, + }, + "static/css/0.07de6c03.chunk.css": { + filename: "static/css/0.07de6c03.chunk.css", + contenttype: "text/css", + offset: 15537249, + len: 285, + }, + "static/css/0.07de6c03.chunk.css.map": { + filename: "static/css/0.07de6c03.chunk.css.map", + contenttype: "application/octet-stream", + offset: 15537818, + len: 568, + }, + "static/css/5.d75e0ccb.chunk.css": { + filename: "static/css/5.d75e0ccb.chunk.css", + contenttype: "text/css", + offset: 15537534, + len: 284, + }, + "static/css/5.d75e0ccb.chunk.css.map": { + filename: "static/css/5.d75e0ccb.chunk.css.map", + contenttype: "application/octet-stream", + offset: 15536511, + len: 738, + }, + "static/js/0.58b0f69f.chunk.js": { + filename: "static/js/0.58b0f69f.chunk.js", + contenttype: "text/javascript", + offset: 7300150, + len: 30029, + }, + "static/js/0.58b0f69f.chunk.js.map": { + filename: "static/js/0.58b0f69f.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12111459, + len: 81144, + }, + "static/js/1.19c370e0.chunk.js": { + filename: "static/js/1.19c370e0.chunk.js", + contenttype: "text/javascript", + offset: 15495781, + len: 40203, + }, + "static/js/1.19c370e0.chunk.js.map": { + filename: "static/js/1.19c370e0.chunk.js.map", + contenttype: "application/octet-stream", + offset: 7330179, + len: 104594, + }, + "static/js/10.8ea29dcd.chunk.js": { + filename: "static/js/10.8ea29dcd.chunk.js", + contenttype: "text/javascript", + offset: 15483299, + len: 12345, + }, + "static/js/10.8ea29dcd.chunk.js.map": { + filename: "static/js/10.8ea29dcd.chunk.js.map", + contenttype: "application/octet-stream", + offset: 14524416, + len: 30393, + }, + "static/js/11.764b8915.chunk.js": { + filename: "static/js/11.764b8915.chunk.js", + contenttype: "text/javascript", + offset: 12208196, + len: 7103, + }, + "static/js/11.764b8915.chunk.js.map": { + filename: "static/js/11.764b8915.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12192603, + len: 15593, + }, + "static/js/12.88d4fbe5.chunk.js": { + filename: "static/js/12.88d4fbe5.chunk.js", + contenttype: "text/javascript", + offset: 12055261, + len: 16721, + }, + "static/js/12.88d4fbe5.chunk.js.map": { + filename: "static/js/12.88d4fbe5.chunk.js.map", + contenttype: "application/octet-stream", + offset: 14460215, + len: 46695, + }, + "static/js/13.ea207f69.chunk.js": { + filename: "static/js/13.ea207f69.chunk.js", + contenttype: "text/javascript", + offset: 7168280, + len: 347, + }, + "static/js/13.ea207f69.chunk.js.map": { + filename: "static/js/13.ea207f69.chunk.js.map", + contenttype: "application/octet-stream", + offset: 6928538, + len: 563, + }, + "static/js/14.d8bc0d4c.chunk.js": { + filename: "static/js/14.d8bc0d4c.chunk.js", + contenttype: "text/javascript", + offset: 12870711, + len: 336, + }, + "static/js/14.d8bc0d4c.chunk.js.map": { + filename: "static/js/14.d8bc0d4c.chunk.js.map", + contenttype: "application/octet-stream", + offset: 15535984, + len: 527, + }, + "static/js/15.e6215497.chunk.js": { + filename: "static/js/15.e6215497.chunk.js", + contenttype: "text/javascript", + offset: 15495644, + len: 137, + }, + "static/js/15.e6215497.chunk.js.map": { + filename: "static/js/15.e6215497.chunk.js.map", + contenttype: "application/octet-stream", + offset: 6928431, + len: 107, + }, + "static/js/2.f6da9598.chunk.js": { + filename: "static/js/2.f6da9598.chunk.js", + contenttype: "text/javascript", + offset: 14506910, + len: 17506, + }, + "static/js/2.f6da9598.chunk.js.map": { + filename: "static/js/2.f6da9598.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12071982, + len: 39477, + }, + "static/js/5.5cc0868a.chunk.js": { + filename: "static/js/5.5cc0868a.chunk.js", + contenttype: "text/javascript", + offset: 10199338, + len: 1842002, + }, + "static/js/5.5cc0868a.chunk.js.LICENSE": { + filename: "static/js/5.5cc0868a.chunk.js.LICENSE", + contenttype: "application/octet-stream", + offset: 14554809, + len: 3119, + }, + "static/js/5.5cc0868a.chunk.js.map": { + filename: "static/js/5.5cc0868a.chunk.js.map", + contenttype: "application/octet-stream", + offset: 289328, + len: 6632626, + }, + "static/js/6.b7681521.chunk.js": { + filename: "static/js/6.b7681521.chunk.js", + contenttype: "text/javascript", + offset: 14237363, + len: 222852, + }, + "static/js/6.b7681521.chunk.js.map": { + filename: "static/js/6.b7681521.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12215299, + len: 655412, + }, + "static/js/7.0614dbc4.chunk.js": { + filename: "static/js/7.0614dbc4.chunk.js", + contenttype: "text/javascript", + offset: 6921954, + len: 6477, + }, + "static/js/7.0614dbc4.chunk.js.map": { + filename: "static/js/7.0614dbc4.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12041340, + len: 13921, + }, + "static/js/8.7975098c.chunk.js": { + filename: "static/js/8.7975098c.chunk.js", + contenttype: "text/javascript", + offset: 13796515, + len: 420712, + }, + "static/js/8.7975098c.chunk.js.LICENSE": { + filename: "static/js/8.7975098c.chunk.js.LICENSE", + contenttype: "application/octet-stream", + offset: 13796191, + len: 324, + }, + "static/js/8.7975098c.chunk.js.map": { + filename: "static/js/8.7975098c.chunk.js.map", + contenttype: "application/octet-stream", + offset: 12871047, + len: 925144, + }, + "static/js/9.cc860b76.chunk.js": { + filename: "static/js/9.cc860b76.chunk.js", + contenttype: "text/javascript", + offset: 14557928, + len: 920812, + }, + "static/js/9.cc860b76.chunk.js.LICENSE": { + filename: "static/js/9.cc860b76.chunk.js.LICENSE", + contenttype: "application/octet-stream", + offset: 15478740, + len: 4559, + }, + "static/js/9.cc860b76.chunk.js.map": { + filename: "static/js/9.cc860b76.chunk.js.map", + contenttype: "application/octet-stream", + offset: 7434773, + len: 2764565, + }, + "static/js/main.a7822f79.chunk.js": { + filename: "static/js/main.a7822f79.chunk.js", + contenttype: "text/javascript", + offset: 7168627, + len: 131523, + }, + "static/js/main.a7822f79.chunk.js.map": { + filename: "static/js/main.a7822f79.chunk.js.map", + contenttype: "application/octet-stream", + offset: 6929101, + len: 239179, + }, + "static/js/runtime-main.68d129c6.js": { + filename: "static/js/runtime-main.68d129c6.js", + contenttype: "text/javascript", + offset: 14217227, + len: 3546, + }, + "static/js/runtime-main.68d129c6.js.map": { + filename: "static/js/runtime-main.68d129c6.js.map", + contenttype: "application/octet-stream", + offset: 14220773, + len: 16590, + }, + "static/media/arrow-down-blue.cd061363.svg": { + filename: "static/media/arrow-down-blue.cd061363.svg", + contenttype: "image/svg+xml", + offset: 219284, + len: 326, + }, + "static/media/arrow-down-grey.c0dedd2f.svg": { + filename: "static/media/arrow-down-grey.c0dedd2f.svg", + contenttype: "image/svg+xml", + offset: 196726, + len: 326, + }, + "static/media/arrow-right-white.337ad716.png": { + filename: "static/media/arrow-right-white.337ad716.png", + contenttype: "image/png", + offset: 197052, + len: 12999, + }, + "static/media/arrow-right.d285b6cf.svg": { + filename: "static/media/arrow-right.d285b6cf.svg", + contenttype: "image/svg+xml", + offset: 289065, + len: 263, + }, + "static/media/circle-grey.ed2a1dad.svg": { + filename: "static/media/circle-grey.ed2a1dad.svg", + contenttype: "image/svg+xml", + offset: 210213, + len: 321, + }, + "static/media/circle.2d975615.svg": { + filename: "static/media/circle.2d975615.svg", + contenttype: "image/svg+xml", + offset: 210534, + len: 321, + }, + "static/media/coinbaseWalletIcon.62578f59.svg": { + filename: "static/media/coinbaseWalletIcon.62578f59.svg", + contenttype: "image/svg+xml", + offset: 220450, + len: 53626, + }, + "static/media/dropdown-blue.b20914ec.svg": { + filename: "static/media/dropdown-blue.b20914ec.svg", + contenttype: "image/svg+xml", + offset: 47369, + len: 164, + }, + "static/media/dropdown.7d32d2fa.svg": { + filename: "static/media/dropdown.7d32d2fa.svg", + contenttype: "image/svg+xml", + offset: 287941, + len: 164, + }, + "static/media/dropup-blue.b96d70e1.svg": { + filename: "static/media/dropup-blue.b96d70e1.svg", + contenttype: "image/svg+xml", + offset: 210051, + len: 162, + }, + "static/media/ethereum-logo.802c6eac.svg": { + filename: "static/media/ethereum-logo.802c6eac.svg", + contenttype: "image/svg+xml", + offset: 219610, + len: 840, + }, + "static/media/magnifying-glass.67440097.svg": { + filename: "static/media/magnifying-glass.67440097.svg", + contenttype: "image/svg+xml", + offset: 210855, + len: 8429, + }, + "static/media/metamask.023762b6.png": { + filename: "static/media/metamask.023762b6.png", + contenttype: "image/png", + offset: 61600, + len: 114217, + }, + "static/media/plus-blue.e8021e51.svg": { + filename: "static/media/plus-blue.e8021e51.svg", + contenttype: "image/svg+xml", + offset: 196237, + len: 190, + }, + "static/media/plus-grey.d8e0be7d.svg": { + filename: "static/media/plus-grey.d8e0be7d.svg", + contenttype: "image/svg+xml", + offset: 288875, + len: 190, + }, + "static/media/portisIcon.b234b2bf.png": { + filename: "static/media/portisIcon.b234b2bf.png", + contenttype: "image/png", + offset: 274076, + len: 13865, + }, + "static/media/question-mark.1ae4d9f4.svg": { + filename: "static/media/question-mark.1ae4d9f4.svg", + contenttype: "image/svg+xml", + offset: 175817, + len: 818, + }, + "static/media/question.cc0a2451.svg": { + filename: "static/media/question.cc0a2451.svg", + contenttype: "image/svg+xml", + offset: 288105, + len: 770, + }, + "static/media/spinner.be00fc4a.svg": { + filename: "static/media/spinner.be00fc4a.svg", + contenttype: "image/svg+xml", + offset: 47533, + len: 694, + }, + "static/media/trustWallet.edcc1ab5.png": { + filename: "static/media/trustWallet.edcc1ab5.png", + contenttype: "image/png", + offset: 176635, + len: 19602, + }, + "static/media/walletConnectIcon.8215855c.svg": { + filename: "static/media/walletConnectIcon.8215855c.svg", + contenttype: "image/svg+xml", + offset: 48227, + len: 13373, + }, + "static/media/x.5b8e2186.svg": { + filename: "static/media/x.5b8e2186.svg", + contenttype: "image/svg+xml", + offset: 196427, + len: 299, + }, + }, }, }; @@ -575,8 +1043,8 @@ function skylinkVerification(done, { name, skylink, bodyHash, metadata }) { } // Check if the metadata is valid by deep comparing expected value with response - const currentMetadata = - response.header["skynet-file-metadata"] && JSON.parse(response.header["skynet-file-metadata"]); + const metadataHeader = response.header["skynet-file-metadata"]; + const currentMetadata = metadataHeader && JSON.parse(metadataHeader); if (!isEqual(currentMetadata, metadata)) { entry.up = false; info.metadata = detailedDiff(currentMetadata, metadata); diff --git a/setup-scripts/health-checker.py b/setup-scripts/health-checker.py index bdf2b9ef..99aef8e9 100755 --- a/setup-scripts/health-checker.py +++ b/setup-scripts/health-checker.py @@ -55,7 +55,7 @@ async def run_checks(): try: await check_load_average() await check_disk() - await check_health() + # await check_health() # FIXME: adjust it to work with https://github.com/NebulousLabs/skynet-webportal/pull/389 except: trace = traceback.format_exc() print("[DEBUG] run_checks() failed.")