Optimisation Mémoire - Espace disque libre sur Jeedom Box

Salut,

Faire cela sans hésiter
Et purger l historique en limitant le temps d archivage

Aussi creer un scenario avec un bloc code et colle ci dessous le code ,le log du scenario sera interressant a analyser apres avoir executer le dit scenario.

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

$seuilalert24h     = 50 ;      // Seuil d'alerte pour le nb de ligne générées /24h pour une commande : 50 par defaut
$seuilArch         = 50000 ;   // Seuil d'alerte pour le nb de ligne archivées pour une commande : 50000 par defaut
$topXCmd           = 10 ;  	   // Recupere seulement les X commandes les plus volumineuses : 10 par defaut	
$seuilTailleTable  = 200 ;     // Seuil alerte en MB pour la taille d'une table : 200 MB par defaut
$seuilNbLigneTable = 2000000 ; // Seuil alerte pour le nb de lignes d'une table : 2 000 000 par defaut

// RESUME
$sql_resume = "SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024)) as `MB`,table_rows as `Ligne` FROM information_schema.TABLES WHERE table_schema='jeedom' ORDER BY MB DESC LIMIT 5" ;
$results_resume = DB::Prepare($sql_resume, NULL, DB::FETCH_TYPE_ALL);
$scenario->setLog('| -------- RESUME');
$scenario->setLog('| ');
foreach ($results_resume as $result_resume) {
  $table = $result_resume['Table'];
  $taille = $result_resume['MB'];
  $nblign = $result_resume['Ligne'];
  $scenario->setLog('|     Table '.$table.' : Taille -> '.$taille.'MB , nb lignes -> '.$nblign);
  if ( $taille >= $seuilTailleTable || $nblign >= $seuilNbLigneTable ) $scenario->setLog('| /!\ Table Anormalement grosse, taille superieure au seuil ('.$taille.'MB)') ;
  if ( $nblign >= $seuilNbLigneTable ) $scenario->setLog('| /!\ Table Anormalement grosse, Nb de lignes superieur au seuil ('.$nblign.' lignes)') ;
}
$scenario->setLog('| ');
$scenario->setLog('| -------- FIN RESUME');

// ANALYSE DES EQUIPEMENT
$scenario->setLog('| ');
$scenario->setLog('| -------- COMMANDES AVEC DONNEES VOLUMINEUSES');
$scenario->setLog('| ');
$sql = 'SELECT arch.cmd_id id, count(arch.value) as countarch FROM historyArch arch  GROUP BY arch.cmd_id ORDER BY countarch DESC LIMIT '.$topXCmd;

$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {

  $id = $result['id'];
  $nb_arch = $result['countarch'];
  $sql_cmddesc = 'SELECT cmd.id cmd_id, cmd.name cmd, eqLogic.name equipement,object.name objectname, cmd.eqType plugin, count(*) as counthist FROM cmd LEFT JOIN eqLogic ON cmd.eqLogic_id = eqLogic.id LEFT JOIN object ON eqLogic.object_id = object.id LEFT JOIN history ON cmd.id = history.cmd_id WHERE cmd.id = '.$id.' GROUP BY history.cmd_id ';
  $results_cmd = DB::Prepare($sql_cmddesc, NULL, DB::FETCH_TYPE_ALL);
  
  // recherche de la premiere date d'historique
  $sql_firstHist = 'SELECT datetime FROM historyArch WHERE cmd_id = '.$id.' ORDER BY datetime ASC LIMIT 1' ;
  $results_dateHist = DB::Prepare($sql_firstHist, NULL, DB::FETCH_TYPE_ALL);
  foreach ($results_dateHist as $result_dateHist) {
	$now_date = new DateTime("now");
	$diff = time() - strtotime($result_dateHist['datetime']);
	$diff_in_day = floor($diff / 86400);
    $nb_valeurParJour = round($nb_arch / $diff_in_day);
  }
    
  foreach ($results_cmd as $result_cmd) {
    $object = $result_cmd['objectname'] ;
    $equipement = $result_cmd['equipement'] ;
    $cmd = $result_cmd['cmd'] ;
    $plugin = $result_cmd['plugin'] ;
    $nb_hist = $result_cmd['counthist'] ;
    if (date(H) <= 5 ) $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d")-1, date("Y"));
    else $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d"), date("Y"));
    
    // recup de la config de la commande
    $conf_histo = cmd::byId($id)->getIsHistorized() ;
    $conf_histoMode = cmd::byId($id)->getConfiguration('historizeMode') ;
    if ( $conf_histoMode == '' || $conf_histoMode == 'none' ) $conf_histoMode = 'aucun' ;
    $conf_histopurge = cmd::byId($id)->getConfiguration('historyPurge') ;
    if ( $conf_histopurge == '' || $conf_histopurge == 'none' ) $conf_histopurge = 'aucun' ;
    $nb_hist24h = round($nb_hist * 86400 / ( time() - $timestamp_archivage)) ;
    $scenario->setLog('| '.$plugin.' -> #['. $object .']['.$equipement.']['.$cmd.']# (id : '.$id.')');
    if ( $nb_hist24h >= $seuilalert24h && $conf_histoMode == 'aucun' && $conf_histopurge == 'aucun' ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur par 24h important ('. $nb_hist24h.') et aucun lissage ni aucune purge paramétrés');    
    if ( $nb_arch >= $seuilArch ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur archivéess trop importantes ('. $nb_arch.'), superieur à '.$seuilArch);    
    $scenario->setLog('|     Configuration : historisé -> '.$conf_histo.' , lissage -> '. $conf_histoMode . ' , purge -> '. $conf_histopurge  ) ;
    $scenario->setLog('|     Historique    : '.$nb_hist.' valeurs (estimation sur 24h : '.$nb_hist24h.')' );
    $scenario->setLog('|     Archives      : '.$nb_arch.' valeurs depuis '.$diff_in_day.' jours ('.$nb_valeurParJour.' valeurs par jour en moyenne)');
    $scenario->setLog('|');
          
    
  } 
}
$scenario->setLog('| -------- FIN COMMANDES AVEC DONNEES VOLUMINEUSES');

// ANALYSE DES EQUIPEMENT
$scenario->setLog('| ');
$scenario->setLog('| -------- COMMANDES AVEC DONNEES ALPHANUMERIQUES');
$scenario->setLog('| ');
$sql = "SELECT cmd_id id, sum(LENGTH(value)) countarch FROM historyArch WHERE value REGEXP '[a-z;A-Z]' GROUP BY cmd_id ORDER BY countarch DESC LIMIT ".$topXCmd;

$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {

  $id = $result['id'];
  $nb_arch = $result['countarch'];
  $sql_cmddesc = 'SELECT cmd.id cmd_id, cmd.name cmd, eqLogic.name equipement,object.name objectname, cmd.eqType plugin, sum(LENGTH(history.value)) as counthist FROM cmd LEFT JOIN eqLogic ON cmd.eqLogic_id = eqLogic.id LEFT JOIN object ON eqLogic.object_id = object.id LEFT JOIN history ON cmd.id = history.cmd_id WHERE cmd.id = '.$id.' GROUP BY history.cmd_id ';
  $results_cmd = DB::Prepare($sql_cmddesc, NULL, DB::FETCH_TYPE_ALL);
  
  // recherche de la premiere date d'historique
  $sql_firstHist = 'SELECT datetime FROM historyArch WHERE cmd_id = '.$id.' ORDER BY datetime ASC LIMIT 1' ;
  $results_dateHist = DB::Prepare($sql_firstHist, NULL, DB::FETCH_TYPE_ALL);
  foreach ($results_dateHist as $result_dateHist) {
	$now_date = new DateTime("now");
	$diff = time() - strtotime($result_dateHist['datetime']);
	$diff_in_day = floor($diff / 86400);
    $nb_valeurParJour = round($nb_arch / $diff_in_day);
  }
    
  foreach ($results_cmd as $result_cmd) {
    $object = $result_cmd['objectname'] ;
    $equipement = $result_cmd['equipement'] ;
    $cmd = $result_cmd['cmd'] ;
    $plugin = $result_cmd['plugin'] ;
    $nb_hist = $result_cmd['counthist'] ;
    if ( $nb_hist == '' ) $nb_hist = 0 ;
    if (date(H) <= 5 ) $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d")-1, date("Y"));
    else $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d"), date("Y"));
    
    // recup de la config de la commande
    $conf_histo = cmd::byId($id)->getIsHistorized() ;
    $conf_histoMode = cmd::byId($id)->getConfiguration('historizeMode') ;
    if ( $conf_histoMode == '' || $conf_histoMode == 'none' ) $conf_histoMode = 'aucun' ;
    $conf_histopurge = cmd::byId($id)->getConfiguration('historyPurge') ;
    if ( $conf_histopurge == '' || $conf_histopurge == 'none' ) $conf_histopurge = 'aucun' ;
    $nb_hist24h = round($nb_hist * 86400 / ( time() - $timestamp_archivage)) ;
    $scenario->setLog('| '.$plugin.' -> #['. $object .']['.$equipement.']['.$cmd.']# (id : '.$id.')');
    if ( $nb_hist24h >= $seuilalert24h && $conf_histoMode == 'aucun' && $conf_histopurge == 'aucun' ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur par 24h important ('. $nb_hist24h.') et aucun lissage ni aucune purge paramétrés');    
    if ( $nb_arch >= $seuilArch ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur archivéess trop importantes ('. $nb_arch.'), superieur à '.$seuilArch);    
    $scenario->setLog('|     Configuration : historisé -> '.$conf_histo.' , lissage -> '. $conf_histoMode . ' , purge -> '. $conf_histopurge  ) ;
    $scenario->setLog('|     Historique    : '.$nb_hist.' caractères (estimation sur 24h : '.$nb_hist24h.')' );
    $scenario->setLog('|     Archives      : '.$nb_arch.' caractères depuis '.$diff_in_day.' jours ('.$nb_valeurParJour.' caractères par jour en moyenne)');
    $scenario->setLog('|');
          
    
  } 
}
$scenario->setLog('| -------- FIN COMMANDES AVEC DONNEES ALPHANUMERIQUES');

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