diff --git a/packages/health-check/src/checks/critical.js b/packages/health-check/src/checks/critical.js index 4fe48f39..a39ad8a2 100644 --- a/packages/health-check/src/checks/critical.js +++ b/packages/health-check/src/checks/critical.js @@ -1,7 +1,10 @@ const got = require("got"); const FormData = require("form-data"); -const { StatusCodes } = require("http-status-codes"); const { calculateElapsedTime, getResponseContent } = require("../utils"); +const { SkynetClient } = require("skynet-js"); + +const skynetClient = new SkynetClient(process.env.SKYNET_PORTAL_API); +const exampleSkylink = "AACogzrAimYPG42tDOKhS3lXZD8YvlF8Q8R17afe95iV2Q"; // uploadCheck returns the result of uploading a sample file async function uploadCheck(done) { @@ -25,37 +28,33 @@ async function uploadCheck(done) { data.ip = error?.response?.ip ?? null; } - done({ - name: "upload_file", - time: calculateElapsedTime(time), - ...data, - }); + done({ name: "upload_file", time: calculateElapsedTime(time), ...data }); +} + +// websiteCheck checks whether the main website is working +async function websiteCheck(done) { + return genericAccessCheck("website", process.env.SKYNET_PORTAL_API, done); } // downloadCheck returns the result of downloading the hard coded link async function downloadCheck(done) { - const time = process.hrtime(); - const skylink = "AACogzrAimYPG42tDOKhS3lXZD8YvlF8Q8R17afe95iV2Q"; - const data = { up: false }; + const url = await skynetClient.getSkylinkUrl(exampleSkylink); - try { - const response = await got(`${process.env.SKYNET_PORTAL_API}/${skylink}?nocache=true`); + return genericAccessCheck("skylink", url, done); +} - data.statusCode = response.statusCode; - data.up = true; - data.ip = response.ip; - } catch (error) { - data.statusCode = error?.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); - data.ip = error?.response?.ip ?? null; - } +// skylinkSubdomainCheck returns the result of downloading the hard coded link via subdomain +async function skylinkSubdomainCheck(done) { + const url = await skynetClient.getSkylinkUrl(exampleSkylink, { subdomain: true }); - done({ - name: "download_file", - time: calculateElapsedTime(time), - ...data, - }); + return genericAccessCheck("skylink_via_subdomain", done); +} + +// skylinkSubdomainCheck returns the result of downloading the hard coded link via subdomain +async function handshakeSubdomainCheck(done) { + const url = await skynetClient.getHnsUrl("note-to-self", { subdomain: true }); + + return genericAccessCheck("hns_via_subdomain", url, done); } async function accountHealthCheck(done) { @@ -83,7 +82,27 @@ async function accountHealthCheck(done) { }); } -const checks = [uploadCheck, downloadCheck]; +async function genericAccessCheck(name, url, done) { + const time = process.hrtime(); + const data = { up: false, url }; + + try { + const response = await got(url, { headers: { cookie: "nocache=true" } }); + + data.statusCode = response.statusCode; + data.up = true; + data.ip = response.ip; + } catch (error) { + data.statusCode = error?.response?.statusCode || error.statusCode || error.status; + data.errorMessage = error.message; + data.errorResponseContent = getResponseContent(error.response); + data.ip = error?.response?.ip ?? null; + } + + done({ name, time: calculateElapsedTime(time), ...data }); +} + +const checks = [uploadCheck, websiteCheck, downloadCheck, skylinkSubdomainCheck, handshakeSubdomainCheck]; if (process.env.ACCOUNTS_ENABLED) { checks.push(accountHealthCheck);