UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.

197 lines (196 loc) 8.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ensureMongoDbConnectionStringSet: function() { return ensureMongoDbConnectionStringSet; }, ensurePortSet: function() { return ensurePortSet; }, fetchMongoDBConnectionString: function() { return fetchMongoDBConnectionString; }, fetchServerPort: function() { return fetchServerPort; }, isEnvProd: function() { return isEnvProd; }, runMigrations: function() { return runMigrations; }, setupEnvConfig: function() { return setupEnvConfig; }, setupSentry: function() { return setupSentry; } }); const _migratemongo = require("migrate-mongo"); const _path = require("path"); const _node = /*#__PURE__*/ _interop_require_wildcard(require("@sentry/node")); const _serverconstants = require("./server.constants"); const _logger = require("./handlers/logger"); const _envutils = require("./utils/env.utils"); const _errorutils = require("./utils/error.utils"); const _fsutils = require("./utils/fs.utils"); const _promclient = require("prom-client"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const instructionsReferralURL = "https://docs.fdm-monster.net"; const packageJsonPath = (0, _path.join)((0, _fsutils.superRootPath)(), "./package.json"); function isEnvTest() { return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultTestEnv; } function isEnvProd() { return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultProductionEnv; } function ensureNodeEnvSet() { const logger = new _logger.LoggerService("FDM-Environment"); const environment = process.env[_serverconstants.AppConstants.NODE_ENV_KEY]; if (!environment || !_serverconstants.AppConstants.knownEnvNames.includes(environment)) { const newEnvName = _serverconstants.AppConstants.defaultProductionEnv; process.env[_serverconstants.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})!`); } } function ensurePackageVersionSet() { const logger = new _logger.LoggerService("FDM-Environment"); const packageJsonVersion = require(packageJsonPath).version; process.env[_serverconstants.AppConstants.VERSION_KEY] ??= packageJsonVersion; logger.log(`✓ Running server version ${process.env[_serverconstants.AppConstants.VERSION_KEY]}`); } function printInstructionsURL() { const logger = new _logger.LoggerService("FDM-Environment"); logger.log(`Please make sure to read ${instructionsReferralURL} for more information.`); } function fetchMongoDBConnectionString() { const logger = new _logger.LoggerService("FDM-Environment"); if (!process.env[_serverconstants.AppConstants.MONGO_KEY]) { logger.debug(`~ ${_serverconstants.AppConstants.MONGO_KEY} environment variable is not set. Assuming default`); printInstructionsURL(); process.env[_serverconstants.AppConstants.MONGO_KEY] = _serverconstants.AppConstants.defaultMongoStringUnauthenticated; } return process.env[_serverconstants.AppConstants.MONGO_KEY]; } function fetchServerPort() { let port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY]; if (Number.isNaN(parseInt(port))) { process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString(); port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY]; } return port; } function ensureMongoDbConnectionStringSet() { const logger = new _logger.LoggerService("FDM-Environment"); const dbConnectionString = process.env[_serverconstants.AppConstants.MONGO_KEY]; if (!dbConnectionString) { fetchMongoDBConnectionString(); } else { logger.log(`✓ ${_serverconstants.AppConstants.MONGO_KEY} environment variable set!`); } } function setupSentry() { const logger = new _logger.LoggerService("FDM-Environment"); const sentryDsnToken = (0, _envutils.getEnvOrDefault)(_serverconstants.AppConstants.sentryCustomDsnToken, _serverconstants.AppConstants.sentryCustomDsnDefault); _node.init({ dsn: sentryDsnToken, environment: process.env.NODE_ENV, release: process.env.npm_package_version, enabled: !isEnvTest(), tracesSampleRate: (0, _envutils.isProductionEnvironment)() ? 0.25 : 1.0 }); process.on("unhandledRejection", (e)=>{ const message = `Unhandled rejection error - ${(0, _errorutils.errorSummary)(e)}`; logger.error(message); _node.captureException(e); }); } function ensurePortSet() { const logger = new _logger.LoggerService("FDM-Environment"); fetchServerPort(); if (!process.env[_serverconstants.AppConstants.SERVER_PORT_KEY]) { logger.log(`~ ${_serverconstants.AppConstants.SERVER_PORT_KEY} environment variable is not set`); printInstructionsURL(); process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString(); } } function setupEnvConfig() { ensureNodeEnvSet(); ensurePackageVersionSet(); setupSentry(); ensureMongoDbConnectionStringSet(); ensurePortSet(); if (process.env[_serverconstants.AppConstants.ENABLE_PROMETHEUS_METRICS] === "true") { (0, _promclient.collectDefaultMetrics)({ register: _promclient.register }); _promclient.register.removeSingleMetric("nodejs_version_info"); } } async function runMigrations(db, client) { const logger = new _logger.LoggerService("FDM-Environment"); const migrationsStatus = await (0, _migratemongo.status)(db); const pendingMigrations = migrationsStatus.filter((m)=>m.appliedAt === "PENDING"); if (pendingMigrations.length) { logger.log(`! MongoDB has ${pendingMigrations.length} migrations left to run (${migrationsStatus.length} migrations in total)`); } else { logger.log(`✓ Mongo Database is up to date [${migrationsStatus.length} migration applied]`); } const migrationResult = await (0, _migratemongo.up)(db, client); if (migrationResult?.length > 0) { logger.log(`Applied ${migrationResult.length} migrations successfully`, migrationResult); } else { logger.log("No migrations were run"); } } //# sourceMappingURL=server.env.js.map