@medflyt/test-db-service
Version:
Developer tool to instantly provision test PostgreSQL databases from a template
97 lines • 3.26 kB
JavaScript
;
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