diff options
Diffstat (limited to 'src/index.ts')
| -rw-r--r-- | src/index.ts | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/src/index.ts b/src/index.ts index 1de4b10..d101ba3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,8 +4,6 @@ import winston from "winston"; import expressWinston from "express-winston"; import path from "path"; -dotenv.config(); - import routes from "./routes"; import Metadata, { EnvConfig } from "./metadata"; import loggerConfig from "./util/logger"; @@ -14,32 +12,45 @@ import { handleStartup, handleShutdown, initializeToken, -} from "./util/config"; - -// Start-up configuration -const BIND_ADDRESS = process.env.BIND_ADDRESS ?? "localhost"; -const MONGO_DB = process.env.MONGO_DB ?? "ao-coverage"; -const PORT = Number(process.env.PORT ?? 3000); -const MONGO_URI = configOrError("MONGO_URI"); -const TARGET_URL = process.env.TARGET_URL ?? "http://localhost:3000"; +} from "./config"; + +dotenv.config(); + +const LOG_LEVEL = process.env.LOG_LEVEL ?? "info"; +const logger = winston.createLogger(loggerConfig("ROOT", LOG_LEVEL)); + +// Application-wide configuration settings const ENV_CONFIG: EnvConfig = { - token: process.env.TOKEN ?? initializeToken(), + // Express configuration + bindAddress: process.env.BIND_ADDRESS ?? "localhost", + port: Number(process.env.PORT ?? 3000), uploadLimit: Number(process.env.UPLOAD_LIMIT ?? 4194304), + + // Database connection information + dbName: process.env.MONGO_DB ?? "ao-coverage", + dbUri: configOrError("MONGO_URI", logger), + + // Where the server should say it's located + targetUrl: process.env.TARGET_URL ?? "http://localhost:3000", + + // Directories used for serving static or uploaded files publicDir: path.join(__dirname, "..", "public"), - hostDir: configOrError("HOST_DIR"), + hostDir: configOrError("HOST_DIR", logger), + + // Application configuration + token: process.env.TOKEN ?? initializeToken(logger), stage1: Number(process.env.STAGE_1 ?? 95), stage2: Number(process.env.STAGE_2 ?? 80), + logLevel: LOG_LEVEL, }; -const logger = winston.createLogger(loggerConfig("ROOT")); - -handleStartup(MONGO_URI, ENV_CONFIG, TARGET_URL).then((mongo) => { +handleStartup(ENV_CONFIG, logger).then((mongo) => { const app: express.Application = express(); - const metadata = new Metadata(mongo.db(MONGO_DB), ENV_CONFIG); + const metadata = new Metadata(mongo.db(ENV_CONFIG.dbName), ENV_CONFIG); app.use( expressWinston.logger({ - ...loggerConfig("HTTP"), + ...loggerConfig("HTTP", ENV_CONFIG.logLevel), colorize: true, // filter out token query param from URL msg: '{{req.method}} {{req.url.replace(/token=[-\\w.~]*(&*)/, "token=$1")}} - {{res.statusCode}} {{res.responseTime}}ms', @@ -49,15 +60,15 @@ handleStartup(MONGO_URI, ENV_CONFIG, TARGET_URL).then((mongo) => { // actual app routes app.use(routes(metadata)); - app.use(expressWinston.errorLogger(loggerConfig("_ERR"))); + app.use(expressWinston.errorLogger(loggerConfig("_ERR", ENV_CONFIG.logLevel))); - const server = app.listen(PORT, BIND_ADDRESS, () => { - logger.info("Express has started: http://%s:%d/", BIND_ADDRESS, PORT); + const server = app.listen(ENV_CONFIG.port, ENV_CONFIG.bindAddress, () => { + logger.info("Express has started: http://%s:%d/", ENV_CONFIG.bindAddress, ENV_CONFIG.port); }); // application exit handling const signalCodes: NodeJS.Signals[] = ["SIGTERM", "SIGHUP", "SIGINT"]; signalCodes.map((code: NodeJS.Signals) => { - process.on(code, handleShutdown(mongo, server)); + process.on(code, handleShutdown(mongo, server, logger)); }); }); |
