12 marzo 2015

Tarea WMI Event Watcher

En un post anterior, uno de los escenarios más comunes fue la lectura de la información del sistema de WMI. SSIS proporciona otra tarea WMI llamada WMI Event Watcher Task, que es más útil que la tarea Data Reader. La tarea WMI Event Watcher proporciona una manera de observar a un evento WMI. Esta característica impresionante hará que el paquete SSIS sea muy potente. Como WMI proporciona una amplia información para la gestión de objetos, la interacción de esta información con eventos será muy útil. Escenarios como el de observar una carpeta para los nuevos archivos u observar la CPU para un 50% de uso, son algunos de los escenarios más comunes que pueden ser logrados con esta tarea.
En este ejercicio vamos observar una carpeta para los nuevos archivos, y si un archivo nuevo entra en la carpeta, se lanzará un cuadro de mensaje después del WMI Event Watcher Task.

Alistarse

Crear un directorio vacío para observar en esta dirección: C:\SSIS\Control Flow\TareaWMIEventWatcher\Archivos.

Ejercicio

1.    Crear un nuevo proyecto SSIS y nómbrelo TareaWMIEventWatcher.
2.    Arrastre y suelte una tarea WMI Event Watcher de la Toolbox SSIS, de la sección Other Tasks, en el Control Flow.
3.    Haga doble clic en WMI Event Watcher Task e ir a la pestaña WMI Options.
4.    Haga clic en WMIConnection y en New WMI Connection…. En el WMI Connection Manager Editor, seleccione la opción Use Windows Authentication y, luego, en Test para probar la conexión y confirmarla.
5.    Haga clic en OK y retorne a la pestaña WMI Options. Escriba esta sentencia en WmiQuerySource:
SELECT * FROM __instancecreationevent WITHIN 60 WHERE TargetInstance ISA 'Cim_DirectoryContainsFile' AND TargetInstance.GroupComponent = 'Win32_Directory.Name = "C:\\\\SSIS\\\\Control Flow\\\\TareaWMIEventWatcher\\\\Archivos"'
6.    Haga clic en OK y cierre el WMI Event Watcher Task Editor.
7.    Agregue una tarea Script después de la tarea WMI Event Watcher Task y conecte la flecha verde desde la tarea WMI Event Watcher a la tarea Script. En la tarea Script vaya a Edit script y añada una línea para mostrar un cuadro de mensaje para el Archivo Encontrado de la siguiente manera:
public void Main()
{
MessageBox.Show("Nuevo Archivo Detectado!");
Dts.TaskResult = (int)ScriptResults.Success;
}
8.    Guarde el script, haga clic en OK y cierre el Editor de la tarea Script.
9.    Ejecute el paquete. En la ficha Progress verá que la ejecución del paquete esperará en el WMI Event Watcher Task; luego copie cualquier archivo a la carpeta observada (C:\SSIS\Control Flow\TareaWMIEventWatcher\Archivos) y luego de menos de 60 segundos, veremos que el WMI Event Watcher Tasks completa su progreso y el cuadro de mensaje aparece. Luego la tarea Script se seguirá ejecutando hasta que le dé clic al botón Aceptar.
Funcionamiento
WMI proporciona una manera de trabajar con objetos de gestión. El post anterior fue acerca de cómo leer la información del sistema a través de la tarea WMI Data Reader. Sin embargo, el uso de WMI no se limita a la lectura de datos. Podemos utilizar los eventos del sistema por medio de la tarea WMI Event Watcher.
La tarea WMI Event Watcher proporciona una manera de utilizar una consulta WQL para observar un evento WMI, y notificar a otras tareas si el evento ocurre o no. Hay muchos escenarios para utilizar tareas WMI Event Watcher; uno de los escenarios más comunes es la de observar una carpeta para los nuevos archivos entrantes y luego hacer las operaciones apropiadas, tales como las tareas Data Flow.
En este ejercicio observamos una carpeta en la dirección C:\SSIS\Control Flow\TareaWMIEventWatcher\Archivos, y si un nuevo archivo ingresa se muestra un cuadro de mensaje.
La tarea WMI Event Watcher utiliza un WMI Connection Manager como la tarea WMI Data Reader.
WqlSourceQuery consiste en una consulta WQL para observar el evento. Como describimos en el post anterior, puede utilizar WMI Code Creator para encontrar los eventos que desee. En este ejercicio queremos observar una carpeta, por lo que utilizamos una consulta WQL que obtiene datos de la Clase WMI __instancecreationevent y encuentra la información apropiada. Observamos la carpeta en intervalos de 60 segundos. Así que cuando un nuevo archivo aparece, el WMI Event Watcher Task lo capturará en menos de un minuto.
 
La propiedad ActionAtEvent define cómo SSIS se comporta cuando un evento WMI ocurre; el comportamiento predeterminado es que SSIS registrará el evento (una entrada de registro puede ser vista en la ficha Progress del SSDT) ​​y un evento SSIS se disparará. Con este evento SSIS, el Control Flow atrapa los eventos y realiza las operaciones apropiadas. Puede establecer esta propiedad sólo registrando los eventos también.
Podemos elegir qué acción debe ser realizada después del evento WMI. La propiedad AfterEvent está establecida para retornar True por defecto. Esto significa que cada vez que el evento es activado, la tarea WMI Event Watcher tendrá éxito y el Control Flow pasa a la tarea después de esta tarea. Podemos optar por retornar False, u observar el evento de nuevo.
El paquete SSIS esperará a que el evento WMI se active, y esto puede causar un alto en la ejecución del paquete si el evento nunca se dispara. Por lo tanto, una propiedad Timeout puede ser definida aquí. El valor predeterminado de Timeout es cero y significa que no hay tiempo de espera establecido para esta tarea. Puede especificar cualquier número (en segundos) como un tiempo de espera.
Así como la propiedad Timeout se establece para esta tarea, una acción en el tiempo de espera puede ser elegida en la propiedad ActionAtTimeout; AfterTimeout también puede ser definida similarmente a AfterEvent.
Hay momentos en los que tenemos que coger un evento si se produce un número determinado de eventos. Por ejemplo, queremos observar los nuevos archivos de una carpeta, pero empezaremos el proceso después de que tres nuevos archivos sean creados; así que configuramos el NumberOfEvents a 3.

1 comentarios:

Narcizo dijo...

Esta tarea WMI Event Watcher, le da mucha potencia a SSIS. Espero les sirva.