server-status-check
Version:
query the server periodically to check whether it is up
42 lines (39 loc) • 1.74 kB
text/typescript
import fs from 'fs';
import { LoadDictElement } from 'di-why/build/src/DiContainer';
import { existsDir } from 'swiss-army-knifey/build/src/utils/promiseFs';
import { CheckStatusFactory, CheckStatusFunc, Env, GetRequestor } from '../requestor';
import Logger from 'saylo';
type DetermnineStatusFactoryProps = { getRequestor: GetRequestor; SSC_USER_PROJECT_ROOT_DIR: string ;SSC_USER_CHECK_FILE_ROOT_RELATIVE_PATH: string, SSC_ENV: string; logger: Logger; env: Env};
const loadDictElement: LoadDictElement<Promise<CheckStatusFunc>> = {
factory: async function ({
getRequestor,
SSC_USER_PROJECT_ROOT_DIR,
SSC_ENV,
SSC_USER_CHECK_FILE_ROOT_RELATIVE_PATH,
logger,
env,
}: DetermnineStatusFactoryProps) {
const statusCheckScriptsDir = `${SSC_USER_PROJECT_ROOT_DIR}/${SSC_USER_CHECK_FILE_ROOT_RELATIVE_PATH}`;
const filename = 'check.js'
const filepath = `${statusCheckScriptsDir}/${filename}`;
try {
if (!await existsDir(statusCheckScriptsDir) || !fs.existsSync(filepath)) {
throw new Error(`You must create a file in your project root under "${filepath}". SSC_USER_PROJECT_ROOT_DIR is: "${SSC_USER_PROJECT_ROOT_DIR}", SSC_ENV is: "${SSC_ENV}"`);
}
const checkFactory: { default: CheckStatusFactory; } = await import(filepath);
return checkFactory.default({ getRequestor, logger, env });
} catch(err) {
logger.log('ERROR: ', err);
throw err;
}
},
locateDeps: {
getRequestor: 'getRequestor',
SSC_USER_PROJECT_ROOT_DIR: 'SSC_USER_PROJECT_ROOT_DIR',
SSC_USER_CHECK_FILE_ROOT_RELATIVE_PATH: 'SSC_USER_CHECK_FILE_ROOT_RELATIVE_PATH',
SSC_ENV: 'SSC_ENV',
logger: 'logger',
env: 'env',
}
};
export default loadDictElement;