UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

68 lines (67 loc) 2.97 kB
import { AppConstants } from "./server.constants.js"; import { packageJsonPath } from "./utils/fs.utils.js"; import { getEnvOrDefault, isProductionEnvironment, isTestEnvironment } from "./utils/env.utils.js"; import { errorSummary } from "./utils/error.utils.js"; import { LoggerService } from "./handlers/logger.js"; import * as Sentry from "@sentry/node"; import { readFileSync } from "node:fs"; import { collectDefaultMetrics, register } from "prom-client"; //#region src/server.env.ts function setupEnvConfig() { const logger = new LoggerService("FDM-Environment"); const environment = process.env[AppConstants.NODE_ENV_KEY]; if (!environment || !AppConstants.knownEnvNames.includes(environment)) { const newEnvName = AppConstants.defaultProductionEnv; process.env[AppConstants.NODE_ENV_KEY] = newEnvName; logger.warn(`NODE_ENV=${environment} was not set, or not known. Defaulting to NODE_ENV=${newEnvName}`); } else logger.log(`✓ NODE_ENV variable correctly set (${environment})`); ensurePackageVersionSet(); setupSentry(); ensurePortSet(); if (process.env[AppConstants.ENABLE_PROMETHEUS_METRICS] === "true") { collectDefaultMetrics({ register }); register.removeSingleMetric("nodejs_version_info"); } } function ensurePackageVersionSet() { const logger = new LoggerService("FDM-Environment"); const packageJsonVersion = JSON.parse(readFileSync(packageJsonPath(), "utf-8")).version; process.env[AppConstants.VERSION_KEY] ??= packageJsonVersion; logger.log(`✓ Running server version ${process.env[AppConstants.VERSION_KEY]}`); } function fetchServerPort() { let port = process.env[AppConstants.SERVER_PORT_KEY]; if (Number.isNaN(Number.parseInt(port))) { process.env[AppConstants.SERVER_PORT_KEY] = AppConstants.defaultServerPort.toString(); port = process.env[AppConstants.SERVER_PORT_KEY]; } return port; } function setupSentry() { const logger = new LoggerService("FDM-Environment"); const sentryDsnToken = getEnvOrDefault(AppConstants.sentryCustomDsnToken, AppConstants.sentryCustomDsnDefault); Sentry.init({ dsn: sentryDsnToken, environment: process.env.NODE_ENV, release: process.env.npm_package_version, enabled: !isTestEnvironment(), tracesSampleRate: isProductionEnvironment() ? .25 : 1 }); process.on("unhandledRejection", (e) => { const message = `Unhandled rejection error - ${errorSummary(e)}`; logger.error(message); Sentry.captureException(e); }); } function ensurePortSet() { const logger = new LoggerService("FDM-Environment"); fetchServerPort(); if (!process.env[AppConstants.SERVER_PORT_KEY]) { logger.log(`~ ${AppConstants.SERVER_PORT_KEY} environment variable is not set`); logger.log(`Please make sure to read ${AppConstants.docsUrl} for more information.`); process.env[AppConstants.SERVER_PORT_KEY] = AppConstants.defaultServerPort.toString(); } } //#endregion export { ensurePortSet, fetchServerPort, setupEnvConfig, setupSentry }; //# sourceMappingURL=server.env.js.map