Skip to content

registrar-log-solo-si-se-ejecuta-el-job#2006

Open
elguitarraverde wants to merge 1 commit into
NeoRazorX:masterfrom
elguitarraverde:registrar-log-solo-si-se-ejecuta-el-job
Open

registrar-log-solo-si-se-ejecuta-el-job#2006
elguitarraverde wants to merge 1 commit into
NeoRazorX:masterfrom
elguitarraverde:registrar-log-solo-si-se-ejecuta-el-job

Conversation

@elguitarraverde

Copy link
Copy Markdown
Contributor

Descripción

El cambio corrige que el cron registrase running-plugin-cron al detectar una clase Cron de plugin, aunque ninguno de sus trabajos estuviera listo para ejecutarse.

Antes el flujo era:

  1. Core\Controller\Cron::runPlugins() recorría plugins activos.

  2. Si existía FacturaScripts\Plugins\X\Cron, escribía siempre:

    • salida por pantalla running-plugin-cron
    • log Tools::log('cron')->notice(...)
  3. Después instanciaba el cron del plugin y llamaba a run().

  4. Dentro del plugin, cada trabajo llamaba a $this->job(...)->every(...)->run(...).

  5. CronJob::run() comprobaba isReady() y podía devolver false sin ejecutar nada.

El bug estaba en que el log ocurría en el paso 2, antes de saber si algún CronJob iba a pasar isReady().

Ahora el flujo queda así:

  1. Core\Controller\Cron::runPlugins() solo detecta e instancia la clase Cron del plugin.

  2. Ya no registra ni imprime running-plugin-cron de forma anticipada.

  3. El plugin ejecuta su método run() como antes.

  4. Cada trabajo se obtiene con CronClass::job().

  5. CronClass::job() asigna al CronJob un callback interno mediante setReadyCallback().

  6. El plugin sigue llamando igual:

    $this->job('name')->every(...)->run(function () {
    ...
    });

  7. CronJob::run() comprueba primero isReady().

  8. Si isReady() es false, devuelve false y no ejecuta ni el callback ni el trabajo.

  9. Si isReady() es true, guarda el estado inicial del job y entonces ejecuta el callback.

  10. Ese callback imprime y registra running-plugin-cron.

  11. Después se ejecuta el closure real del trabajo.

  12. Al terminar, CronJob::run() mantiene el comportamiento anterior: duración, done, failed, running, daily_exec, control de excepciones y logs críticos.

La retrocompatibilidad se mantiene porque no cambia la API usada por los plugins. CronJob::run(Closure $function): bool conserva firma y comportamiento externo; solo se añade un hook opcional que el core usa
internamente para retrasar el log hasta el punto correcto.

Además, CronClass evita duplicar el mensaje con una bandera interna: si un plugin tiene varios jobs listos en la misma ejecución, running-plugin-cron se registra una sola vez por plugin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant