Creando nuestra primera Acción y Tarea en Bender

Dentro del código de Bender tenemos dos acciones de ejemplo. Los archivos se llaman Simple.php y Plugin.php y los podemos encontrar en /Action/Sample/.

Estos dos ejemplos son en extremo sencillos. El primero es el ejemplo más básico para una acción y el segundo muestra cómo hacer uso de un plugin.

Ahora bien, volviendo sobre los conceptos de Bender, había dicho que la estructura de la aplicación se maneja con 3 entidades:

  • Acciones
  • Tareas
  • Plugins

La finalidad de Bender es ejecutar Tareas donde cada tarea es una Acción.

Para crear una Acción, tenemos que hacer uso de los comandos de la consola.

Si aún no tienen presentes los comandos internos, bastará con tipear list y obtendremos la lista completa.

Comandos de la consola de Bender

Los comandos referidos a las acciones son 3: add, all y delete.

Sólo por curiosidad, lo primero que vamos a hacer es revisar si existe alguna acción ya cargada. Tipeamos action:all y deberíamos obtener éste resultado.

Listando acciones en Bender

Ya tenemos certeza que no existe acción alguna. Lo que vamos a hacer ahora, aprovechando los archivos de ejemplo, es crear la acción para que sea visible dentro de Bender.

El comando a usar es action:add, pero tenemos que pasarle dos parámetros, el alias que recibirá la clase dentro del sistema (será el nombre de la acción) y el path de la clase dentro del directorio Action, como si se tratara de una definición de namespace.

Es decir, que vamos a tipear lo siguiente: action:add alias class

Con un ejemplo real (y siempre usando los archivos de ejemplo), quedaría así:

action:add sample:simple Sample/Simple

Una vez agregada, verán el mensaje de confirmación.

Agregando una acción en Bender

Si ahora ejecutamos el comando action:all, veremos que ya se registró nuestra nueva acción.

Listando acciones en Bender

Siendo que tenemos dos ejemplos dentro del código, también podemos aprovechar y agregar una segunda acción, para hacer uso del ejemplo que llama a un plugin.

Para esto, ejecutamos:

Bender > action:add sample:plugin Sample/Plugin

Con esto, ya tenemos creadas nuestras dos primeras acciones. Ahora necesitamos crear tareas que las ejecuten.

Si volvemos a listar los comandos de la consola (usando list), vamos a ver que para el caso de las tareas tenemos 5 posibles comandos: add, all, delete, details y update.

Si ahora ejecutamos task:all, vamos a ver que, efectivamente, no tenemos ninguna tarea registrada.

Listando tareas en Bender

Para registrar nuestra nueva tarea, de forma similar a lo que hicimos para las acciones, vamos a usar el comando task:add pasándole dos valores: el nombre de la acción (el alias creado) y el nombre que le vamos a asignar a la tarea. El comando quedaría entonces de ésta forma: task:add action name.

Bender > task:add sample:simple prueba-simple

Una vez ejecutado, recibiremos, nuevamente, confirmación.

Agregando tareas en Bender

A los fines del ejemplo, vamos a agregar también el segundo ejemplo.

Bender > task:add sample:plugin prueba-plugin

A partir de éste momento, ya tenemos registradas nuestras dos acciones y las dos tareas, pero como dice el mensaje de confirmación, es necesario activar las tareas para que puedan ser ejecutadas.

Para ver los detalles de ejecución de una tarea, usamos el comando task:details, que lleva como parámetro el nombre de la tarea.

Siguiendo con nuestros ejemplos, ejecutamos

Bender > task:details prueba-simple

Y vamos a ver si la tarea está disponible y cuándo habría de ejecutarse.

Detalles de una tarea en Bender

¿Qué significan esos valores?.

El propiedad available determinará si una tarea puede o no ser ejecutada. 0 para No y 1 para Si.

Las propiedades year, month, day, hour, minute y dow, responden a la lógica del Cron. Si el valor de esas propiedades es * (asterisco), significa que la tarea podrá ejecutarse cada vez que el cron invoque a la tarea.

Para ajustar cualquiera de esas propiedades, tenemos el comando task:update, el cual recibe el nombre de la tarea, el nombre de la propiedad y su nuevo valor: task:update name [property] [value]

Para el ejemplo, voy a setear la primer tarea para que se ejecute en cualquier momento de mi hora actual.

Bender > task:update prueba-simple year 2013

Recibimos la confirmación.

Actualización de tareas en Bender

Y si vemos los detalles de esa tarea, ya vemos reflejado el cambio.

Detalles de la tarea actualizados en Bender

Una vez que ya tenga todas las propiedades seteadas correctamente, estoy en condiciones de activar la tarea.

Para esto se necesita otro update de la tarea, para cambiar la propiedad available.

Bender > task:update prueba-simple available 1

Ahora si, ya creamos la acción y programamos la tarea. Lo que sigue es parte de lo que le brinda algo de valor a Bender.

Al comienzo, había comentado que iniciamos la consola invocando al archivo shell.php. Para que las tareas se ejecuten, en el cron de nuestro sistema operativo, vamos a agregar una llamada al archivo cron.php que se encuentra también en el directorio raíz de la aplicación. El archivo necesita de un único parámetro y se encargará, según lo que hayamos definido para cada tarea, de ejecutarlas.

Como estamos con una prueba, podemos saltear el paso del cron y probarlo directamente desde la consola, ejecutando el comando

php cron.php system:cron

Al ejecutarlo, verán un mensaje impreso en pantalla (la versión «Hola Mundo!» de Bender).

Simulando la ejecución del cron en Bender

Si bien el post se hizo algo extenso, esto es todo lo que se necesita para que la aplicación funcione. De acá en más cada uno puede programar sus propias acciones, que en lugar de imprimir un mensaje en pantalla, puede hacer backups, enviar información a una API, revisar archivos, revisar el servidor, etc, etc, etc.