jueves, 5 de noviembre de 2009

Comprobando si nuestro programa ya se esta ejecutando

Otra añadido de nuestro programa es la comprobación si ya existe un proceso que se este ejecutando, es decir, que ejecutemos nuestro programa o bien manualmente o bien como tarea programada, y antes de que este termine su ejecución, intentemos ejecutarlo de nuevo.

Para ello lo que hacemos desde nuestro script awk es comprobar si existe un fichero temporal, en caso de que no exista lo creamos y hasta no terminar nuestra ejecución no lo eliminaremos, al estar creado este fichero, en caso de ejecutar de nuevo nuestro programa, este detectará que ya existe ese fichero y que por tanto el programa esta en ejecución para al instante cerrarse, y no entorpecer ni machacar la ejecución anterior.

Para ellos nos ayudamos de las instrucciones BEGIN y END de awk.

Politicas personalizadas

Hasta ahora estabamos trabajando y haciendo busquedas simples, o bien por extension o bien por tamaño, pero eran unas politicas muy rigidas, por eso desde el último post, aproximadamente unas 3 semanas nos hemos dedicado a crear un script awk que permita leer un fichero de configuración en el cual las politicas del usuarios sean lo mas flexibles y configurables posibles.

Trabajamos con 5 posibles filtros de politica, que son:
- Tamaño de fichero.
- Ruta de fichero.
- Fecha último acceso.
- Extensión.
- Caching por partes.

A partir de estas 5 hemos creado sus 5 políticas simples, es decir que filtre por tamaño de fichero, por ruta de fichero, etc, y luego combinatoria de dos y 3 de ellas en cualquier tipo de orden, unos ejemplos:

- Tamaño fichero, extensión, ruta de fichero.
- Ruta de fichero y extensión.
- Extensión, ruta de fichero y tamaño de fichero
...

Dentro de esto cabe destacar que tenemos una expresión regular para cada tipo diferente de política, y que son aproximadamente unas 80 o 90, dentro del script awk también tenemos ciertas funciones que nos parsean los datos de la forma que nos conviene y que llaman al nuestro "charging" script con los parámetros necesarios, y que sera el que se encargará de hacer las búsquedas correctas y su posterior caching, estas funciónes estan agrupadas, es decir, que existirá una sola función para la política "extensión y ruta" y "ruta y extensión"

Por otro lado también hemos tenido que adaptar nuestro "charging script" a estas modificaciones, ya que nuestra forma de trabajar ha cambiado de forma considerable, principalmente respecto a la función de búsqueda de ficheros acorde con la política. Hemos conseguido hacer tan solo un par de llamadas al comando find en vez de hacer una llamada por cada tipo de politica, cosa que nos produciría también alrededor de 80 o 90 llamadas al comando find, y esto lo hemos resuelto comprobando a través de un identificador de política el tipo de política y haciendo que los parametros que forman parte del comando fueran variables, a parte de las variables valores que necesitamos buscar.

Un ejemplo seria que al hacer una búsqueda por tamaño nuestro comando seria algo como find -size -"tamaño_introducido".

Pero lo que hacemos es que -size sea una variable $size, y que dependiendo el identificador de política su valor sea "-size" o nulo "".