diff --git a/packages/health-check/cli b/packages/health-check/cli new file mode 100755 index 00000000..8e7ee861 --- /dev/null +++ b/packages/health-check/cli @@ -0,0 +1,80 @@ +#!/usr/bin/env node + +process.env.NODE_ENV = process.env.NODE_ENV || "production"; + +require("yargs/yargs")(process.argv.slice(2)) + .command( + "enable", + "Mark portal as enabled", + () => {}, + () => { + const db = require("./src/db"); + + db.set("disabled", false).write(); + } + ) + .command( + "disable ", + "Mark portal as disabled (provide meaningful reason)", + () => {}, + ({ reason }) => { + const db = require("./src/db"); + + db.set("disabled", reason).write(); + } + ) + .command( + "run ", + "Skynet portal health checks", + (yargs) => { + yargs + .positional("type", { + describe: "Type of checks to run", + type: "string", + choices: ["critical", "extended"], + }) + .option("portal-url", { + describe: "Skynet portal url", + default: process.env.SKYNET_PORTAL_API || "https://siasky.net", + type: "string", + }) + .option("state-dir", { + describe: "State directory", + default: process.env.STATE_DIR || "state", + type: "string", + }); + }, + async ({ type, portalUrl, stateDir }) => { + process.env.SKYNET_PORTAL_API = portalUrl; + process.env.STATE_DIR = stateDir; + + const util = require("util"); + const { getYesterdayISOString } = require("./src/utils"); + const createMiddleware = require("./src/checks/middleware"); + const db = require("./src/db"); + const checks = require(`./src/checks/${type}`); + const middleware = await createMiddleware(); + + const entry = { + date: new Date().toISOString(), + checks: (await Promise.all(checks.map((check) => new Promise(check)))).map(middleware), + }; + + db.read() // read before writing to make sure no external changes are overwritten + .get(type) // get the list of records of given type + .push(entry) // insert new record + .remove(({ date }) => date < getYesterdayISOString()) // drop old records + .write(); + + // exit with code 1 if any of the checks report failure + if (entry.checks.some(({ up }) => !up)) { + console.log( + util.inspect( + entry.checks.filter(({ up }) => !up), + { colors: true, depth: 7 } // increase depth to ensure errors are printed + ) + ); + process.exit(1); + } + } + ).argv; diff --git a/packages/health-check/cli/disable b/packages/health-check/cli/disable deleted file mode 100755 index 05736671..00000000 --- a/packages/health-check/cli/disable +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node - -process.env.NODE_ENV = process.env.NODE_ENV || "production"; - -const db = require("../src/db"); - -db.set("disabled", true).write(); diff --git a/packages/health-check/cli/enable b/packages/health-check/cli/enable deleted file mode 100755 index 13cc1341..00000000 --- a/packages/health-check/cli/enable +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node - -process.env.NODE_ENV = process.env.NODE_ENV || "production"; - -const db = require("../src/db"); - -db.set("disabled", false).write(); diff --git a/packages/health-check/cli/run b/packages/health-check/cli/run deleted file mode 100755 index a196b31b..00000000 --- a/packages/health-check/cli/run +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env node - -process.env.NODE_ENV = process.env.NODE_ENV || "production"; - -require("../src/run.js"); diff --git a/packages/health-check/src/run.js b/packages/health-check/src/run.js deleted file mode 100644 index d0606f47..00000000 --- a/packages/health-check/src/run.js +++ /dev/null @@ -1,56 +0,0 @@ -const util = require("util"); -const { getYesterdayISOString } = require("./utils"); -const createMiddleware = require("./checks/middleware"); - -require("yargs/yargs")(process.argv.slice(2)).command( - "$0 ", - "Skynet portal health checks", - (yargs) => { - yargs - .positional("type", { - describe: "Type of checks to run", - type: "string", - choices: ["critical", "extended"], - }) - .option("portal-url", { - describe: "Skynet portal url", - default: process.env.SKYNET_PORTAL_API || "https://siasky.net", - type: "string", - }) - .option("state-dir", { - describe: "State directory", - default: process.env.STATE_DIR || "state", - type: "string", - }); - }, - async ({ type, portalUrl, stateDir }) => { - process.env.SKYNET_PORTAL_API = portalUrl; - process.env.STATE_DIR = stateDir; - - const db = require("../src/db"); - const checks = require(`../src/checks/${type}`); - const middleware = await createMiddleware(); - - const entry = { - date: new Date().toISOString(), - checks: (await Promise.all(checks.map((check) => new Promise(check)))).map(middleware), - }; - - db.read() // read before writing to make sure no external changes are overwritten - .get(type) // get the list of records of given type - .push(entry) // insert new record - .remove(({ date }) => date < getYesterdayISOString()) // drop old records - .write(); - - // exit with code 1 if any of the checks report failure - if (entry.checks.some(({ up }) => !up)) { - console.log( - util.inspect( - entry.checks.filter(({ up }) => !up), - { colors: true, depth: 7 } // increase depth to ensure errors are printed - ) - ); - process.exit(1); - } - } -).argv;