Tuto - vérifier l'externalisation des backups et leur cohérence

Hello,

Je confirme que le format est commun quelque soit le stockage.
Pour information, une nouvelle version du plugin cloudsyncpro devrait voir le jour avec beaucoup d’amélioration sur la gestion des erreurs et le suivi des sauvegardes.

Je prévois aussi un système de notifications, un historique des sauvegardes et …

5 « J'aime »

Si tout est intégré au plugin, c’est encore mieux :star_struck:

Hello,
Je ne sais pas si Phpvarious suit ce fil, mais entre son Info Backup et celui là il devrait y avoir peut-être la possibilité d’avoir une remontée complète de l’état des backups dans un même widget ?
Bien cordialement

Tu as un sujet qui parle de cet info backup ? je ne trouve rien

https://phpvarious.github.io/documentation/widget/fr_FR/widget_scenario/

Merci beaucoup pour le partage, même si pour le moment il ne semble pas fonctionner chez moi :frowning:

Voici ma configuration:

Et j’utilise le Framework SC de dJuL.

J’ai configuré CloudSync Pro avec une sauvegarde par FTP et j’ai rajouté la fonction de list pour le scénario.

Les sauvegardes fonctionnent et la fonction de list aussi et voici le contenu du fichier pour la fonction list,

Pour le problème, j’ai rajouté un affichage du retour de la fonction csv-to-array et de la table data dans le script pour vous montrer le log,

------------------------------------
[2023-05-06 16:14:53][SCENARIO] -- Start : Scenario lance manuellement.
[2023-05-06 16:14:53][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #cmdListe# => #2212#
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #seuilTailleMin# => 20
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #seuilTailleMax# => 300
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #AlerteCentreMsg# => 1
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #AlerteNotif# => 1
[2023-05-06 16:14:53][SCENARIO] Mise à jour du tag #cmdNotif# => #665#
[2023-05-06 16:14:53][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-05-06 16:14:53][SCENARIO] Exécution d'un bloc code 
[2023-05-06 16:14:53][SCENARIO]  - ----------------------------------------
[2023-05-06 16:14:53][SCENARIO]  - - Framework sc v0.995d
[2023-05-06 16:14:53][SCENARIO]  - - Vos scenarios en PHP
[2023-05-06 16:14:53][SCENARIO]  - - by dJuL
[2023-05-06 16:14:53][SCENARIO]  - ----------------------------------------
[2023-05-06 16:14:53][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2023-05-06 16:14:53][SCENARIO]  - - - 
[2023-05-06 16:14:53][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG NATIF ACTIF (php >= v7) */
[2023-05-06 16:14:53][SCENARIO]  - - - 
[2023-05-06 16:14:53][SCENARIO] ┌──────────── Logs bloc code - version du 03/05/2023 19:00
[2023-05-06 16:14:53][SCENARIO] | Fichier log : /var/www/html/log/cloudsyncpro.#2212
[2023-05-06 16:14:53][SCENARIO] | Taille min  : 20Mo
[2023-05-06 16:14:53][SCENARIO] | Taille max  : 300Mo
[2023-05-06 16:15:13][SCENARIO] Debug : Retour csv_to_array : [false,false,false,false,false,false,false]
[2023-05-06 16:15:13][SCENARIO] Debug : data[0] : false
[2023-05-06 16:15:13][SCENARIO] Debug : data[1] : false
[2023-05-06 16:15:13][SCENARIO] Debug : data[2] : false
[2023-05-06 16:15:13][SCENARIO] Debug : data[3] : false
[2023-05-06 16:15:13][SCENARIO] | Résumé :  (Version : )
[2023-05-06 16:15:13][SCENARIO] |     Nb backup presents   : 3
[2023-05-06 16:15:13][SCENARIO] |     1er backup dispo     : 30/11/1999 (0Mo)
[2023-05-06 16:15:13][SCENARIO] |     dernier backup dispo : 30/11/1999 (0Mo)
[2023-05-06 16:15:13][SCENARIO] |     Taille moyenne       : 0Mo
[2023-05-06 16:15:13][SCENARIO] | /!\ Pb de taille sur un backup - merci de verifier (taille min : 0Mb, max :0Mb)
[2023-05-06 16:15:13][SCENARIO] | /!\ Pas de backup aujourd'hui
[2023-05-06 16:15:13][SCENARIO] └───────────────────────────
[2023-05-06 16:15:13][SCENARIO]  - - - 
[2023-05-06 16:15:13][SCENARIO]  - /* - Fin du Bloc code n°1 - */
[2023-05-06 16:15:13][SCENARIO]  - - - 
[2023-05-06 16:15:13][SCENARIO] Durée d'exécution (depuis le 1er bloc code) : 20239.05 millisecondes
[2023-05-06 16:15:13][SCENARIO] Fin correcte du scénario

J’ai essayé avec le framework et sans, mais même résultat, le fichier est au bon endroit et on a bien les 7 entrées, par contre le retour de la fonction donne tout en null :frowning:

Est ce que quelqu’un aurais une idée?

Merci pour votre aide,

Mathieu

Cela ressemble à ce que j’ai eu avec les lignes du fichier log qui commencent par un espace.

J’ai solutionné en modifiant la variable $header dans la fonction csv_to_array :

    $header    = array(
        'vide',      
        'taille',
        'date',
        'heure',
        'file'
    );
1 « J'aime »

Merci beaucoup, c’était exactement cela :ok_hand:

Mathieu

1 « J'aime »

Bonjour et merci à @ngrataloup pour le boulot et m’avoir filé l’info sur mon autre post (apres-quelques-temps-erreurs-400-comment-etre-au-courant-quand-cela-ne-fonctionne-pas).
Par contre mon erreur avec GoogleApi n’est pas capté par ton script. Je sais pas si le execCmd peut renvoyer un retour pour pouvoir récupérer cette erreur.

------------------------------------
[2024-03-10 13:18:44][SCENARIO] Start : Scenario lance manuellement.
[2024-03-10 13:18:44][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #cmdListe# => #694#
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #seuilTailleMin# => 200
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #seuilTailleMax# => 300
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #AlerteCentreMsg# => 1
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #AlerteNotifJC# => 1
[2024-03-10 13:18:44][SCENARIO] Mise à jour du tag #cmdNotifJC# => #57#
[2024-03-10 13:18:44][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-03-10 13:18:44][SCENARIO] Exécution d'un bloc code
[2024-03-10 13:18:44][SCENARIO] ┌──────────── Logs bloc code - version du 03/05/2023 19:00
[2024-03-10 13:18:44][SCENARIO] | Fichier log : /var/www/html/log/cloudsyncpro.#694
[2024-03-10 13:18:44][SCENARIO] | Taille min  : 200Mo
[2024-03-10 13:18:44][SCENARIO] | Taille max  : 300Mo
[2024-03-10 13:18:44][SCENARIO] Client error: `POST https://oauth2.googleapis.com/token` resulted in a `400 Bad Request` response:
{
"error": "invalid_grant",
"error_description": "Token has been expired or revoked."
}
[2024-03-10 13:18:44][SCENARIO] Fin correcte du scénario

Oui, c’ets fort possible, je teste l’existence ou non d’un fichier de log mais pas si le contenu est cogerent
est-ce que tu pourrais me donner le contenu du log qui se nomme :

cloudsyncpro.#<ID commande>

est l’ID de la commande qui liste le contenu du repertoire de sauvegarde

Norbert

Bonjour

j’ai fait un essaie avec envoie sur TELEGRAM :

mais je ne

rien sur TELEGRAM :

Je ne compre pas pourquoi
Pouvez vous m’aider ?

Résolue j’avais un espace aprés MATTHIEU de la commande TELEGRAM

Bonjour à tous,

Est ce possible d’avoir une phrase quand le backup est ok ?

Merci

Une phrase dans les.ligs ? Ou une notification ?

une notification sa me perturbe de rien avoir mdr

IL faut alors revoir un peu le bloc code.
copie moi le tien que je regarde les modifs à faire

Norbert


// version bloc code
$version = '03/05/2023 21:00';
$scenario->setLog('┌──────────── Logs bloc code - version du ' . $version);

/**
* Class and Function List:
* Function list:
* - csv_to_array()
* Classes list:
*/

function csv_to_array($filename  = '', $delimiter = ',') {
    if (!file_exists($filename) || !is_readable($filename)) return false;

    $header    = array(
        'taille',
        'date',
        'heure',
        'file'
    );
    $data      = array();
    if (($handle    = fopen($filename, 'r')) !== false) {
        while (($row       = fgetcsv($handle, 1000, $delimiter)) !== false) {
            if (!$header) $header    = $row;
            else $data[]           = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}

// parametres
$tags            = $scenario->getTags(); //récupère la liste des tags
$cmdIdListe      = str_replace('#', '', $tags['#cmdListe#']);
$seuilTailleMax  = $tags['#seuilTailleMax#'];
$seuilTailleMin  = $tags['#seuilTailleMin#'];
$AlerteCentreMsg = $tags['#AlerteCentreMsg#'];
$AlerteNotifJC   = $tags['#AlerteNotifJC#'];
$AlerteNotifTelegram = $tags['#AlerteNotifTelegram#'];
$fichierListe    = '/var/www/html/log/cloudsyncpro.#' . $cmdIdListe;

if ($AlerteNotifJC) $cmdNotifJC      = cmd::byId(str_replace('#', '', $tags['#cmdNotifJC#']));
if ($AlerteNotifTelegram) $cmdNotifTelegram      = cmd::byId(str_replace('#', '', $tags['#cmdNotifTelegram#']));


$scenario->setLog('| Fichier log : ' . $fichierListe);
$scenario->setLog('| Taille min  : ' . $seuilTailleMin . 'Mo');
$scenario->setLog('| Taille max  : ' . $seuilTailleMax . 'Mo');

// mise à jour de la liste
cmd::byId($cmdIdListe)->execCmd();

if (!file_exists($fichierListe) || !is_readable($fichierListe)) {
    $scenario->setLog('| /!\ le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible');
    if ($AlerteCentreMsg) message::add('Backup', 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible');
    if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
        'title'         => 'title=Defaut BACKUP ' . $site,
        'message'       => 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible'
    ) , $cache   = 0);
  	if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        'message'       => 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible'
    ) , $cache   = 0);
}

else {
    // mise à jour de la liste
    cmd::byId($cmdIdListe)->execCmd();

    // Extraction des données du fichier dans un tableau
    $data = csv_to_array($fichierListe, ' ');

    // suppression des lignes vides
    for ($n    = 0;$n < count($data);$n++) {
        if (empty($data[$n][taille])) {
            array_splice($data, $n, 1);
        }
    }

    // recherche des sites de backup concernés
    for ($n = 0;$n < count($data);$n++) {
        $file                 = explode('-', $data[$n][file]);
        $sites[]                      = $file[1];
    }
    $sites                = array_unique($sites);

    foreach ($sites as $site) {
        $nbBackup             = 0;
        $tailleTotale         = 0;
        $tailleMax            = '';
        $tailleMin            = '';
        $backupToday          = 0;
        $tailleFirstBackup	  = 0;
        $tailleLastBackup	  = 0;
        $timestampFirstBackup = '';
        $timestampLastBackup  = '';

        for ($n                    = 0;$n < count($data);$n++) {
            $file    = explode('-', $data[$n][file]);
            if ($site == $file[1]) {
                // $scenario->setLog($site.'  -  '.$file[1]) ;
                $taille  = round($data[$n][taille] / 1024 / 1024);
                $file    = explode('-', $data[$n][file]);
                $jeedom  = $file[1];
                $version = $file[2];

                // $scenario->setLog($jeedom.' version '.$version.' taille '.$taille.'Mo '.date("d/m/y", $date));
                // nb de backup, taille totale et taille des backups
                $nbBackup++;
                $tailleTotale         = $tailleTotale + $taille;
                if ($taille > $tailleMax || empty($tailleMax)) $tailleMax            = $taille;
                if ($taille < $tailleMin || empty($tailleMin)) $tailleMin            = $taille;

                // date des backu^p
                $timestampBackup      = mktime(0, 0, 0, $file[4], $file[5], $file[3]); // timstamp du backup )à 0à:00
                $timestampNow         = mktime(0, 0, 0, date('m') , date('d') , date('Y'));
                if ($timestampBackup == $timestampNow) $backupToday          = 1;
                if ($timestampBackup <= $timestampFirstBackup || empty($timestampFirstBackup)) {
                  $timestampFirstBackup = $timestampBackup;
                  $tailleFirstBackup = $taille ;
                }
                if ($timestampBackup >= $timestampLastBackup || empty($timestampLastBackup)) {
                  $timestampLastBackup  = $timestampBackup;
                  $tailleLastBackup = $taille ;
                }
                  

            }
        }
        $scenario->setLog('| Résumé : ' . $site . ' (Version : ' . $version . ')');
        $scenario->setLog('|     Nb backup presents   : ' . $nbBackup);
        $scenario->setLog('|     1er backup dispo     : ' . date('d/m/Y', $timestampFirstBackup).' ('.$tailleFirstBackup.'Mo)');
        $scenario->setLog('|     dernier backup dispo : ' . date('d/m/Y', $timestampLastBackup).' ('.$tailleLastBackup.'Mo)');
        $scenario->setLog('|     Taille moyenne       : ' . round($tailleTotale / $nbBackup) . 'Mo');

        // gestion des erreurs
        if ($tailleMax >= $seuilTailleMax || $tailleMin <= $seuilTailleMin) {
            $scenario->setLog('| /!\ Pb de taille sur un backup - merci de verifier (taille min : ' . $tailleMin . 'Mb, max :' . $tailleMax . 'Mb)');
            if ($AlerteCentreMsg) message::add('Backup', $site . ' - Pb de taille sur une sauvegarde - merci de verifier (taille min : ' . $tailleMin . 'Mb, max :' . $tailleMax . 'Mb)');
            if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
                'title'         => 'title=Defaut BACKUP ' . $site,
                'message'       => 'Attention : Pb de taille sur un backup<br>Taille min : ' . $tailleMin . 'Mb<br>Taille max :' . $tailleMax . 'Mb'
            ) , $cache   = 0);
            if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        		'message'       => 'Attention : problème de taille sur un backup' ."\n" .'Taille min : ' . $tailleMin . 'Mb' ."\n" .'Taille max : ' . $tailleMax . 'Mb'
    		) , $cache   = 0);
		}
        if ( !$backupToday) {
            $scenario->setLog('| /!\ Pas de backup aujourd\'hui');
            if ($AlerteCentreMsg) message::add('Backup', $site . ' - Pas de backup aujourd\'hui, dernier backup : ' . date('d/m/Y', $timestampLastBackup));
            if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
                'title'         => 'title=Defaut BACKUP ' . $site,
                'message'       => 'Pas de backup aujourd\'hui<br>Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
            ) , $cache   = 0);
            if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        		'message'       => 'Pas de backup aujourd\'hui Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
    		) , $cache   = 0);         
        }
    }
}

$scenario->setLog('└───────────────────────────');


Ca devrait repondre à ton besoin. Cette version intègre systématiquement une notif

// version bloc code
$version = '19/05/2024 14:00';
$scenario->setLog('┌──────────── Logs bloc code - version du ' . $version);

/**
* Class and Function List:
* Function list:
* - csv_to_array()
* Classes list:
*/

function csv_to_array($filename  = '', $delimiter = ',') {
    if (!file_exists($filename) || !is_readable($filename)) return false;

    $header    = array(
        'taille',
        'date',
        'heure',
        'file'
    );
    $data      = array();
    if (($handle    = fopen($filename, 'r')) !== false) {
        while (($row       = fgetcsv($handle, 1000, $delimiter)) !== false) {
            if (!$header) $header    = $row;
            else $data[]           = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}

// parametres
$tags            = $scenario->getTags(); //récupère la liste des tags
$cmdIdListe      = str_replace('#', '', $tags['#cmdListe#']);
$seuilTailleMax  = $tags['#seuilTailleMax#'];
$seuilTailleMin  = $tags['#seuilTailleMin#'];
$AlerteCentreMsg = $tags['#AlerteCentreMsg#'];
$AlerteNotifJC   = $tags['#AlerteNotifJC#'];
$AlerteNotifTelegram = $tags['#AlerteNotifTelegram#'];
$fichierListe    = '/var/www/html/log/cloudsyncpro.#' . $cmdIdListe;

if ($AlerteNotifJC) $cmdNotifJC      = cmd::byId(str_replace('#', '', $tags['#cmdNotifJC#']));
if ($AlerteNotifTelegram) $cmdNotifTelegram      = cmd::byId(str_replace('#', '', $tags['#cmdNotifTelegram#']));


$scenario->setLog('| Fichier log : ' . $fichierListe);
$scenario->setLog('| Taille min  : ' . $seuilTailleMin . 'Mo');
$scenario->setLog('| Taille max  : ' . $seuilTailleMax . 'Mo');

// mise à jour de la liste
cmd::byId($cmdIdListe)->execCmd();

if (!file_exists($fichierListe) || !is_readable($fichierListe)) {
    $scenario->setLog('| /!\ le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible');
    if ($AlerteCentreMsg) message::add('Backup', 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible');
    if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
        'title'         => 'title=Defaut BACKUP ' . $site,
        'message'       => 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible'
    ) , $cache   = 0);
  	if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        'message'       => 'Vérification des backups, ERREUR : le fichier ' . $fichierListe . ' n\'existe pas ou n\'est pas lisible'
    ) , $cache   = 0);
}

else {
    // mise à jour de la liste
    cmd::byId($cmdIdListe)->execCmd();

    // Extraction des données du fichier dans un tableau
    $data = csv_to_array($fichierListe, ' ');

    // suppression des lignes vides
    for ($n    = 0;$n < count($data);$n++) {
        if (empty($data[$n][taille])) {
            array_splice($data, $n, 1);
        }
    }

    // recherche des sites de backup concernés
    for ($n = 0;$n < count($data);$n++) {
        $file                 = explode('-', $data[$n][file]);
        $sites[]                      = $file[1];
    }
    $sites                = array_unique($sites);

    foreach ($sites as $site) {
        $nbBackup             = 0;
        $tailleTotale         = 0;
        $tailleMax            = '';
        $tailleMin            = '';
        $backupToday          = 0;
        $tailleFirstBackup	  = 0;
        $tailleLastBackup	  = 0;
        $timestampFirstBackup = '';
        $timestampLastBackup  = '';
      
        $erreur = 0 ;

        for ($n                    = 0;$n < count($data);$n++) {
            $file    = explode('-', $data[$n][file]);
            if ($site == $file[1]) {
                // $scenario->setLog($site.'  -  '.$file[1]) ;
                $taille  = round($data[$n][taille] / 1024 / 1024);
                $file    = explode('-', $data[$n][file]);
                $jeedom  = $file[1];
                $version = $file[2];

                // $scenario->setLog($jeedom.' version '.$version.' taille '.$taille.'Mo '.date("d/m/y", $date));
                // nb de backup, taille totale et taille des backups
                $nbBackup++;
                $tailleTotale         = $tailleTotale + $taille;
                if ($taille > $tailleMax || empty($tailleMax)) $tailleMax            = $taille;
                if ($taille < $tailleMin || empty($tailleMin)) $tailleMin            = $taille;

                // date des backu^p
                $timestampBackup      = mktime(0, 0, 0, $file[4], $file[5], $file[3]); // timstamp du backup )à 0à:00
                $timestampNow         = mktime(0, 0, 0, date('m') , date('d') , date('Y'));
                if ($timestampBackup == $timestampNow) $backupToday          = 1;
                if ($timestampBackup <= $timestampFirstBackup || empty($timestampFirstBackup)) {
                  $timestampFirstBackup = $timestampBackup;
                  $tailleFirstBackup = $taille ;
                }
                if ($timestampBackup >= $timestampLastBackup || empty($timestampLastBackup)) {
                  $timestampLastBackup  = $timestampBackup;
                  $tailleLastBackup = $taille ;
                }
                  

            }
        }
        $scenario->setLog('| Résumé : ' . $site . ' (Version : ' . $version . ')');
        $scenario->setLog('|     Nb backup presents   : ' . $nbBackup);
        $scenario->setLog('|     1er backup dispo     : ' . date('d/m/Y', $timestampFirstBackup).' ('.$tailleFirstBackup.'Mo)');
        $scenario->setLog('|     dernier backup dispo : ' . date('d/m/Y', $timestampLastBackup).' ('.$tailleLastBackup.'Mo)');
        $scenario->setLog('|     Taille moyenne       : ' . round($tailleTotale / $nbBackup) . 'Mo');

        // gestion des erreurs
        if ($tailleMax >= $seuilTailleMax || $tailleMin <= $seuilTailleMin) {
            $erreur = 1 ;
            $scenario->setLog('| /!\ Pb de taille sur un backup - merci de verifier (taille min : ' . $tailleMin . 'Mb, max :' . $tailleMax . 'Mb)');
            if ($AlerteCentreMsg) message::add('Backup', $site . ' - Pb de taille sur une sauvegarde - merci de verifier (taille min : ' . $tailleMin . 'Mb, max :' . $tailleMax . 'Mb)');
            if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
                'title'         => 'title=Defaut BACKUP ' . $site,
                'message'       => 'Attention : Pb de taille sur un backup<br>Taille min : ' . $tailleMin . 'Mb<br>Taille max :' . $tailleMax . 'Mb'
            ) , $cache   = 0);
            if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        		'message'       => 'Attention : problème de taille sur un backup' ."\n" .'Taille min : ' . $tailleMin . 'Mb' ."\n" .'Taille max : ' . $tailleMax . 'Mb'
    		) , $cache   = 0);
		}
        if ( !$backupToday) {
            $erreur = 1 ;
            $scenario->setLog('| /!\ Pas de backup aujourd\'hui');
            if ($AlerteCentreMsg) message::add('Backup', $site . ' - Pas de backup aujourd\'hui, dernier backup : ' . date('d/m/Y', $timestampLastBackup));
            if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
                'title'         => 'title=Defaut BACKUP ' . $site,
                'message'       => 'Pas de backup aujourd\'hui<br>Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
            ) , $cache   = 0);
            if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        		'message'       => 'Pas de backup aujourd\'hui Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
    		) , $cache   = 0);  
        }
        if ( $erreur == 0 ) {
            $scenario->setLog('|     Aucun pb de backup aujourd\'hui');
            //if ($AlerteCentreMsg) message::add('Backup', $site . ' - Pas de backup aujourd\'hui, dernier backup : ' . date('d/m/Y', $timestampLastBackup));
            if ($AlerteNotifJC) $cmdNotifJC->execCmd($options = array(
                'title'         => 'title=BACKUP ' . $site.' OK',
                'message'       => 'Aucun pb de backup aujourd\'hui<br>Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
            ) , $cache   = 0);
            if ($AlerteNotifTelegram) $cmdNotifTelegram->execCmd($_options = array(
        		'message'       => 'Aucun pb de backup aujourd\'hui Dernier backup : ' . date('d/m/Y', $timestampLastBackup)
    		) , $cache   = 0);  
        }
    }
}

$scenario->setLog('└───────────────────────────');
1 « J'aime »

Super mais j’essaye de l’intégrer a message que je reçoit à 7h30 tous les jours mais j’y arrive pas.

Au lieu d’envoyer un message via la commande TELEGRAM

Pourrait tu me guider ou modifier :rofl: pour que le code crée un message ce nomant

$messageSAUVEGARDE

@ngrataloup : J’ai réussi

1 « J'aime »