feat : new ui et message discord

This commit is contained in:
2026-03-09 15:27:18 +01:00
parent db738715c3
commit f5cc79f510
20 changed files with 1399 additions and 522 deletions

View File

@@ -1,17 +1,12 @@
import { execFile } from "node:child_process"
import folderMap from "../config/backup-folders.json"
const REMOTE_HOST = process.env.BACKUPS_REMOTE_HOST || "malio-b@192.168.0.179"
const REMOTE_ROOT = process.env.BACKUPS_REMOTE_ROOT || "/home/malio-b/backups"
const MAX_FILES_PER_FOLDER = Number(process.env.BACKUPS_MAX_FILES || "200")
const isSafeFolder = (value: string) => /^[a-zA-Z0-9._-]+$/.test(value)
const shellQuote = (value: string) => `'${value.replace(/'/g, `'\\''`)}'`
const FOLDER_MAP: Record<string, string> = {
ferme: "bdd_recette/ferme",
inventory: "bdd_recette/inventory",
sirh: "bdd_recette/sirh",
user: "bdd_recette/user",
bitwarden: "bitwarden"
}
const FOLDER_MAP = folderMap as Record<string, string>
function runSsh(command: string): Promise<string> {
return new Promise((resolve, reject) => {

View File

@@ -1,12 +1,19 @@
import { exec } from "child_process"
import diskSources from "../config/disk-commands.json"
const remoteCommand =
process.env.DISK_REMOTE_COMMAND ||
"ssh malio-b@192.168.0.179 'cd /home/malio-b/Scripts-Serveur && bash check_storage.sh && exit'"
type DiskSource = {
key: string
label: string
command: string
}
const localCommand =
process.env.DISK_LOCAL_COMMAND ||
"bash /home/kevin/check_storage.sh"
function getCommand(source: DiskSource) {
const envKey = `DISK_COMMAND_${source.key.toUpperCase()}`
const legacyEnvKey =
source.key === "remote" ? "DISK_REMOTE_COMMAND" : source.key === "local" ? "DISK_LOCAL_COMMAND" : ""
return process.env[envKey] || (legacyEnvKey ? process.env[legacyEnvKey] : undefined) || source.command
}
function runCommand(command: string): Promise<string> {
return new Promise((resolve, reject) => {
@@ -21,25 +28,26 @@ function runCommand(command: string): Promise<string> {
}
export default defineEventHandler(async () => {
const [remoteResult, localResult] = await Promise.allSettled([
runCommand(remoteCommand),
runCommand(localCommand)
])
const results = await Promise.all(
(diskSources as DiskSource[]).map(async (source) => {
try {
const output = await runCommand(getCommand(source))
return {
key: source.key,
label: source.label,
ok: true,
output
}
} catch (error) {
return {
key: source.key,
label: source.label,
ok: false,
output: `Erreur: ${String(error)}`
}
}
})
)
return {
remote: {
ok: remoteResult.status === "fulfilled",
output:
remoteResult.status === "fulfilled"
? remoteResult.value
: `Erreur: ${String(remoteResult.reason)}`
},
local: {
ok: localResult.status === "fulfilled",
output:
localResult.status === "fulfilled"
? localResult.value
: `Erreur: ${String(localResult.reason)}`
}
}
return { results }
})

View File

@@ -1,15 +1,10 @@
import { execFile, spawn } from "node:child_process"
import { Readable } from "node:stream"
import folderMap from "../config/backup-folders.json"
const REMOTE_HOST = process.env.BACKUPS_REMOTE_HOST || "malio-b@192.168.0.179"
const REMOTE_ROOT = process.env.BACKUPS_REMOTE_ROOT || "/home/malio-b/backups"
const FOLDER_MAP: Record<string, string> = {
ferme: "bdd_recette/ferme",
inventory: "bdd_recette/inventory",
sirh: "bdd_recette/sirh",
user: "bdd_recette/user",
bitwarden: "bitwarden"
}
const FOLDER_MAP = folderMap as Record<string, string>
const isSafeFolder = (value: string) => /^[a-zA-Z0-9._-]+$/.test(value)
const isSafeFile = (value: string) => /^[^/\\]+$/.test(value)
@@ -20,7 +15,7 @@ function runSsh(command: string): Promise<string> {
execFile(
"ssh",
["-o", "BatchMode=yes", "-o", "ConnectTimeout=5", REMOTE_HOST, command],
{ maxBuffer: 5 * 1024 * 1024 },
{ maxBuffer: 10 * 1024 * 1024 },
(error, stdout, stderr) => {
if (error) {
reject(stderr || error.message)

View File

@@ -1,10 +1,6 @@
export default defineEventHandler(async () => {
const targets = [
{ label: "Ferme", url: "http://ferme.malio-dev.fr/api/version" },
{ label: "SIRH", url: "http://sirh.malio-dev.fr/api/version" },
{ label: "Inventory", url: "http://inventory.malio-dev.fr/api/health" },
]
import targets from "../config/version-status-targets.json"
export default defineEventHandler(async () => {
const results = await Promise.all(
targets.map(async (target) => {
try {

View File

@@ -0,0 +1,7 @@
{
"ferme": "bdd_recette/ferme",
"inventory": "bdd_recette/inventory",
"sirh": "bdd_recette/sirh",
"user": "bdd_recette/user",
"bitwarden": "bitwarden"
}

View File

@@ -0,0 +1,7 @@
[
{ "name": "bitwarden", "icon": "mdi:shield-key" },
{ "name": "inventory", "icon": "mdi:package-variant-closed" },
{ "name": "sirh", "icon": "mdi:account-group" },
{ "name": "ferme", "icon": "mdi:barn" },
{ "name": "user", "icon": "mdi:account" }
]

View File

@@ -0,0 +1,12 @@
[
{
"key": "remote",
"label": "Serveur distant",
"command": "ssh malio-b@192.168.0.179 'cd /home/malio-b/Scripts-Serveur && bash check_storage.sh && exit'"
},
{
"key": "local",
"label": "Machine locale",
"command": "bash /home/kevin/check_storage.sh"
}
]

View File

@@ -0,0 +1,5 @@
[
{ "label": "Ferme", "url": "http://ferme.malio-dev.fr/api/version" },
{ "label": "SIRH", "url": "http://sirh.malio-dev.fr/api/version" },
{ "label": "Inventory", "url": "http://inventory.malio-dev.fr/api/health" }
]