UNPKG

@medflyt/test-db-service

Version:

Developer tool to instantly provision test PostgreSQL databases from a template

97 lines 3.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitTillBackgroundServerStart = exports.backgroundServerSendShutdown = exports.getExistingServerStatus = void 0; const app_http_server_1 = require("./app_http_server"); const HttpClient_1 = require("./HttpUtils/HttpClient"); async function getExistingServerStatus() { try { const response = await HttpClient_1.httpReq("localhost", app_http_server_1.PORT, "HEAD", "/", {}, ""); if (response.statusCode >= 200 && response.statusCode <= 299) { return { type: "Running", version: parseServerHeader(response.headers["server"]) }; } else { return { type: "Faulty", errMessage: `Invalid HTTP Status Code: ${response.statusCode}`, httpStatus: response.statusCode }; } } catch (err) { if (err.code === "ECONNREFUSED") { return { type: "NotRunning" }; } else if (err.code === "ECONNRESET") { return { type: "Faulty", errMessage: `Error connecting to server: ${err.code} ${err.message}`, errCode: err.code }; } else if (err.code === "ETIMEDOUT") { return { type: "Faulty", errMessage: `Error connecting to server: ${err.code} ${err.message}`, errCode: err.code }; } else { return { type: "Faulty", errMessage: `Error connecting to server: ${err.code} ${err.message}`, errCode: err.code }; } } } exports.getExistingServerStatus = getExistingServerStatus; function parseServerHeader(value) { if (value === undefined) { return undefined; } if (typeof value === "string") { return value.split(" ")[1]; } return undefined; } /** * Any errors are silently ignored. * * After calling this, you should call `waitTillBackgroundServerStop` to wait * for the server background server to complete the shut down */ async function backgroundServerSendShutdown() { try { await HttpClient_1.httpReq("localhost", app_http_server_1.PORT, "POST", "/shutdown", {}, ""); } catch (err) { return; } } exports.backgroundServerSendShutdown = backgroundServerSendShutdown; /** * @returns `true` if we have detected that the server is now running. Returns * `false` if the server is not running (after the timeout) or if there is * some error detecting the status */ async function waitTillBackgroundServerStart() { const startTime = new Date(); while (true) { const status = await getExistingServerStatus(); if (status.type === "Running") { return true; } if (new Date().getTime() - startTime.getTime() > 30000) { return false; } await delay(50); } } exports.waitTillBackgroundServerStart = waitTillBackgroundServerStart; async function delay(millis) { return await new Promise(resolve => setTimeout(resolve, millis)); } //# sourceMappingURL=background_server_status.js.map