server/index.ts

53 lines
1.4 KiB
TypeScript
Raw Permalink Normal View History

2024-04-14 13:20:55 +02:00
import { dualLogger } from "@loggers";
2024-04-07 07:30:49 +02:00
import { connectMeili } from "@meilisearch";
2024-04-07 06:16:54 +02:00
import { config } from "config-manager";
import { count } from "drizzle-orm";
2024-04-14 13:20:55 +02:00
import { LogLevel } from "log-manager";
import { db, setupDatabase } from "~drizzle/db";
import { status } from "~drizzle/schema";
import { createServer } from "~server";
2023-11-30 05:16:58 +01:00
const timeAtStart = performance.now();
2023-09-11 05:54:14 +02:00
// If imported as a module, redirect logs to /dev/null to not pollute console (e.g. in tests)
await dualLogger.log(LogLevel.INFO, "Lysand", "Starting Lysand...");
await setupDatabase(dualLogger);
if (config.meilisearch.enabled) {
2024-04-07 07:30:49 +02:00
await connectMeili(dualLogger);
}
2023-11-21 00:58:39 +01:00
// Check if database is reachable
2023-11-29 04:57:35 +01:00
let postCount = 0;
2023-11-21 00:58:39 +01:00
try {
postCount = (
await db
.select({
count: count(),
})
.from(status)
)[0].count;
2023-11-21 00:58:39 +01:00
} catch (e) {
const error = e as Error;
2024-04-14 13:20:55 +02:00
await dualLogger.logError(LogLevel.CRITICAL, "Database", error);
2024-04-07 07:30:49 +02:00
process.exit(1);
2023-11-21 00:58:39 +01:00
}
const server = createServer(config, dualLogger, true);
await dualLogger.log(
2024-04-07 07:30:49 +02:00
LogLevel.INFO,
"Server",
`Lysand started at ${config.http.bind}:${config.http.bind_port} in ${(
performance.now() - timeAtStart
).toFixed(0)}ms`,
2023-10-23 02:32:17 +02:00
);
2023-11-21 00:58:39 +01:00
await dualLogger.log(
2024-04-07 07:30:49 +02:00
LogLevel.INFO,
"Database",
`Database is online, now serving ${postCount} posts`,
2023-11-21 00:58:39 +01:00
);
export { config, server };