Compare commits
2 Commits
95a6bb10b1
...
4e7119297c
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e7119297c | |||
| 5e3b5ee741 |
@@ -11,6 +11,8 @@ LOG_DIR="/var/log/monitoring"
|
|||||||
STATE_DIR="/var/lib/monitoring"
|
STATE_DIR="/var/lib/monitoring"
|
||||||
LOCK_DIR="/var/lock/monitoring"
|
LOCK_DIR="/var/lock/monitoring"
|
||||||
TMP_DIR="/tmp/monitoring-install"
|
TMP_DIR="/tmp/monitoring-install"
|
||||||
|
# Journal des fichiers installés pour déinstallation/état des lieux
|
||||||
|
INSTALLED_LOG="${STATE_DIR}/installed-files.log"
|
||||||
|
|
||||||
UPDATE_BASE_URL="https://git.abonnel.fr/cedricAbonnel/scripts-bash/raw/branch/main/servers/linux/monitoring"
|
UPDATE_BASE_URL="https://git.abonnel.fr/cedricAbonnel/scripts-bash/raw/branch/main/servers/linux/monitoring"
|
||||||
MANIFEST_URL="${UPDATE_BASE_URL}/manifest.txt"
|
MANIFEST_URL="${UPDATE_BASE_URL}/manifest.txt"
|
||||||
@@ -37,9 +39,7 @@ install_deps() {
|
|||||||
info "Vérification des dépendances système..."
|
info "Vérification des dépendances système..."
|
||||||
if command -v apt-get >/dev/null 2>&1; then
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
apt-get install -y -qq curl coreutils findutils grep sed gawk util-linux ca-certificates php-cli > /dev/null
|
apt-get install -y -qq curl coreutils findutils grep sed gawk util-linux ca-certificates php-cli php-curl php-common smartmontools > /dev/null
|
||||||
apt-get install -y -qq php-cli php-curl php-common > /dev/null
|
|
||||||
apt-get install -y -qq smartmontools > /dev/null
|
|
||||||
ok "Dépendances installées."
|
ok "Dépendances installées."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,7 @@ install_deps() {
|
|||||||
prepare_dirs() {
|
prepare_dirs() {
|
||||||
info "Préparation de l'arborescence dans ${BASE_DIR}..."
|
info "Préparation de l'arborescence dans ${BASE_DIR}..."
|
||||||
mkdir -p "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${CONF_DIR}" "${LOG_DIR}" "${STATE_DIR}" "${LOCK_DIR}" "${TMP_DIR}"
|
mkdir -p "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${CONF_DIR}" "${LOG_DIR}" "${STATE_DIR}" "${LOCK_DIR}" "${TMP_DIR}"
|
||||||
|
touch "$INSTALLED_LOG"
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch_manifest() {
|
fetch_manifest() {
|
||||||
@@ -65,17 +66,13 @@ validate_manifest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
download_and_install() {
|
download_and_install() {
|
||||||
local expected_hash="$1"
|
local expected_hash=$1 mode=$2 rel_path=$3
|
||||||
local mode="$2"
|
|
||||||
local rel_path="$3"
|
|
||||||
local dst="${BASE_DIR}/${rel_path}"
|
local dst="${BASE_DIR}/${rel_path}"
|
||||||
|
|
||||||
if [ -f "$dst" ]; then
|
if [ -f "$dst" ]; then
|
||||||
local current_hash
|
local current_hash
|
||||||
current_hash=$(sha256sum "$dst" | awk '{print $1}')
|
current_hash=$(sha256sum "$dst" | awk '{print $1}')
|
||||||
if [ "$current_hash" == "$expected_hash" ]; then
|
[ "$current_hash" == "$expected_hash" ] && return 0
|
||||||
return 0 # Déjà à jour
|
|
||||||
fi
|
|
||||||
info "Mise à jour : $rel_path"
|
info "Mise à jour : $rel_path"
|
||||||
else
|
else
|
||||||
info "Installation : $rel_path"
|
info "Installation : $rel_path"
|
||||||
@@ -103,23 +100,45 @@ download_and_install() {
|
|||||||
chmod "$mode" "$dst"
|
chmod "$mode" "$dst"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- NOUVEAUTÉ : Gestion du journal et purge propre ---
|
||||||
|
|
||||||
|
update_installed_log() {
|
||||||
|
# On sauvegarde la liste des chemins relatifs du manifeste validé dans le journal permanent
|
||||||
|
awk '{print $3}' "${TMP_DIR}/manifest-valid.txt" > "$INSTALLED_LOG"
|
||||||
|
ok "Journal des fichiers déployés mis à jour ($INSTALLED_LOG)."
|
||||||
|
}
|
||||||
|
|
||||||
purge_obsolete_files() {
|
purge_obsolete_files() {
|
||||||
info "Analyse des fichiers obsolètes (Synchronisation avec Git)..."
|
info "Analyse des fichiers obsolètes (Synchronisation avec le journal)..."
|
||||||
# On scanne bin, lib et conf
|
|
||||||
find "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${BASE_DIR}/conf" -type f 2>/dev/null | while read -r local_file; do
|
|
||||||
|
|
||||||
local rel_path="${local_file#$BASE_DIR/}"
|
# On compare ce qui était installé (journal) avec ce qui est dans le nouveau manifeste
|
||||||
|
if [ ! -s "$INSTALLED_LOG" ]; then
|
||||||
|
warn "Journal vide, passage en mode scan classique."
|
||||||
|
# Fallback sur le scan de dossier si le journal n'existe pas encore
|
||||||
|
find "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${BASE_DIR}/conf" -type f 2>/dev/null | while read -r local_file; do
|
||||||
|
local rel_path="${local_file#$BASE_DIR/}"
|
||||||
|
[[ "$rel_path" == *".local."* ]] && continue
|
||||||
|
if ! grep -qw "$rel_path" "${TMP_DIR}/manifest-valid.txt"; then
|
||||||
|
warn "Suppression : $rel_path"
|
||||||
|
rm -f "$local_file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
# PROTECTION : On ne touche jamais aux fichiers locaux personnels
|
# Mode Journal : On lit l'ancien journal pour voir ce qui doit disparaître
|
||||||
if [[ "$rel_path" == *".local."* ]]; then
|
while read -r old_file; do
|
||||||
continue
|
# Si le fichier du journal n'est plus dans le nouveau manifeste
|
||||||
|
if ! grep -qw "$old_file" "${TMP_DIR}/manifest-valid.txt"; then
|
||||||
|
if [ -f "${BASE_DIR}/$old_file" ]; then
|
||||||
|
# Protection ultime des fichiers .local (au cas où ils auraient été loggués par erreur)
|
||||||
|
if [[ "$old_file" != *".local."* ]]; then
|
||||||
|
warn "Suppression du fichier obsolète : $old_file"
|
||||||
|
rm -f "${BASE_DIR}/$old_file"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
done < "$INSTALLED_LOG"
|
||||||
if ! grep -qw "$rel_path" "${TMP_DIR}/manifest-valid.txt"; then
|
|
||||||
warn "Suppression : $rel_path (absent du dépôt)"
|
|
||||||
rm -f "$local_file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Main ---
|
# --- Main ---
|
||||||
@@ -143,8 +162,9 @@ main() {
|
|||||||
done < "${TMP_DIR}/manifest-valid.txt"
|
done < "${TMP_DIR}/manifest-valid.txt"
|
||||||
|
|
||||||
echo "--------------------------------------------------"
|
echo "--------------------------------------------------"
|
||||||
info "Phase 2 : Nettoyage"
|
info "Phase 2 : Nettoyage et Journalisation"
|
||||||
purge_obsolete_files
|
purge_obsolete_files
|
||||||
|
update_installed_log
|
||||||
|
|
||||||
rm -rf "${TMP_DIR}"
|
rm -rf "${TMP_DIR}"
|
||||||
echo "--------------------------------------------------"
|
echo "--------------------------------------------------"
|
||||||
@@ -155,18 +175,12 @@ main() {
|
|||||||
orig_conf="${CONF_DIR}/monitoring.conf.php"
|
orig_conf="${CONF_DIR}/monitoring.conf.php"
|
||||||
|
|
||||||
if [ -f "$local_conf" ] && [ -f "$orig_conf" ]; then
|
if [ -f "$local_conf" ] && [ -f "$orig_conf" ]; then
|
||||||
# On compare les hashs des deux fichiers
|
if [ "$(sha256sum "$local_conf" | awk '{print $1}')" == "$(sha256sum "$orig_conf" | awk '{print $1}')" ]; then
|
||||||
hash_local=$(sha256sum "$local_conf" | awk '{print $1}')
|
|
||||||
hash_orig=$(sha256sum "$orig_conf" | awk '{print $1}')
|
|
||||||
|
|
||||||
if [ "$hash_local" == "$hash_orig" ]; then
|
|
||||||
echo -e "\n\e[33m[ATTENTION]\e[0m Votre fichier de configuration est identique à l'original."
|
echo -e "\n\e[33m[ATTENTION]\e[0m Votre fichier de configuration est identique à l'original."
|
||||||
warn "Pensez à éditer ${local_conf} pour configurer vos tokens ntfy/mail."
|
warn "Pensez à éditer ${local_conf}."
|
||||||
else
|
else
|
||||||
ok "Configuration locale détectée et personnalisée."
|
ok "Configuration locale personnalisée détectée."
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
warn "Fichier de configuration local absent. Relancez monitoring-update.php pour l'initialiser."
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Moteur de mise à jour - Version Supervisor
|
* Moteur de mise à jour - Version Supervisor
|
||||||
* Pilotage du script Bash + Initialisation des Configs + Cron
|
* Pilotage du script Bash + Initialisation des Configs + Cron + Ménage
|
||||||
* Copyright (C) 2026 Cédric Abonnel
|
* Copyright (C) 2026 Cédric Abonnel
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -21,8 +21,7 @@ if (!file_exists($install_script)) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. Exécution du moteur de synchronisation Bash (il gère téléchargement et purge)
|
// 1. Exécution du moteur de synchronisation Bash
|
||||||
// On utilise popen pour lire la sortie en temps réel à l'écran
|
|
||||||
$command = "bash " . escapeshellarg($install_script) . " --auto 2>&1";
|
$command = "bash " . escapeshellarg($install_script) . " --auto 2>&1";
|
||||||
$handle = popen($command, 'r');
|
$handle = popen($command, 'r');
|
||||||
|
|
||||||
@@ -30,7 +29,7 @@ if ($handle) {
|
|||||||
while (!feof($handle)) {
|
while (!feof($handle)) {
|
||||||
$line = fgets($handle);
|
$line = fgets($handle);
|
||||||
if ($line) {
|
if ($line) {
|
||||||
echo $line; // Affichage direct à l'écran (avec les couleurs du Bash)
|
echo $line;
|
||||||
if (strpos($line, '[ERR]') !== false) {
|
if (strpos($line, '[ERR]') !== false) {
|
||||||
log_error("update_bash_error", trim($line));
|
log_error("update_bash_error", trim($line));
|
||||||
}
|
}
|
||||||
@@ -44,15 +43,10 @@ if ($handle) {
|
|||||||
if ($exit_code === 0) {
|
if ($exit_code === 0) {
|
||||||
echo "\e[1m--- Finalisation des configurations ---\e[0m\n";
|
echo "\e[1m--- Finalisation des configurations ---\e[0m\n";
|
||||||
|
|
||||||
// 2. Initialisation des fichiers .local manquants
|
|
||||||
// Cela garantit que le système peut tourner même sans config manuelle préalable
|
|
||||||
ensure_local_configs();
|
ensure_local_configs();
|
||||||
|
ensure_crontab_entries(); // Logique de nettoyage incluse ici
|
||||||
|
|
||||||
// 3. Vérification du Crontab
|
log_info("update_finished", "Mise à jour et nettoyage crontab réussis");
|
||||||
// Utilise la Regex pour éviter les doublons avec tes anciennes versions (tirets vs underscores)
|
|
||||||
ensure_crontab_entries();
|
|
||||||
|
|
||||||
log_info("update_finished", "Mise à jour et configuration réussies");
|
|
||||||
echo "\e[32m[OK]\e[0m Système à jour et configuré.\n";
|
echo "\e[32m[OK]\e[0m Système à jour et configuré.\n";
|
||||||
} else {
|
} else {
|
||||||
log_error("update_failed", "Le script Bash a retourné une erreur", ["code" => $exit_code]);
|
log_error("update_failed", "Le script Bash a retourné une erreur", ["code" => $exit_code]);
|
||||||
@@ -65,22 +59,17 @@ if ($exit_code === 0) {
|
|||||||
*/
|
*/
|
||||||
function ensure_local_configs() {
|
function ensure_local_configs() {
|
||||||
global $MONITORING_CONF_DIR;
|
global $MONITORING_CONF_DIR;
|
||||||
|
|
||||||
// Mapping Source => Destination
|
|
||||||
$configs = [
|
$configs = [
|
||||||
'monitoring.conf.php' => 'monitoring.local.conf.php',
|
'monitoring.conf.php' => 'monitoring.local.conf.php',
|
||||||
'alert-engine.conf.php' => 'alert-engine.conf.local.php',
|
'alert-engine.conf.php' => 'alert-engine.conf.local.php',
|
||||||
'autoupdate.conf.php' => 'autoupdate.local.conf.php'
|
'autoupdate.conf.php' => 'autoupdate.local.conf.php'
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($configs as $src => $dst) {
|
foreach ($configs as $src => $dst) {
|
||||||
$src_path = $MONITORING_CONF_DIR . '/' . $src;
|
$src_path = $MONITORING_CONF_DIR . '/' . $src;
|
||||||
$dst_path = $MONITORING_CONF_DIR . '/' . $dst;
|
$dst_path = $MONITORING_CONF_DIR . '/' . $dst;
|
||||||
|
|
||||||
if (!file_exists($dst_path) && file_exists($src_path)) {
|
if (!file_exists($dst_path) && file_exists($src_path)) {
|
||||||
if (copy($src_path, $dst_path)) {
|
if (copy($src_path, $dst_path)) {
|
||||||
chmod($dst_path, 0600); // Protection des secrets
|
chmod($dst_path, 0600);
|
||||||
log_notice("config_auto_init", "Création auto de $dst");
|
|
||||||
echo "\e[32m[OK]\e[0m Fichier config créé : $dst\n";
|
echo "\e[32m[OK]\e[0m Fichier config créé : $dst\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,55 +77,82 @@ function ensure_local_configs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assure la présence des tâches dans le crontab de root
|
* Assure la présence des tâches correctes et SUPPRIME les anciennes
|
||||||
*/
|
*/
|
||||||
function ensure_crontab_entries() {
|
function ensure_crontab_entries() {
|
||||||
global $MONITORING_BASE_DIR;
|
global $MONITORING_BASE_DIR;
|
||||||
|
|
||||||
// Notre "Vérité" pour le planning du serveur
|
// 1. Définition de la cible (La SEULE vérité pour le monitoring)
|
||||||
$required_jobs = [
|
$required_jobs = [
|
||||||
"*/5 * * * * php {$MONITORING_BASE_DIR}/bin/check_disk.php > /dev/null 2>&1",
|
"*/5 * * * * bash {$MONITORING_BASE_DIR}/bin/check_disk.sh > /dev/null 2>&1",
|
||||||
"*/15 * * * * bash {$MONITORING_BASE_DIR}/bin/check_smart.sh > /dev/null 2>&1",
|
"*/15 * * * * bash {$MONITORING_BASE_DIR}/bin/check_smart.sh > /dev/null 2>&1",
|
||||||
"10 3 * * * php {$MONITORING_BASE_DIR}/bin/monitoring-update.php > /dev/null 2>&1",
|
"10 3 * * * php {$MONITORING_BASE_DIR}/bin/monitoring-update.php > /dev/null 2>&1",
|
||||||
"* * * * * php {$MONITORING_BASE_DIR}/bin/alert-engine.php > /dev/null 2>&1"
|
"* * * * * php {$MONITORING_BASE_DIR}/bin/alert-engine.php > /dev/null 2>&1"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// 2. Liste des motifs à supprimer (Anciennes erreurs ou scripts obsolètes)
|
||||||
|
$patterns_to_remove = [
|
||||||
|
"/usr/local/bin/sys_check.sh", // Script obsolète
|
||||||
|
"bin/check_disk.php", // Mauvaise extension
|
||||||
|
"bin/check-disk.sh" // Mauvais séparateur
|
||||||
|
];
|
||||||
|
|
||||||
$current_cron = shell_exec("crontab -l 2>/dev/null") ?: "";
|
$current_cron = shell_exec("crontab -l 2>/dev/null") ?: "";
|
||||||
$lines = explode("\n", trim($current_cron));
|
$lines = explode("\n", trim($current_cron));
|
||||||
$updated = false;
|
$new_lines = [];
|
||||||
|
$has_changed = false;
|
||||||
|
|
||||||
foreach ($required_jobs as $job) {
|
// --- PHASE A : Nettoyage ---
|
||||||
// On cherche le nom du script dans la ligne pour éviter les doublons
|
foreach ($lines as $line) {
|
||||||
// (ex: cherche "/bin/check_disk.php" dans la ligne du cron)
|
$trim_line = trim($line);
|
||||||
if (preg_match('/\/bin\/([a-z0-9_-]+\.(php|sh))/i', $job, $matches)) {
|
if (empty($trim_line)) continue;
|
||||||
$script_pattern = $matches[0];
|
|
||||||
|
|
||||||
$found = false;
|
$keep = true;
|
||||||
foreach ($lines as $line) {
|
foreach ($patterns_to_remove as $pattern) {
|
||||||
if (strpos($line, $script_pattern) !== false) {
|
if (strpos($trim_line, $pattern) !== false) {
|
||||||
$found = true;
|
echo "\e[33m[CLEAN]\e[0m Suppression de l'ancienne tâche : $pattern\n";
|
||||||
break;
|
$keep = false;
|
||||||
}
|
$has_changed = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$found) {
|
if ($keep) {
|
||||||
$lines[] = $job;
|
$new_lines[] = $trim_line;
|
||||||
$updated = true;
|
|
||||||
echo "\e[32m[OK]\e[0m Ajout au cron : " . basename($script_pattern) . "\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($updated) {
|
// --- PHASE B : Insertion des tâches manquantes ---
|
||||||
// Filtrage des lignes vides et reconstruction propre
|
foreach ($required_jobs as $job) {
|
||||||
$content = implode("\n", array_filter($lines, 'trim')) . "\n";
|
// Extraction du nom du script pour vérifier s'il existe déjà
|
||||||
|
preg_match('/\/bin\/([a-z0-9_-]+\.(php|sh))/i', $job, $matches);
|
||||||
|
$script_path = $matches[0] ?? $job;
|
||||||
|
|
||||||
|
$found = false;
|
||||||
|
foreach ($new_lines as $line) {
|
||||||
|
if (strpos($line, $script_path) !== false) {
|
||||||
|
$found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$found) {
|
||||||
|
$new_lines[] = $job;
|
||||||
|
$has_changed = true;
|
||||||
|
echo "\e[32m[OK]\e[0m Ajout au cron : " . basename($script_path) . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- PHASE C : Application ---
|
||||||
|
if ($has_changed) {
|
||||||
|
$content = implode("\n", array_filter($new_lines, 'trim')) . "\n";
|
||||||
$tmp_cron = tempnam(sys_get_temp_dir(), 'cron');
|
$tmp_cron = tempnam(sys_get_temp_dir(), 'cron');
|
||||||
file_put_contents($tmp_cron, $content);
|
file_put_contents($tmp_cron, $content);
|
||||||
exec("crontab " . escapeshellarg($tmp_cron));
|
exec("crontab " . escapeshellarg($tmp_cron));
|
||||||
unlink($tmp_cron);
|
unlink($tmp_cron);
|
||||||
echo "\e[32m[OK]\e[0m Crontab de root mis à jour.\n";
|
echo "\e[32m[OK]\e[0m Crontab de root synchronisé.\n";
|
||||||
} else {
|
} else {
|
||||||
echo "[INFO] Crontab déjà à jour.\n";
|
echo "[INFO] Crontab déjà propre.\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
5b4ea784d2cbe73f6e829e35f23b0b4dbe12df55cc1abc8eba6602da36c724ef 755 bin/alert-engine.php
|
5b4ea784d2cbe73f6e829e35f23b0b4dbe12df55cc1abc8eba6602da36c724ef 755 bin/alert-engine.php
|
||||||
fdcea6720186795538f48c08b99103b320273dbdd0ea5246a2da9d81a1eecc6c 755 bin/check_disk.sh
|
fdcea6720186795538f48c08b99103b320273dbdd0ea5246a2da9d81a1eecc6c 755 bin/check_disk.sh
|
||||||
ead10d3be3aac48c6406a734dee1bddf9a8abb1e21de102ce72fa92fdecbaf22 755 bin/check_smart.sh
|
ead10d3be3aac48c6406a734dee1bddf9a8abb1e21de102ce72fa92fdecbaf22 755 bin/check_smart.sh
|
||||||
9cf677bb0a598adb5f5311690ad9667979e5bbc4c8aa372a0fc140bf710c8762 755 bin/install-monitoring.sh
|
8f95824b568b5de7dbdc2d6ab87fc6fd8076dcb8ad20de3e72a53391e97f8484 755 bin/install-monitoring.sh
|
||||||
97a91b13b0776acb3326010821ffcc163e96a97e3c326ea77f11efdb7baf159a 755 bin/log-cli.php
|
97a91b13b0776acb3326010821ffcc163e96a97e3c326ea77f11efdb7baf159a 755 bin/log-cli.php
|
||||||
02bd43ed2a9b92acc013274c716e6bc50120a8103ccf3d9c4e6f345a0b22d6a0 755 bin/monitoring.php
|
02bd43ed2a9b92acc013274c716e6bc50120a8103ccf3d9c4e6f345a0b22d6a0 755 bin/monitoring.php
|
||||||
97d407d75a26bd2ebbb86a2e5f8dab8b24639e8a9164f42bd554ba7728ab8cb5 755 bin/monitoring-update-config.php
|
97d407d75a26bd2ebbb86a2e5f8dab8b24639e8a9164f42bd554ba7728ab8cb5 755 bin/monitoring-update-config.php
|
||||||
de19c7cddbfbfca82813479d57f156d22c7f9f3733f18fec8b19515ded00dd7b 755 bin/monitoring-update.php
|
8cf4518b2d7628dedde25af84b93ee2a99340029cafdc8b9924a4d23ebc7d8f5 755 bin/monitoring-update.php
|
||||||
dc70c1184da4aa32eebdeaee57cfed23e91397c94a6243e0ac8664968078f0c7 644 conf/alert-engine.conf.php
|
dc70c1184da4aa32eebdeaee57cfed23e91397c94a6243e0ac8664968078f0c7 644 conf/alert-engine.conf.php
|
||||||
8c40d1c177a40d47c72ba8aab757ca37faa06e64d5fa80e2ba59d9637f62c59e 644 conf/monitoring.conf.php
|
8c40d1c177a40d47c72ba8aab757ca37faa06e64d5fa80e2ba59d9637f62c59e 644 conf/monitoring.conf.php
|
||||||
9bb7f5438edc5fb6a5b899ee21be2a5a559eb0697a028a4e991fc82362eaa460 644 lib/monitoring-lib.php
|
9bb7f5438edc5fb6a5b899ee21be2a5a559eb0697a028a4e991fc82362eaa460 644 lib/monitoring-lib.php
|
||||||
|
|||||||
Reference in New Issue
Block a user