dsql-admin/dsql-app/init/init-sql/index.ts
Benjamin Toby e0a030f10d Updates
2025-01-13 09:00:21 +01:00

87 lines
1.8 KiB
TypeScript

import execute from "../../docker/setup/(utils)/execute";
import mysql, { ServerlessMysql } from "serverless-mysql";
import initSQLHandleRootUsers from "./(functions)/handle-root-user";
import initSQLCheckEnvVariables from "./(functions)/check-env-variables";
import initSQLCreateDatabases from "./(functions)/create-databases";
import initSQLCheckDsqlUsers from "./(functions)/check-dsql-users";
console.log(`Initializing Database ...`);
console.log(`DB HOST => ${process.env.DSQL_DB_HOST}`);
/**
* # Declare Global Variables
*/
declare global {
var INIT_SQL_ROOT_DB_CONN: ServerlessMysql;
var INIT_SQL_MAIN_DB_CONN: ServerlessMysql;
}
/**
* # Ping Database Function
*/
function pingDb() {
return execute(
`mysqladmin ping -h"${process.env.DSQL_DB_HOST}" -u"root" -p"${process.env.DSQL_MARIADB_ROOT_PASSWORD}" --silent`
);
}
/**
* # Check MariaDB Availability
*/
let tries = 0;
while (true) {
if (tries > 10) {
process.exit(2);
}
const checkDb = pingDb();
if (checkDb?.match(/alive/)) break;
tries++;
await Bun.sleep(2000);
}
console.log("MariaDB is ready!");
/**
* # Check Environment Variables
*/
await initSQLCheckEnvVariables();
/**
* # Handle Root Users
*/
global.INIT_SQL_ROOT_DB_CONN = mysql({
config: {
host: process.env.DSQL_DB_HOST,
user: "root",
password: process.env.DSQL_MARIADB_ROOT_PASSWORD,
charset: "utf8mb4",
},
});
await initSQLHandleRootUsers();
/**
* # Handle Operations with New Root User
*/
global.INIT_SQL_MAIN_DB_CONN = mysql({
config: {
host: process.env.DSQL_DB_HOST,
user: "root",
password: process.env.DSQL_DB_PASSWORD,
charset: "utf8mb4",
},
});
await initSQLCreateDatabases();
await initSQLCheckDsqlUsers();
/**
* # All Done. Exit With Success.
*/
process.exit(0);