From 99c30e967e0bad13bb30acaeeb9cf40370b9b665 Mon Sep 17 00:00:00 2001 From: "Jae Lo Presti (DN0)" Date: Thu, 20 Apr 2023 08:40:16 +0300 Subject: [PATCH] dMon: add base for server uptime daemon --- ...30420053341_add_status_to_servers_table.ts | 17 ++++++++++++++ src/types/dbTypes.ts | 1 + src/utils/dMonUtils.ts | 22 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 migrations/20230420053341_add_status_to_servers_table.ts create mode 100644 src/utils/dMonUtils.ts diff --git a/migrations/20230420053341_add_status_to_servers_table.ts b/migrations/20230420053341_add_status_to_servers_table.ts new file mode 100644 index 0000000..536600f --- /dev/null +++ b/migrations/20230420053341_add_status_to_servers_table.ts @@ -0,0 +1,17 @@ +import { Knex } from "knex"; + +import {SCHEMA_NAME} from "../src/environment"; + + +export async function up(knex: Readonly): Promise { + await knex.schema.withSchema(SCHEMA_NAME).table('servers', (table) => { + table + .boolean('started') + .notNullable() + .comment('Used to determine if a server is to be restarted automatically when it is detected offline'); + }); +} + +export function down(): void { + return; +} diff --git a/src/types/dbTypes.ts b/src/types/dbTypes.ts index bc68f63..6a940d3 100644 --- a/src/types/dbTypes.ts +++ b/src/types/dbTypes.ts @@ -10,6 +10,7 @@ export interface ServersTable { comment: string, container_id: string, image_id: string, + started: boolean, } export enum userLevels { diff --git a/src/utils/dMonUtils.ts b/src/utils/dMonUtils.ts new file mode 100644 index 0000000..4b5860f --- /dev/null +++ b/src/utils/dMonUtils.ts @@ -0,0 +1,22 @@ +import {ServersTable} from "../types/dbTypes"; + +import {dbConn} from "./dbUtils"; +import {checkIfOnline, restartSingleServer} from "./dockerUtils"; +import {generateLogger} from "./loggerUtils"; + +const log = generateLogger('dMonUtils.ts'); + +export const runDMon = async (): Promise => { + const db = dbConn(); + + const servers = await db('servers').select('*').where('started', true); + servers.forEach(server => { + checkIfOnline(server.container_id).then(res => { + if (!res) { + restartSingleServer(server.container_id); + } + }).catch(e => { + log.error(e); + }); + }); +} \ No newline at end of file -- 2.38.5