UNPKG

server-status-check

Version:

query the server periodically to check whether it is up

61 lines (52 loc) 2.72 kB
import express from 'express'; import path from 'path'; import { LoadDictElement } from 'di-why/build/src/DiContainer'; // import Logger from 'saylo'; // import StatusCheckService from '../services/StatusCheckService'; // import TemplateHydratorService from '../services/TemplateHydratorService'; // import { AppConfig } from './appConfig'; export type Application = ReturnType<typeof express>; // type ExpressInitDeps = {} // & { appConfig: AppConfig; } // & { logger: Logger; } // & { templateHydratorService: TemplateHydratorService; } // & { statusCheckService: StatusCheckService; } // type AfterCallbackProps = { me: Application, deps: ExpressInitDeps }; const loadDictElement: LoadDictElement<Application> = { instance: express(), async after({ me, deps: { appConfig, logger, templateHydratorService, statusCheckService } }) { const { port, path: pathConf, siteTitle } = appConfig; me.listen({ port }, () => { logger.log(' ==========================================================================================='); logger.log(' | STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK |'); logger.log(' | ---------------------------------------------------------------------------------------- |'); logger.log(` | STATUS_CHECK = App: http://localhost:${port}${pathConf} = STATUS_CHECK |`); logger.log(' | ---------------------------------------------------------------------------------------- |'); logger.log(' | STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK = STATUS_CHECK |'); logger.log(' ============================================================================================'); }); // status check path me.get(pathConf, async function (req, res) { const viewData = { secondsBeforeAutoRefresh: `${statusCheckService.checkInterval}`, siteTitle, statusInfo: statusCheckService.getStatusStats() }; const templatePath = path.normalize(path.join(__dirname, `../../../src/views/status.html`)); const { viewTemplate } = await templateHydratorService.loadViewTemplate(templatePath); const body = templateHydratorService.hydrateView({ viewTemplate, viewData }); res.send(body); }); // serve static files const normalizedPublicDirPath = path.normalize(path.join(__dirname, `../../../public`)); me.use(express.static(normalizedPublicDirPath) as any); return me; }, locateDeps: { logger: 'logger', appConfig: 'appConfig', templateHydratorService: 'templateHydratorService', statusCheckService: 'statusCheckService', }, }; export default loadDictElement;