Controla tu empresa a tu modo !

Power-up dinámico para simular tarea CRON

Al desarrollar webs en entornos Windows a menudo nos encontramos con el problema de probar las llamadas tareas CRON. Aunque disponemos de las “tareas de Windows” estas no tienen la flexibilidad del “demonio” CRON de Linux.

Para la depuración de tareas CRON necesitamos hacer llamadas a una URL de forma periódica y constante, por ejemplo cada 5 minutos.

PSFGeneric no está pensado para estas cosas, ni es la plataforma ideal para tener una tarea de este tipo en producción, pero para desarrollar nos pueden venir muy bien sus power-ups dinámicos y la potencia de su motor Javascript. Veamos como…

simulador de cron

Para empezar entramos en el “Editor de power-ups dinámicos” y creamos un nuevo proyecto, al que añadiremos un formulario y una librería Javascript.

En la librería vamos a añadir lo siguiente:

// Este código se usará de forma global

var idInterval = 0;

var cntInterval = 0;

 

function getURL(url) {

                var conn = GetXmlHttpObject();

                debug(“Estado: ” + conn.readyState);

                var data = “”;

                conn.open(“post”, url, data, true);

 

                conn.onload = function() {

                               debug(“Respuesta: ” + conn.status + ” – ” + conn.statusText);

                }

                conn.onreadystatechange = function() {

                               debug(“Estado: ” + conn.readyState);

                }

                conn.onabort = function() {

                               debug(“Petición cancelada”);

                }

                conn.onloadstart = function() {

                               debug(“Descarga iniciada”);

                }

                conn.onprogress = function(percentage, TotalBytesToReceive, BytesReceived) {

                               debug(“Descargado: ” + percentage + “, ” + TotalBytesToReceive + ” bytes de ” + BytesReceived + ” bytes”);

                }

}

 El código anterior declara dos variables globales y una función para hacer la llamada a nuestra URL. La variable idInterval guardará la ID del temporizador Javascript necesario y cntInterval es simplemente un contador para mostrar algo al usuario y sepa que está trabajando.

 En la función se crea un objeto XmlHttpObject y se hace la petición, aunque la respuesta no nos importa mucho se hace seguimiento de los eventos de respuesta y estado y se muestra por consola información sobre esto.

Ahora a por el formulario.

formulario

En mi propuesta permitimos configurar el intervalo de tiempo entre llamadas y la URL a la que llamar. Además añadí un botón de inicio y otro de parada. Los nombré como sigue:

  • nudPeriodo: Contendrá el periodo en milisegundos de intervalo. (Hay una errata en la imagen del formulario, i’m sorry ;)
  • txtURL: Para que el usuario ponga la URL a llamar.
  • txtPasadas: Donde mostraremos el número de peticiones realizadas hasta el momento.

 Ya tenemos la interfaz, ahora a iniciar y parar el temporizador.

“Al pulsar”, así se llama el evento en PSFGeneric, en el botón de inicio se ejecutará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

}

cntInterval = 0;

var per = MyForm.Field(“nudPeriodo”).Field(“value”).Value;

if (MyForm.Field(“txtURL”).Field(“value”).Value == “”) {

                alert(“Debe indicar una URL.”);

} else {

                idInterval = setInterval(function() {

                                               MyForm.Field(“txtPasadas”).Field(“value”).Value = cntInterval++;

                                               var url = MyForm.Field(“txtURL”).Field(“value”).Value;

                                               getURL(url);

                }, per)

};

 Comprueba que no haya un temporizador funcionando, y si lo hay lo para. Luego recupera el intervalo de tiempo definido por el usuario. Si el usuario no introdujo una URL lo avisa y en caso contrario crea el temporizador.

 En cada ciclo pone el valor de cntInterval en la caja de texto a tal efecto e incrementa en uno su valor. A continuación recupera la URL y ejecuta la función para hacer la llamada, la que definimos al principio en la librería.

 En algún momento el usuario querrá dejar de trabajar y tomarse un descansito, y puede que hasta quiera parar el temporizador, por muy remota que pueda parecer esa idea :P . Para ello le dimos el botón Parar, que al pulsarse hará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

                idInterval = 0;

}

 Si hay un temporizador en marcha lo destruye, y por ende se para, y reiniciar el ID de temporizador.

 Y de este modo, pongamos con media hora, como mucho, de hacer clics y pruebas, tendremos la pequeña herramienta que necesitábamos.

 Y para aquellos que no quieran complicarse tenéis esta herramienta en la lista de power-ups dinámicos de vuestro PSFGeneric y el proyecto con el código fuente para descargar aquí mismo.

 Un saludo a todos y feliz codificación…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


3 + = seis