@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
JavaScript
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