Changeset 86959 in spip-zone


Ignore:
Timestamp:
Jan 3, 2015, 11:48:37 PM (5 years ago)
Author:
code@…
Message:

job_queue : ajout d'un mode synchrone pour faciliter le debugage

Location:
_plugins_/job_queue
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/job_queue/inc/queue.php

    r84852 r86959  
    3636 */
    3737function queue_add_job($function, $description, $arguments = array(), $file = '', $no_duplicate = false, $time=0, $priority=0){
     38        if(defined(_JOB_QUEUE_SYNCHRONOUS)) {
     39                execute_job('Now', $file, $function, $arguments, $description);
     40                return 0;
     41        } else {
    3842        include_spip('base/abstract_sql');
    3943
     
    8993
    9094        return $id_job;
    91 
     95        }
    9296}
    9397
     
    101105        include_spip('base/abstract_sql');
    102106        sql_delete('spip_jobs');
    103   sql_delete("spip_jobs_liens","id_job NOT IN (".sql_get_select("id_job","spip_jobs").")");
    104   include_spip('inc/genie');
    105   genie_queue_watch_dist();
     107        sql_delete("spip_jobs_liens","id_job NOT IN (".sql_get_select("id_job","spip_jobs").")");
     108        include_spip('inc/genie');
     109        genie_queue_watch_dist();
    106110}
    107111
     
    169173/**
    170174 * Start a job described by array $row
    171  * @param array $row
     175 * @param $row array
    172176 *      describe the job, with field of table spip_jobs
    173177 * @return mixed
     
    176180function queue_start_job($row){
    177181
    178 // deserialiser les arguments
     182        // deserialiser les arguments
    179183        $args = unserialize($row['args']);
    180184        if ($args===false){
     
    184188
    185189        $fonction = $row['fonction'];
    186         if (strlen($inclure = trim($row['inclure']))){
     190        $id_job = $row['id_job'];
     191        $inclure = $row['inclure'];
     192        $descriptif = $row['descriptif'];
     193        return execute_job($id_job, $inclure, $fonction, $args, $descriptif);
     194}
     195
     196/**
     197 * Execute a job from all the information
     198 * @param $id_job string
     199 *  the job id
     200 * @param $inclure string
     201 *  a file to be included to be able to invoke the job
     202 * @param $fonction string
     203 *  the name of the function containing the job code
     204 * @param $args array
     205 *  the paramaters array to be passed to the function
     206 * @param $descriptif string
     207 *  a description of the job
     208 * @return void
     209 */
     210function execute_job($id_job, $inclure, $fonction, $args, $descriptif){
     211        if (strlen($inclure = trim($inclure))){
    187212                if (substr($inclure,-1)=='/'){ // c'est un chemin pour charger_fonction
    188213                        $f = charger_fonction($fonction,rtrim($inclure,'/'),false);
     
    194219        }
    195220
     221        $formatted_args = implode(',', $args);
     222
    196223        if (!function_exists($fonction)){
    197                 spip_log("fonction $fonction ($inclure) inexistante ".var_export($row,true),'queue');
     224                spip_log("fonction $fonction ($inclure) inexistante $formatted_args", 'queue');
    198225                return false;
    199226        }
    200227
    201         spip_log("queue [".$row['id_job']."]: $fonction() start", 'queue');
     228        spip_log("queue [$id_job]: $fonction() [$descriptif] [$formatted_args] start", 'queue');
    202229        switch (count($args)) {
    203230                case 0: $res = $fonction(); break;
     
    216243                        $res = call_user_func_array($fonction, $args);
    217244        }
    218         spip_log("queue [".$row['id_job']."]: $fonction() end", 'queue');
     245        spip_log("queue [$id_job]: $fonction() [$descriptif] end", 'queue');
    219246        return $res;
    220 
    221247}
    222248
  • _plugins_/job_queue/queue_options.php

    r52841 r86959  
    1111#define('_JQ_MAX_JOBS_EXECUTE',200); // pour personaliser le nombre de jobs traitables a chaque hit
    1212#define('_JQ_MAX_JOBS_TIME_TO_EXECUTE',15); // pour personaliser le temps d'excution dispo a chaque hit
     13#define('_JOB_QUEUE_SYNCHRONOUS', true); // pour rendre l'execution des jobs synchrones (les jobs sont executés immediatement au lieu de passer par la queue)
    1314
    1415@define('_CRON_DELAI_GOURMAND',0);
Note: See TracChangeset for help on using the changeset viewer.