From 17c00211daf8fd5e722ec182b05bb3fca847334c Mon Sep 17 00:00:00 2001 From: CL TheDreWen Date: Fri, 31 Oct 2025 08:06:48 +0100 Subject: [PATCH] feat(status): add emoji support for RYZEN and XEON hosts in status monitoring --- .env.example | 3 + src/services/status.service.ts | 157 ++++++++++++++++++--------------- 2 files changed, 89 insertions(+), 71 deletions(-) diff --git a/.env.example b/.env.example index 82b9cfb..58dc932 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,9 @@ CLIENT_ID=your_discord_client_id_here EMOJI_STATUS_ONLINE= EMOJI_STATUS_OFFLINE= +EMOJI_RYZEN=<:ryzen:1433711892009848833> +EMOJI_XEON=<:xeon:1433711864168054855> + # Database Configuration DB_HOST=localhost DB_PORT=5432 diff --git a/src/services/status.service.ts b/src/services/status.service.ts index cbf32fc..a5ef0ef 100644 --- a/src/services/status.service.ts +++ b/src/services/status.service.ts @@ -2,68 +2,81 @@ import ping from "ping"; import * as cron from 'cron'; import { ActivityType, Client } from "discord.js"; import { Host } from "../type"; +import { loadEnvFile } from "process"; +import { configDotenv } from "dotenv"; + +configDotenv(); export class StatusService { - public hosts : Host[] = [ - { - 'host': 'https://protojx.com', - 'name': 'Protojx Website 🌐', - alive: false, - type: 'website' - }, - { - 'host': 'https://manager.protojx.com', - 'name': 'Espace Client 💻', - alive: false, - type: 'website' - }, - { - host: '5.178.99.4', - name: 'RYZEN 01 🖥️', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.6', - name: 'RYZEN 02 🖥️', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.5', - name: 'RYZEN 03 🖥️', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.177', - name: 'XEON 01 (2697A V4) 🖥️', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.248', - name: 'XEON 02 (2687W V4) 🖥️', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.53', - name: 'RYZEN-GAME 01 👾', - alive: false, - type: 'ping' - }, - { - host: '5.178.99.63', - name: 'XEON-GAME 01 👾', - alive: false, - type: 'ping' - } - ] + private EMOJI_RYZEN : string = process.env.EMOJI_RYZEN as string; + private EMOJI_XEON : string = process.env.EMOJI_XEON as string; + + public hosts: Host[] = [ + { + 'host': 'https://protojx.com', + 'name': 'Protojx Website 🌐', + alive: false, + type: 'website' + }, + { + 'host': 'https://manager.protojx.com', + 'name': 'Espace Client 💻', + alive: false, + type: 'website' + }, + { + host: '5.178.99.4', + name: 'RYZEN 01 ' + this.EMOJI_RYZEN, + alive: false, + type: 'ping' + }, + { + host: '5.178.99.6', + name: 'RYZEN 02 ' + this.EMOJI_RYZEN, + alive: false, + type: 'ping' + }, + { + host: '5.178.99.5', + name: 'RYZEN 03 ' + this.EMOJI_RYZEN, + alive: false, + type: 'ping' + }, + { + host: '154.16.254.10', + name: 'RYZEN7 04 ' + this.EMOJI_RYZEN, + alive: false, + type: 'ping' + }, + { + host: '5.178.99.177', + name: 'XEON 01 (2697A V4) ' + this.EMOJI_XEON, + alive: false, + type: 'ping' + }, + { + host: '5.178.99.248', + name: 'XEON 02 (2687W V4) ' + this.EMOJI_XEON, + alive: false, + type: 'ping' + }, + { + host: '5.178.99.53', + name: 'RYZEN-GAME 01 👾', + alive: false, + type: 'ping' + }, + { + host: '5.178.99.63', + name: 'XEON-GAME 01 👾', + alive: false, + type: 'ping' + } + ]; + + private client: Client | null = null; - private client : Client|null = null; - constructor() { setTimeout(async () => { @@ -81,39 +94,41 @@ export class StatusService { }); cronJob.start(); console.log('Status monitoring started - checking every 2 minutes'); - } + } - setClient(client : Client) { + setClient(client: Client) { this.client = client; - this.client.user?.setActivity({name: '💭 Server load and status...'}) + this.client.user?.setActivity({ name: '💭 Server load and status...' }) } private async updateClientStatus() { - if(this.client) { + if (this.client) { const hosts = this.hosts.length; const hostsAlive = this.hosts.filter((h) => h.alive).length; - this.client.user?.setActivity({name: ( - hosts == hostsAlive ? '✅ All services are online.' : `📛 ${hosts - hostsAlive} service${hosts - hostsAlive > 1 ? 's' : ''} offline.` - ), type: ActivityType.Watching}); + this.client.user?.setActivity({ + name: ( + hosts == hostsAlive ? '✅ All services are online.' : `📛 ${hosts - hostsAlive} service${hosts - hostsAlive > 1 ? 's' : ''} offline.` + ), type: ActivityType.Watching + }); } } private async fetch(max = 1): Promise { - + const max_ping = 3; const hosts = this.hosts.filter((value, index) => index < max * max_ping && index >= (max - 1) * max_ping); async function fetchAlive(host: Host) { - if(host.type === 'ping'){ - let res = await ping.promise.probe(host.host, {timeout: 10}); + if (host.type === 'ping') { + let res = await ping.promise.probe(host.host, { timeout: 10 }); host.alive = res.alive; - }else if(host.type === 'website'){ + } else if (host.type === 'website') { try { const response = await fetch(host.host, { method: 'HEAD', signal: AbortSignal.timeout(10000) }); host.alive = response.ok; } catch (error) { - host.alive = false; + host.alive = false; } } return host; @@ -129,7 +144,7 @@ export class StatusService { } }); - if(this.hosts.length > max * max_ping) { + if (this.hosts.length > max * max_ping) { await this.fetch(max + 1); }