Changeset 111828 in spip-zone


Ignore:
Timestamp:
Oct 2, 2018, 9:00:19 PM (14 months ago)
Author:
jluc@…
Message:

nouvelle actions list et clean pour virer les caches périmés, ça aidera APC à bien gérer ses entrées + sauter les caches qui ne concernent pas le site + nouvelle option clean + nouvelles stats nb_clean et nb_alien

Location:
_plugins_/cachelab/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/cachelab/trunk/inc/cachelab.php

    r111825 r111828  
    1212        }
    1313}
    14 
    15 if ($cle_objet and !$id_objet)
    16         die ("$cle_objet est inconnu : passez le en argument d'url ou définissez XRAY_ID_OBJET_SPECIAL en php");
    1714
    1815function cachelab_applique ($action, $cle, $arg=null, $options='') {
     
    2623        case 'del' :
    2724                $del = $Memoization->del($joliecle);
    28                 if (!$del and CACHELAB_CACHE_ECHECS)
    29                         spip_log ("Échec del $joliecle", 'cachelab');
     25                if (!$del)
     26                        spip_log ("Échec 'del' $joliecle", 'cachelab');
    3027                break;
    3128
     
    3936                        $data = $Memoization->set($joliecle, $data);
    4037                }
    41                 elseif (CACHELAB_LOG_ECHECS)
     38                else
    4239                        spip_log("clé=$joliecle : pour $action avec arg=".print_r($arg,1)." et opt=".print_r($options,1).", data n'est pas un tableau : ".print_r($data, 1), 'cachelab');
    4340                break;
     
    5451
    5552        case 'pass' :
     53        case 'list' :
    5654                break;
    5755
     
    6967                die ("Il faut mémoization avec APC ou APCu");
    7068
     69        // filtrage
    7170        $session = (isset($conditions['session']) ? $conditions['session'] : null);
    7271        if ($session=='courante')
    7372                $session = spip_session();
    7473        $chemin = (isset($conditions['chemin']) ? $conditions['chemin'] : null);
     74        $chemins = explode('|', $chemin); // sert seulement pour methode_chemin == strpos
     75
    7576        $cle_objet = (isset($conditions['cle_objet']) ? $conditions['cle_objet'] : null);
    7677        $id_objet = (isset($conditions['id_objet']) ? $conditions['id_objet'] : null);
    77 
     78        if ($cle_objet and !$id_objet)
     79                die ("$cle_objet est inconnu : passez le en argument d'url ou définissez XRAY_ID_OBJET_SPECIAL en php");
     80
     81        // options
    7882        $methode_chemin = (isset ($options['methode_chemin']) ? $options['methode_chemin'] : 'strpos');
    79         $avec_listes = (isset ($options['listes']) and $options['listes']);
    80         $avec_chrono = (isset ($options['chrono']) and $options['chrono']);
    81         if ($avec_chrono) {
     83        $do_clean = ($action != 'pass') and (!isset ($options['clean']) or $options['clean']);
     84        $do_lists = ($action != 'list') or (isset ($options['listes']) and $options['listes']);
     85        $do_chrono = (isset ($options['chrono']) and $options['chrono']);
     86        if ($do_chrono) {
    8287                include_spip ('lib/microtime.inc');
    8388                microtime_do ('begin');
    8489        }
    85 
    86         $nb_caches=$nb_no_data=$nb_data_not_array=$nb_cible=0;
     90        // retours
     91        $nb_alien=$nb_site=$nb_clean=$nb_no_data=$nb_not_array=$nb_cible=0;
    8792        $nb_session=($session ? 0 : '_');
    88         $nb_matche_chemin=($chemin ? 0 : '_');
    89         $matche_chemin = $no_data = $data_not_array = $cible = array();
     93        $nb_chemin=($chemin ? 0 : '_');
     94        $l_session = $l_chemin = $l_no_data = $l_not_array = $l_cible = array();
    9095
    9196        $len_prefix = strlen(_CACHE_NAMESPACE);
    92         $chemins = explode('|', $chemin);
    9397        $cache = apcu_cache_info();
     98        $meta_derniere_modif = lire_meta('derniere_modif');
     99       
    94100        foreach($cache['cache_list'] as $i => $d) {
    95101                $cle = $d['info'];
    96                 if ($d and strpos ($cle, ':cache:') and  apcu_exists($cle)
    97                         // and ($meta_derniere_modif <= $d['creation_time']) // OUI décommenter
     102                // on saute les caches d'autres origines
     103                // (et les caches d'un précédent _CACHE_NAMESPACE pour ce même site)
     104                if (strpos ($cle, _CACHE_NAMESPACE) !== 0) {
     105                        $nb_alien++;
     106                        continue;
     107                }
     108
     109                if ((substr($cle, $len_prefix-1, 7) == ':cache:')
     110                        and  apcu_exists($cle)
    98111                        ) {
    99                         $nb_caches++;
     112                        // effacer les caches périmés
     113                        if ($do_clean and ($meta_derniere_modif > $d['creation_time'])) {
     114                                $Memoization->del(substr($cle,$len_prefix));
     115                                $nb_clean++;
     116                                continue;
     117                        }
     118
     119                        // caches candidats
     120                        $nb_site++;
    100121
    101122                        if ($session) {
    102123                                if (substr ($cle, -9) != "_$session")
    103124                                        continue;
    104                                 else
     125                                else {
    105126                                        $nb_session++;
     127                                        if ($do_lists)
     128                                                $l_session[]=$cle;
     129                                }
    106130                        }
    107131
     
    118142                                        continue 2;
    119143                                default :
    120                                         die("Méthode pas prévue pour chemin (TODO)");
     144                                        die("Méthode pas prévue pour le filtrage par le chemin");
    121145                                };
    122                                 $nb_matche_chemin++;
    123                                 if ($avec_listes)
    124                                         $matche_chemin[]=$cle;
     146                                $nb_chemin++;
     147                                if ($do_lists)
     148                                        $l_chemin[]=$cle;
    125149                        }
    126150
     
    134158                                if (!is_array($data)) {
    135159                                        spip_log ("clé=$cle : data n'est pas un tableau : ".print_r($data,1), 'cachelab');
    136                                         $nb_data_not_array++;
    137                                         if ($avec_listes)
    138                                                 $data_not_array[] = $cle;
     160                                        $nb_not_array++;
     161                                        if ($do_lists)
     162                                                $l_not_array[] = $cle;
    139163                                        continue;
    140164                                };
     
    145169                        // restent les cibles
    146170                        $nb_cible++;
    147                         if ($avec_listes)
    148                                 $cible[] = $cle;
     171                        if ($do_lists)
     172                                $l_cible[] = $cle;
    149173                        cachelab_applique ($action, $cle, null, $options);
    150174                }
     
    152176
    153177        $stats = array(
    154                 'caches'=>$nb_caches,
    155                 'session'=>$nb_session,
    156                 'matche_chemin'=>$nb_matche_chemin,
    157                 'no_data' => $nb_no_data,       // yen a plein (ça correspond à quoi ?)
    158                 'data_not_array' => $nb_data_not_array, // normalement yen a pas
    159                 'cible'=>$nb_cible
     178                'nb_alien'=>$nb_alien,
     179                'nb_site'=>$nb_site,
     180                'nb_clean'=>$nb_clean,
     181                'nb_session'=>$nb_session,
     182                'nb_chemin'=>$nb_chemin,
     183                'nb_no_data' => $nb_no_data,    // yen a (kesako ?)
     184                'nb_not_array' => $nb_not_array, // 0 normalement
     185                'nb_cible'=>$nb_cible
    160186        );
    161187
    162         if ($avec_listes) {
    163                 $stats['liste_matche_chemin'] = $matche_chemin;
    164                 $stats['liste_data_not_array'] = $data_not_array;
    165                 $stats['liste_cible'] = $cible;
    166         }
    167 
    168         if ($avec_chrono) {
     188        if ($do_lists) {
     189                $stats['liste_matche_chemin'] = $l_chemin;
     190                $stats['liste_data_not_array'] = $l_not_array;
     191                $stats['liste_cible'] = $l_cible;
     192        }
     193
     194        if ($do_chrono) {
    169195                $stats['chrono'] = microtime_do ('end', 'ms');
    170196                spip_log ("cachelab_filtre ($action, $cle_objet, $id_objet, $chemin, $options) : {$stats['chrono']} ms", 'cachelab');
  • _plugins_/cachelab/trunk/paquet.xml

    r111822 r111828  
    22        prefix="cachelab"
    33        categorie="outil"
    4         version="0.0.3"
     4        version="0.0.4"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.