60 lines
2.3 KiB
TypeScript
60 lines
2.3 KiB
TypeScript
import { createServer } from "node:http";
|
|
import os from "node:os";
|
|
import createApp from "./app.js";
|
|
import { db } from "./db/db.controller.js";
|
|
import { dbCleanup } from "./db/dbCleanup.controller.js";
|
|
import { type Setting, settings } from "./db/schema/settings.schema.js";
|
|
import { createLogger } from "./logger/logger.controller.js";
|
|
import { monitorReleaseChanges } from "./opendock/openDockRreleaseMonitor.utils.js";
|
|
import { opendockSocketMonitor } from "./opendock/opendockSocketMonitor.utils.js";
|
|
import { connectProdSql } from "./prodSql/prodSqlConnection.controller.js";
|
|
import { setupSocketIORoutes } from "./socket.io/serverSetup.js";
|
|
import { baseSettingValidationCheck } from "./system/settingsBase.controller.js";
|
|
import { createCronJob } from "./utils/croner.utils.js";
|
|
|
|
const port = Number(process.env.PORT) || 3000;
|
|
export let systemSettings: Setting[] = [];
|
|
const start = async () => {
|
|
const { app, baseUrl } = await createApp();
|
|
|
|
const server = createServer(app);
|
|
|
|
setupSocketIORoutes(baseUrl, server);
|
|
|
|
const log = createLogger({ module: "system", subModule: "main start" });
|
|
|
|
// triggering long lived processes
|
|
connectProdSql();
|
|
|
|
// trigger startup processes these must run before anything else can run
|
|
await baseSettingValidationCheck();
|
|
systemSettings = await db.select().from(settings);
|
|
|
|
//when starting up long lived features the name must match the setting name.
|
|
// also we always want to have long lived processes inside a setting check.
|
|
setTimeout(() => {
|
|
if (systemSettings.filter((n) => n.name === "opendock_sync")[0]?.active) {
|
|
log.info({}, "Opendock is not active");
|
|
monitorReleaseChanges(); // this is od monitoring the db for all new releases
|
|
opendockSocketMonitor();
|
|
createCronJob("opendockAptCleanup", "0 30 5 * * *", () =>
|
|
dbCleanup("opendockApt", 90),
|
|
);
|
|
}
|
|
|
|
// these jobs below are system jobs and should run no matter what.
|
|
createCronJob("JobAuditLogCleanUp", "0 0 5 * * *", () =>
|
|
dbCleanup("jobs", 30),
|
|
);
|
|
createCronJob("logsCleanup", "0 15 5 * * *", () => dbCleanup("logs", 120));
|
|
}, 5 * 1000);
|
|
|
|
server.listen(port, async () => {
|
|
log.info(
|
|
`Listening on http://${os.hostname()}:${port}${baseUrl}, logging in ${process.env.LOG_LEVEL}, current ENV ${process.env.NODE_ENV ? process.env.NODE_ENV : "development"}`,
|
|
);
|
|
});
|
|
};
|
|
|
|
start();
|