Changeset 108890 in spip-zone


Ignore:
Timestamp:
Feb 10, 2018, 12:26:49 PM (17 months ago)
Author:
jluc@…
Message:

cachelab avec microtiming du filtrage selon id_article=18 ou match chemin du cache et actions sur résultats :'list', 'del', 'mark' parametrables par args d'url ou define

Location:
_plugins_/xray/trunk
Files:
5 edited

Legend:

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

    r108859 r108890  
    11<?php
    2 define ('XRAY_LAB__AFFICHE_NB_ABSENTDUCONTEXTE', 0);
    3 define ('XRAY_LAB__AFFICHE_NB', true);
     2define ('CACHELAB_DEFAULT_ACTION', 'list');
     3
     4echo <<<EOT
     5<pre>Arguments d'url possibles pour changer les valeurs par défaut :
     6- methode : <b>strpos</b> ou regexp
     7- action : <b>list</b>, del, show, mark (avec 'cachelab_mark'= 1 ou 'invalide (explication)')
     8- objet : <b>article</b>, breve, etc
     9- cle_objet : si différent de 'id_'+objet
     10- id_article, id_breve, etc selon objet
     11- chemin : liste séparée par | ou fullregexp si methode=regexp
     12</pre>
     13EOT;
     14
     15if ($_GET['methode'])
     16        define ('CACHELAB_METHODE_CHEMIN', $_GET['methode']);
     17else
     18        define ('CACHELAB_METHODE_CHEMIN', 'strpos');
     19
     20if (isset ($_GET['objet']))
     21        $objet = $_GET['objet'];
     22else
     23        $objet = XRAY_OBJET_SPECIAL;
     24
     25if (isset ($_GET['cle_objet']))
     26        $cle_objet = $_GET['cle_objet'];
     27elseif ($objet)
     28        $cle_objet = 'id_'.$objet;      // TODO spiper
     29else
     30        $cle_objet = '';
     31
     32if ($cle_objet and isset ($_GET[$cle_objet]))
     33        $id_objet = $_GET[$cle_objet];
     34else
     35        $id_objet = XRAY_ID_OBJET_SPECIAL;
     36$id_objet=intval($id_objet);
     37$url_objet = "?page=$objet&$cle_objet=$id_objet";
     38
     39if (isset ($_GET['action']))
     40        $action = $_GET['action'];
     41else
     42        $action = CACHELAB_DEFAULT_ACTION;
     43
     44if ($cle_objet and !$id_objet)
     45        die ("$cle_objet est inconnu : passez le en argument d'url ou définissez XRAY_ID_OBJET_SPECIAL en php");
     46
     47if (isset ($_GET['chemin']))
     48        $chemin = $_GET['chemin'];
     49else
     50        $chemin = 'admin|prive|liste';
     51
     52
     53echo "<b>Action : $action<br>
     54                Méthode pour la recherche des chemins : ".CACHELAB_METHODE_CHEMIN."<br>
     55                Recherchés : <br>
     56                - objet=$objet cle_objet=$cle_objet id_objet=$id_objet <br>
     57                - chemins : $chemin<br><br>";
     58
     59
     60function cachelab_applique ($action, $cle, $val=null, $opt='') {
     61global $Memoization;
     62static $len_prefix;
     63        if (!$len_prefix)
     64                $len_prefix = strlen(_CACHE_NAMESPACE);
     65
     66        $cle = substr($cle, $len_prefix);
     67
     68        switch ($action) {
     69        case 'del' :
     70                $del = $Memoization->del ($cle);
     71                if (!$del) echo "echec del $cle<br>";
     72                break;
     73        case 'mark' :
     74                if ($val === null)
     75                        $data = $Memoization->get ($cle);
     76                else
     77                        $data = $val;
     78                if (is_array($data)) {
     79                        $data['cachelab_mark'] = ($opt ? $opt : 1);
     80                        $data = $Memoization->set ($cle, $data);
     81                }
     82                else
     83                        echo "Pour $action sur $cle (avec val=".print_r($val,1).") et opt='$opt', data n'est pas un tableau : (".print_r($data, 1).')<br>';
     84                break;
     85        case 'list' :
     86                break;
     87        case 'show' :
     88        default :
     89                $data = $Memoization->get ($cle);
     90                if (isset($data['texte']))
     91                        $data['texte'] = strip_tags(substr($data['texte'], 0, 1000).'...');
     92                echo "<b>Trouvé $cle :</b><pre class='cachelab_applique_show'>".print_r($data,1)."</pre>";
     93                break;
     94        }
     95}
    496
    597// $chemin : une regexp (hors délimiteurs et modificateurs)
    6 function filtre_cache($cle_objet, $id_objet, $chemin='') {
    7 
    8         if (XRAY_LAB__AFFICHE_NB) {
    9                 if ($cle_objet)
    10                         echo "Recherche dans contexte : $cle_objet==$id_objet<br>";
    11                 else
    12                         echo "Pas de recherche dans le contexte<br>";
    13                 if ($chemin)
    14                         echo "Regexp recherchée dans les chemins : $chemin<br>";
    15                 else
    16                         echo "Pas de recherche dans les chemins<br>";
    17         }
     98function cachelab_filtre ($action, $cle_objet, $id_objet, $chemin='', $opt='invalide') {
    1899        include_spip ('lib/microtime.inc');
    19100        microtime_do ('begin');
     
    24105        $nb_absentducontexte=0;
    25106        $nb_accesdata=0;
     107        $nb_datanotarray=0;
    26108       
     109        $chemins = explode('|', $chemin);
    27110        $cache = apcu_cache_info();
    28         foreach($cache['cache_list'] as $i => $entry) {
    29                 $k = 'a_'.sprintf('%015d', $entry['creation_time']).$entry['info'];
    30                 $entry ['date_crea'] = date(DATE_FORMAT, $entry['creation_time']);
    31                 $entry ['info_exists'] = apcu_exists ($entry['info']);
    32                 $d = $entry;
     111        foreach($cache['cache_list'] as $i => $d) {
    33112                if ($d and apcu_exists($d['info'])
    34                         and ($meta_derniere_modif <= $d['creation_time'])
    35                         ) {
     113                        //and ($meta_derniere_modif <= $d['creation_time'])
     114                        )
     115                {
    36116                        $nb_valides++;
    37                         if (preg_match(",$chemin,i", $d['info'])) {
    38                                 $listechemin[]=$d;
    39                                 $d['lab_invalide']=true;
    40                         }
    41                         elseif ($cle_objet) {
    42                                 if ($data = get_apc_data($entry['info'], $success)) {
     117                        $danslechemin = false;
     118                        switch (CACHELAB_METHODE_CHEMIN) {
     119                        case 'strpos' :
     120                                foreach ($chemins as $unchemin) {
     121                                        if (strpos ($d['info'], $unchemin) !== false) {
     122                                                $listechemin[]=$d;
     123                                                $danslechemin = true;
     124                                                cachelab_applique ($action, $d['info'], null, $opt.' (chemin)');
     125                                                break;
     126                                        };
     127                                }
     128                                break;
     129                        case 'regexp' :
     130                                if ($danslechemin = preg_match(",$chemin,i", $d['info'])) {
     131                                        $listechemin[]=$d;
     132                                        cachelab_applique ($action, $d['info'], null, $opt.' (chemin)');
     133                                }
     134                                break;
     135                        };
     136
     137                        if (!$danslechemin and $cle_objet) {
     138                                if ($data = get_apc_data($d['info'], $success)) {
    43139                                        $nb_accesdata++;
     140
    44141                                        if (is_array($data)) {
    45142                                                if (isset($data['contexte'])
     
    47144                                                        and ($data['contexte'][$cle_objet]==$id_objet)) {
    48145                                                                $listeobjet[] = $d;
    49                                                                 $d['lab_invalide']=true;
     146                                                                cachelab_applique ($action, $d['info'], $data, $opt.' (objet)');
    50147                                                        }
    51                                                 else {
     148                                                else
    52149                                                        $nb_absentducontexte++;
    53                                                         if ($nb_absentducontexte < XRAY_LAB__AFFICHE_NB_ABSENTDUCONTEXTE) {
    54                                                                 if (isset($data['texte']))
    55                                                                         $data['texte'] = '(vidé)';
    56                                                                 echo "<b>Echec accés contexte</b><pre>".print_r($data, 1)."<pre><br>";
    57                                                         }
    58                                                 };
    59150                                        }
     151                                        else
     152                                                $nb_datanotarray++;
    60153                                }
    61154                                else
     
    64157                }
    65158        }
    66         if (defined('XRAY_LAB__AFFICHE_NB') and XRAY_LAB__AFFICHE_NB) {
    67                 echo "<h3>Stats</h3>
    68                 <pre>
    69                         nb valides : $nb_valides
    70                         nb echec accés data : $nb_echecaccesdata
    71                         nb acces data : $nb_accesdata
    72                         nb absent du contexte : $nb_absentducontexte
    73                         time : ".microtime_do ('end')
    74                 ."</pre>";
    75         }
    76         return array($listeobjet, $listechemin);
     159        $stats = array('nb filtres examinés'=>$nb_valides,
     160                                'nb echec acces data' => $nb_echecaccesdata,
     161                                'nb acces data' => $nb_accesdata,
     162                                'nb data not array' => $nb_datanotarray,
     163                                'nb objet absent du contexte' => $nb_absentducontexte,
     164                                'microtime' => microtime_do ('end', 'ms')
     165                        );
     166        return array($listeobjet, $listechemin, $stats);
    77167}
    78168
    79 $cle_objet='id_'.XRAY_OBJET_SPECIAL;
     169list ($listeobjet, $listechemin, $stats) = cachelab_filtre($action, $cle_objet, $id_objet, $chemin);
     170// list ($listeobjet, $listechemin) = filtre_cache('', 1, $chemin);
    80171
    81 if (isset ($_GET[$cle_objet]))
    82         $id_objet = $_GET[$cle_objet];
    83 else
    84         $id_objet = XRAY_ID_OBJET_SPECIAL;
    85 if (isset ($_GET['chemin']))
    86         $chemin = $_GET['chemin'];
    87 else
    88         $chemin = 'admin';
    89        
    90 // list ($listeobjet, $listechemin) = filtre_cache('id_annonce', $id_annonce, $chemin);
    91 list ($listeobjet, $listechemin) = filtre_cache('', $id_annonce, $chemin);
     172echo "<h3>Bilan du filtrage</h3><br>
     173                Caches trouvés avec le chemin $chemin : ".count($listechemin)."<br>
     174                Caches trouvés avec <a href='$url_objet'>$objet $id_objet</a> : ".count($listeobjet)."</b><br>
     175                <br><b>Stats :</b><pre>    ".trim(str_replace('Array', '', print_r($stats, 1)), "() \n")."</pre>";
    92176
    93 echo "<b>trouvé le chemin ".count($listechemin)."<br>trouvé l'objet :".count($listeobjet)."</b><br>";
    94 
    95 echo "<h3>CHEMIN :".count($listechemin)."</h3><pre>".
    96         print_r($listechemin,1)
    97         ."</pre><br>
    98         <h3>Objets annonce $id_annonce :".count($listeobjet)."</h3>
    99         <pre>".
    100         print_r($listeobjet,1)
    101         ."</pre>";
    102 
    103 ?>
    104 
     177echo "<h3>Caches trouvés avec le chemin $chemin : ".count($listechemin)."</h3>
     178        <ul>";
     179foreach ($listechemin as $d)
     180        echo "  <li>{$d['info']}</li>";
     181if ($cle_objet) {
     182        echo "</ul>
     183                <h3>Caches trouvés avec <a href='$url_objet'>$objet $id_objet</a> : ".count($listeobjet)."</h3>
     184                <ul>";
     185        foreach ($listeobjet as $d)
     186                echo "  <li>{$d['info']}</li>";
     187        echo "</ul>";
     188};
  • _plugins_/xray/trunk/paquet.xml

    r108858 r108890  
    22        prefix="xray"
    33        categorie="outil"
    4         version="0.14.0"
     4        version="0.14.1"
    55        etat="test"
    66        compatibilite="[2.1.0;3.2.*]"
  • _plugins_/xray/trunk/plugin.xml

    r108858 r108890  
    99        <licence>GPL</licence>
    1010        <licence>PHP</licence>
    11         <version>0.14.0</version>
     11        <version>0.14.1</version>
    1212        <etat>test</etat>
    1313        <description>
  • _plugins_/xray/trunk/xray_apc.php

    r108858 r108890  
    16031603                                                                        echo "<xmp>" . spipsafe_unserialize($d[0]) . "</xmp>";
    16041604                                                                else
    1605                                                                         echo "fetch ok<br><xmp>" . print_r($d, 1) . "</xmp>";
     1605                                                                        echo "fetch ok, val non sérialisée :<br><xmp>" . print_r($d, 1) . "</xmp>";
    16061606                                                        } else
    16071607                                                                echo "fetch failed";
  • _plugins_/xray/trunk/xray_options.php

    r108858 r108890  
    1313}
    1414
    15 if (!defined('XRAY_ID_OBJET_SPECIAL')) {
     15if (!defined('XRAY_ID_OBJET_SPECIAL'))
    1616        define ('XRAY_ID_OBJET_SPECIAL', 14533);
    17 }
    1817
    1918define (JOLI_DATE_FORMAT, 'd/m/Y H:i:s');
Note: See TracChangeset for help on using the changeset viewer.