====== XOneMonitor ====== \\ |< 65% - >| ^ XOne MONITOR ^ | [[wiki:3.-servidor:3.10.-xonemonitor:start#Introducción|Introducción]] | | [[wiki:3.-servidor:3.10.-xonemonitor:start#Estructura|Estructura]] | | [[wiki:3.-servidor:3.10.-xonemonitor:start#Acciones|Acciones]] | | [[wiki:3.-servidor:3.10.-xonemonitor:start#Macros|Macros]] | | [[wiki:3.-servidor:3.10.-xonemonitor:start#Nodos|Nodos]] | | [[wiki:3.-servidor:3.10.-xonemonitor:start#Ejemplos de Uso|Ejemplos de Uso]] | ===== Introducción ===== \\ \\ El XOne Monitor es un servicio que pretende cubrir una necesidad muy común en el mundo de la informática, asegurarse de que todo va como debiera ir.\\ \\ Por lo tanto, es un servicio que nos va a permitir comprobar que ciertas funciones de nuestro servidor funcionan correctamente.\\ \\ Adicionalmente, se han añadido algunas funcionalidades usadas para algún caso específico, las cuales quizás no cumplan tan sólo con el objetivo de comprobar que algo está funcionando correctamente, pero pueden resultar útiles.\\ |< 75% - >| ^ **Funcionalidades** ^ | Comprobar si algún servicio está parado, arrancarlo de nuevo y enviar un correo advirtiéndonos del suceso. | | Enviarnos algún correo con algunos parámetros que nos resulten indicativos del estado del proyecto. | | Ejecutar mantenimientos periódicos de las tablas de la aplicación y de la réplica si la hubiera. | | Envío de correo avisándonos de algún comportamiento erróneo. | | Creación de log de cualquiera de los errores anteriores para su posterior supervisión. | | Creación, copia y traslado de ficheros de una ubicación a otra. | | Compresión de ficheros. | | Borrado de actualizaciones ya confirmadas. | ===== Archivo de Configuración ===== \\ Los datos incluidos en el fichero de configuración son los siguientes:\\ \\ |< 75% - >| ^ Atributo ^ Descripción ^ | **Xml Path** | Ruta del fichero XML donde están las comprobaciones del monitor. | | **servername** | Nombre del Servidor | | **appname** | Nombre de la Aplicación | | **interval** | Intervalo de tiempo para revisar por defecto, siempre no haya definido. Expresado en **segundos**. | ^ PARAMETROS DE CORREO ^^ | **smtpserver** | Dirección del servidor de correo | | **displayUserName** | Nombre para mostrar como remitente del correo. | | **mailfrom** | Dirección remitente del correo. | | **smtpuser** | Usuario con el que nos conectamos para enviar los correos. | | **smtppwdr** | Contraseña del usuario de correo. | | **smtpport** | Puerto para el envío del correo. | | **smtpusessl** | Si está a true, especifica que vamos a utilizar SSL para el envío smtp. | ^ PARAMETROS DE LOG ^^ | **log** | Si queremos dejar log en el visor de sucesos (true/false). | | **log file** | Si queremos dejar log en un fichero txt externo (true/false). | | **path log file** | Ruta del fichero de log txt externo si ponemos a true la opción anterior. | ^ PARÁMETROS DE FORMATO DE CORREO ^^ | **Format Html** | El formato del correo es texto simple, si queremos darle formato html debemos habilitar ésta opción (true/false). Por defecto, si no se pone nada, se devuelve en el nuevo formato. | | **Title Size** | Tamaño del texto para el título del correo. Si no se especifica ningún valor, el valor por defecto es **24**. | | **Title Forecolor** | Color del texto para el título del correo. Si no se especifica ningún valor, el valor por defecto es **#042244**.| | **Title Font family** | Tipo de letra del texto para el título del correo. Si no se especifica ningún valor, el valor por defecto es **Calibri**. | | **Text Size** | Tamaño del texto para el cuerpo del correo.Si no se especifica ningún valor, el valor por defecto es **14**. | | **Text Forecolor** | Color del texto para el cuerpo del correo. Si no se especifica ningún valor, el valor por defecto es** #052b57**. | | **Text Font family** | Tipo de letra del texto para el cuerpo del correo. Si no se especifica ningún valor, el valor por defecto es **Calibri**. | | **Firm Name** | Nombre inicial de la firma. TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para el título de la firma. P.ej: "Xonemonitor,14,#df2c28,Calibri". | | **Firm Email** | Email de quien envía el correo, se puede poner el que sea, si no se especifica nada se pondrá el que se configure en el checking o maintenance. TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para el correo de la firma. P.ej: "direccion@servidor.es,14,#df2c28,Calibri". | | **Firm Image Path** | Ruta donde se encuentra la imagen a asociar de la firma. El tipo de imagen que se aceptan son: **.jpg .png .tif.** **ADVERTENCIA**: Se aconseja que el tamaño de la imagen no sea muy grande porque podría demorarse en montar el mensaje.| | **Firm Address** | TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para la dirección que aparece en la firma. | | **Firm Image Size**| Especifica el ancho y alto de la imagen de la firma. La estructura es: Value:"Ancho, Alto".| | **Firm Zipcode** | TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para el código postal que aparece en la firma. | | **Firm City** | TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para la localidad que aparece en la firma. | | **Firm Phone** | TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para el teléfono que aparece en la firma. | | **Firm Web Address** | TEXTO,TAMAÑO,COLOR y TIPO DE LETRA para la dirección web que aparece en la firma. | ^ PARÁMETROS DE BASE DE DATOS ^^ | **ROWID Field Name** | Nombre del campo ROWID en las tablas de la BD. | | **SQL Field Name** | Nombre del campo SQL en la tabla MASTER_REPLICA_QUEUE. | | **Date Format** | Formato de fecha de la BD. | | **MID Number** | MID que queremos usar si vamos a escribir algo en el QUEUE. | ===== Estructura===== \\ Nuestro fichero XML contendrá un nodo y dentro de éste tendremos los distintos nodos **‘checking’** (Las acciones se ejecutan únicamente si se cumple la condición) o **‘maintenance’** que se ejecutan siempre según la cronología definida en el atributo cron-expression.\\ \\ Dentro de un nodo **checking** o **maintenance** podemos usar los siguientes nodos: |< 65% - >| ^ sql | Es el atributo donde se define la consulta SQL que queremos lanzar. | |< 65% - >| ^ service | Utilizado exclusivamente en los checking con type="checkservice" | ^ table | Utilizado exclusivamente en los checking con type="checktable" | ^ errormessage | Mensaje que queremos mostrar en el correo que se envíe | ^ email | Destinatario/s del correo. | ^ actions | Acciones a ejecutar en orden secuencial. | ==== Tipos de Comprobaciones (checking) ==== Todos los tipos de checking son case-sensitive en minúsculas. Cada nodo **checking**, tiene el nombre de la comprobación (**name**), el tipo (**type**) y opcionalmente una conexión alternativa (La conexión es por si queremos usar una diferente a la que viene por defecto //monitordb// (En el archivo de configuración).\\ También opcionalmente se puede especificar una expresión cron para programar la comprobación. \\ Los nodos checking tienen la siguiente estructura: ^ count | Se lanza una consulta a la base de datos la cual se compone únicamente de un count de una tabla que queramos monitorear.\\ Si el valor devuelto por el count es mayor que el especificado en el atributo //count// del nodo sql se realiza la acción especificada.| ^ groupby | Se lanza una consulta para sacar datos de varios registros agrupados (ej. Agrupados por usuario).\\ Si el SQL especificado devuelve alguna fila entonces se ejecuta la acción especificada.| ^ checktable | Comprobar si hay registros en una tabla que no están en el master_replica_queue o master_replica_queue_history.\\ (Por defecto, esta opción inserta esos registros en el queue).\\ Adicionalmente se puede ejecutar una acción al encontrar registros.| ^ checkservice | Esta opción comprueba que un servicio está arrancado.\\ Si el servicio se encuentra parado podemos usar una de las acciones que se especifican debajo.| ^ filejob| Esta opción es para realizar un mantenimiento de ficheros. Solamente se realiza si la SQL devuelve algún valor. Versiones anteriores a la 4.0.5.0 utilizaban "filejop" en lugar de "filejob"| ^ pdf| Esta opción genera un fichero PDF. Solamente se realiza si la SQL devuelve algún valor.| ==== Envío de Push para hacer acciones en nuestras herramientas en el móvil ==== |< 65% - >| ^ Valores posibles que se pueden poner en el Actions del envío del PUSH || | pid | default: mandatory | | google-auth-key | default: mandatory | | device-type | 0:androide/1:IOS (default: 0) optional | | mute | true/false (default:false ) (optional) | | notification-title | default: (optional) | | notification-message | default: (optional) | | notifcation-type | 0:start-replica/ 1: start-live/2: message (default: 2) (optional) | | priority | high/normal (default: normal) (optional) | | proxy | default: (optional) | | proxy-credential | default: (optional) | ===== Acciones ===== Podemos definir acciones a ejecutar en caso de que se cumplan las condiciones en los nodos **checking** o para los nodos **maintenance** que no son condicionales y se ejecutan cuando lo indique el cron-expression que tienen definido.\\ Todas las acciones son case-sensitive en minúsculas y pueden ser escritas también con guión medio, p.ej: send-mail, execute-query, etc... ^ sendmail | Se lanza una consulta a la base de datos la cual se compone únicamente de un count de una tabla que queramos monitorear.\\ Si el valor devuelto por el count es mayor que el especificado en el atributo //count// del nodo sql se realiza la acción especificada.| ^ executequery | Se lanza una consulta para sacar datos de varios registros agrupados (ej. Agrupados por usuario).\\ Si el SQL especificado devuelve alguna fila entonces se ejecuta la acción especificada.| ^ startservice | Comprobar si hay registros en una tabla que no están en el master_replica_queue o master_replica_queue_history.\\ (Por defecto, esta opción inserta esos registros en el queue).\\ Adicionalmente se puede ejecutar una acción al encontrar registros.| ^ stopservice | Esta opción comprueba que un servicio está arrancado.\\ Si el servicio se encuentra parado podemos usar una de las acciones que se especifican debajo.| ^ restartservice | Esta opción es para realizar un mantenimiento de ficheros. Solamente se realiza si la SQL devuelve algún valor. Versiones anteriores a la 4.0.5.0 utilizaban "filejop" en lugar de "filejob"| ^ savetofile | Experimental.| ^ deletefile | Experimental.| ^ copyfile | Esta opción copia un fichero.| ^ movefile | Esta opción cambia de lugar un fichero. Ver ejemplo más abajo.| ^ movedirectory | Experimental.| ^ createfolder | Experimental.| ^ compressfiles | Experimental.| ^ cleanupdates | Específica para borrar actualizaciones del repositorio. Ver ejemplo más abajo.| \\ Por defecto, si el action anterior ha fallado, no sigue ejecutando las siguientes. En caso de querer ejecutar siempre las acciones, aunque el action anterior haya fallado, hemos de especificar el atributo **execute-always**=true (por defecto es false). \\ ==== sendmail ==== Envia un email con los datos del nodo **email y errormessage**. \\ Dentro de Sendmail se ha implementado un subnodo "**after-action**" (A partir de la versión 3.0.4.9), para realizar alguna acción tras enviar el correo. ====startservice==== Arranca el servicio especificado en el atributo value. * El valor que debemos especificar en el atributo __value__ es el nombre del servicio (Service Name), no el nombre que aparece en la ventana de servicios (Display Name). Si vamos a la consola de servicios, hacemos clic derecho sobre uno y vamos a la opción de propiedades sería el primero que aparece. ====stopservice==== Detiene el servicio especificado en el atributo value. * El valor que debemos especificar en el atributo __value__ es el nombre del servicio (Service Name), no el nombre que aparece en la ventana de servicios (Display Name). Si vamos a la consola de servicios, hacemos clic derecho sobre uno y vamos a la opción de propiedades sería el primero que aparece. ====restartservice==== Reinicia el servicio especificado en el atributo value. * El valor que debemos especificar en el atributo __value__ es el nombre del servicio (Service Name), no el nombre que aparece en la ventana de servicios (Display Name). Si vamos a la consola de servicios, hacemos clic derecho sobre uno y vamos a la opción de propiedades, sería el primero que aparece. ====savetofile==== Guarda la estructura del nodo **errormessage** en un fichero.\\ * En el atributo __value__ se le especifica la ruta completa al fichero que queremos crear (nombre de fichero incluído). Además existe un atributo __append__, por defecto es //true// de modo que añade al final del fichero, si lo ponemos a //false// crearía un fichero nuevo en cada ejecución. ====move-file==== Mueve un fichero de ubicación.\\ * En el atributo __from__ se especifica la ruta completa al fichero que queremos mover (nombre de fichero incluído) y en el atributo __to__ igual pero para el destino. Además existe un atributo __sql__ para ejecutar una SQL cuando tenga lugar la acción. \\ **Ejemplo:** ===== Macros ===== \\ |< 65% - >| ^ MACROS ^ DESCRIPCIÓN ^ |**##NL## ** | Salto de Línea | |**##TAB##** | Tabulación| |**##SRVNAME##**| Nombre del Server | |**##APPNAME##**| Nombre de la aplicación | |**##SQL##**| SQL que se ha lanzado | |**##CHECKCOUNT##** | Contador de rows que se han arreglado (Para usar con checktable) | |**##ROW_NOMBRECAMPOQUESEA##**| Sacamos el valor del campo devuelto por el SQL | ===== Nodos ===== \\ Diferentes Nodos que tenemos disponibles dentro del Nodo CHECKING: \\ |< 65% - >| ^ Nodos del Nodo Checking ^ | **SQL** | | **ERRORMESSAGE** | | **EMAIL** | | **SERVICE** - Sólo para los checking de tipo checkservice | | **TABLE** - Sólo para los checking de tipo checktable | | **PDF** | ==== Nodo sql ==== Tiene el sql que queremos lanzar (value) y dos atributos más. \\ Dentro de éste nodo tenemos un atributo **COUNT** que indica el número que se debe superar para realizar alguna acción, y **GROUPBY** indica el campo o campos (separados por comas) por el cual debemos agrupar la consulta. ==== Nodo errormessage ==== Contiene el asunto del email (__subject__), un cuerpo de mensaje (__body__) y una cabecera que será lo primero que se muestre (__header__). \\ En el caso de una comprobación tipo //groupby//, la cabecera se mostrará una vez, y el cuerpo se repetirá por cada uno de los registros agrupados. Todas y cada una de las macros que se han indicado anteriormente, se pueden utilizar en los atributos de este nodo. Ejemplo de Uso, en el que se mandan tantos correos como usuarios se agrupan, poniendo en cada correo todas y cada una de las tareas pendientes que tiene asociada. El asunto se pone en el campo subject, cabecera en el campo header y cuerpo en el body: \\ ==== Nodo email ==== Contiene el destinatario del correo electrónico (__to__), los correos que queramos añadir en copia (__CC__ – Carbon Copy) y los que queramos poner como copia oculta (__BCC__ – Blind Carbon Copy) \\ Las direcciones de correo se especifican separadas por punto y coma. Además, se puede usar una sentencia SQL para rescatar direcciones de correo desde la base de datos, la cual debe ir encerrada entre paréntesis y no puede contener punto y coma dentro de ellos. A continuación, se muestran un par de ejemplos. \\ === Subnodo attach === Dentro del nodo "**email**", existe un subnodo "**attach**" (A partir de la versión 3.0.4.9), para poder adjuntar ficheros en el correo que se envíe.\\ \\ |< 65% - >| ^ Atributo ^ Descripción ^ | **files** | Listado de ficheros que queremos que se adjunten al correo separados por "**;**". Se puede poner el fichero ficheros separados por punto y coma o sacarlos de la select que hagamos, utilizando la macro ##ROW_CAMPOQUESEA## | | **compress true/false** | Indica si queremos que los ficheros se compriman o no en ZIP, NOTA: se comprimirán todos los ficheros en uno solo, por defecto false. | ==== Nodo service ==== Contiene el nombre del servicio que vamos a comprobar (__value__). El nombre requerido es el nombre del servicio instalado, no el nombre para mostrar. (Esta opción solo se usa con el tipo //checkservice//) ==== Nodo table ==== Nos permite especificar la tabla que queremos comprobar (__value__), usado con el tipo //checktable//.
\\ ==== Nodo pdf ==== \\ Para crear una acción de tipo PDF, se debe crear un 'checking' de type="pdf" y contener además de los nodos habituales (sql, email, actions…). Uno específico para generar el PDF, el nodo 'pdf' que contendrá toda la configuración necesaria para crear y mandar los ficheros generados.\\ Todos los atributos del nodo 'pdf' pueden contener valores fijos o capturados en el sql mediante macros.\\ \\ Las macros permitidas son:\\ \\ |< 65% - >| ^ MACROS PERMITIDAS ^^ |**##ROW_XXXX##**| Esta macro va cogiendo el valor del campo XXXX que rescatamos en la SQL.| |**##NOW##**| Esta macro es sustituida por la fecha/hora actual (dd-MM-yyyy_HH-mm-ss).| |**##DATE##**| Esta macro es sustituida por la fecha actual (dd-MM-yyyy).| \\ \\ Conviene indicar que si el nombre del fichero PDF se autogenera con la única diferenciación entre unos y otros de la fecha, conviene usar la macro **##NOW##** ya que: \\ |< 65% - >| |**##DATE##** |simplemente daría ficheros idénticos durante el mismo día.| |**##NAMEPDF##**| Nombre del fichero (sin ruta) del PDF generado. Se puede usar para generar un link de descarga.| |**##SIZEPDF##**| Indica el peso en Kbs del fichero generado.| \\ Asimismo se permiten el resto de macros usadas en otras acciones (**##APPNAME##, ##SRVNAME##**...) \\ === Atributos del Nodo Pdf === \\ En este caso el monitor se encarga de montar el PDF, basado en imágenes, 1 ó 2 por página.\\ \\ Las imágenes para que todos los márgenes aparezcan perfectos serán: \\ |Para que salga 1 por pagina, de 538x765px| |Para que salgan 2 por pagina, 538x382px| \\ Ver ejemplo de checking pdf más abajo. \\ |< 75% - >| ^ pathpdf | Obligatorio. Indica la ruta donde se generaran los ficheros PDF. P.ej: "C:\inetpub\wwwroot\clientes" | ^ pathpages | Obligatorio. Indica la ruta donde están las imágenes que formarán las páginas del PDF. P.ej: "C:\inetpub\wwwroot\catalogo\files\" | ^ pages | Obligatorio. Indica el nombre de la imagen a insertar en el PDF. Normalmente será un campo del sql y será leído de cada registro del sql, debe llevar su extensión (.jpg, .png,…). P.Ej: "pagina1.jpg" | ^ namepdf | Obligatorio. Nombre del pdf a generar. Normalmente será un campo del sql o una conjunción de macros. El nombre de fichero debe ser único, NO hay que poner la extensión .pdf. | ^ sql | Obligatorio. Es un sql que se lanza tras leer cada registro. Su utilidad es lanzar un **UPDATE** o un **DELETE**(no se aconseja) a un determinado **ID, ROWID**… | ^ mailto | Obligatorio. Destinatario del pdf. | ^ mailcc | Opcional. Copia de mail con el pdf. | ^ mailbcc | Opcional. Copia oculta de mail con el pdf. | ^ mailsubject | Opcional. Título del mail. | ^ mailbody | Opcional. Cuerpo del mail. | ^ orientation | Opcional. Indica la orientación del pdf (vertical/horizontal). Por defecto, vertical. | ^ text | Opcional. Permite poner un texto debajo de la imagen. | ^ attachpdf | Opcional. Permite indicar si se envía o no el PDF al correo como adjunto (true/false). Por defecto, true. | ^ attachsize | Opcional. Permite indicar el tamaño en Bytes máximo para enviar un fichero como adjunto. Valor numérico. Si se indica este valor, solo se enviará el PDF adjunto si **attachpdf=true** y el fichero ocupa menos de lo que se indica en este valor. | ===== Ejemplos de Uso =====
> ***************************************************************************************************************************************** ********************************************************************************************* ********************************************************************************************* **************************************************************************** **************************************************************************** ************************************************************************************