import { readFileSync } from 'fs' import { Util } from 'service-core' export function run(http, orgPort, ctx) { let localUtil = new Util(import.meta.url) let packagePath = localUtil.getPathFromRoot('../package.json') let packageInfo = JSON.parse(readFileSync(packagePath)) const server = http.createServer(function (req, res) { const d1 = new Date().getTime() let finishedRequest = false var done = function () { if (finishedRequest) return finishedRequest = true var requestTime = new Date().getTime() - d1 let level = 'info' if (res.statusCode >= 400) { level = 'warn' } if (res.statusCode >= 500) { level = 'error' } let status = '' if (res.statusCode >= 400) { status = res.statusCode + ' ' } ctx.log[level]({ duration: requestTime, status: res.statusCode, }, `<-- ${status}${req.method} ${req.url}`) } res.addListener('finish', done); res.addListener('close', done); res.writeHead(200); res.write(JSON.stringify(packageInfo, null, ' ')) res.end() }) let port = orgPort || 4000 return server.listenAsync(port) .then(function() { ctx.log.event.info(`Server is listening on ${port} serving package ${packagePath}`) ctx.log.info(`Server is listening on ${port} serving package ${packagePath}`) }) }