.. _time_periods:

Configuración de Notificaciones
===============================

Tener conocimiento del estado de la infraestructura monitorizada,
es el primer paso para resolver o prevenir posibles incidencias.
WOCU-Monitoring dispone de un sistema de notificación configurable,
que avisa al operario sobre resultados de comprobaciones de operatividad
ejecutadas, con el fin de actuar con premura ante incidencias y así
minimizar su impacto o su ocurrencia.

Esto es posible mediante la definición de distintos **Periodos de Tiempo**
de notificación, como parte de la configuración de Dispositivos, Servicios
y Contactos. La flexibilidad que ofrece este sistema, permite adaptarse a
las necesidades y preferencias del operario, garantizando la comunicación
efectiva sobre cualquier situación importante que requiera su atención.

En definitiva, el operario será capaz de definir nuevas vías de notificación,
estableciendo para ello periodos o intervalos de tiempo específicos, en los
que el sistema enviará notificaciones cuando se produzcan eventos relevantes.
Estos eventos pueden incluir problemas de disponibilidad, caídas o recuperación
de Dispositivos y Servicios, en definitiva, cambios de estado.

.. sidebar:: Para más información...

    Puede ampliar información en la sección
    :ref:`notification-way-tab` del manual de usuario.

El espacio de tiempo que no abarque la configuración establecida, será
tratado como periodos de inactividad (a efectos de avisos), minimizando así
el ruido de notificaciones innecesarias y eliminando la sensación de exceso
de información lo que repercute en la pérdida de confianza en las alarmas
obtenidas. Por ejemplo, en tareas de mantenimiento con paradas y caídas
programadas.

.. admonition:: Caso de uso

    El presente caso de uso detalla el proceso de configuración y
    programación de una nueva vía de notificación (**Notification Way**)
    en base a los siguientes criterios:

    - Periodo de tiempo sujeto a notificaciones: de lunes a viernes,
      dividido en dos franjas: ``1º: 09:00 - 14:00 h.`` , ``2º: 15:00 - 18:00 h.``

    - Alcance: Dispositivos y Servicios en estado DOWN/CRITICAL.

    - Medio de notificación: `Slack <https://slack.com/intl/es-es>`_.

Para ello, el proceso se divide en cuatro partes:

    :ref:`create_command`.

    :ref:`create_notification_way`.

    :ref:`link_notification_way_to_contact`.

    :ref:`incidences_in_slack`.

.. _create_command:

1. Creación de un Comando de notificación
-----------------------------------------

Estos comandos especifican el modo de envío de notificaciones a
través de herramientas o tecnologías de comunicación que
WOCU-Monitoring integra y soporta.

Para este caso de uso el medio de notificación será:
`Slack <https://slack.com/intl/es-es>`_.

**1.1 Acceso a la sección Commands**

    Para la definición y configuración de comandos,
    acceda al :ref:`Módulo Configuration<import_tool>` y diríjase
    a la sección
    :ref:`Active Assets<active_assets>` > :ref:`Contacts<contacts_active>` >
    :ref:`Notifications Command<notification-command-tab>`.

    .. image:: ../images/use_cases/5_116_aggregator_use_cases_notifications-menu_0-57.png
        :align: center

**1.2 Creación de un nuevo comando para Dispositivos**

    - Haga clic en el botón :guilabel:`+ Add Notification Command`
      y seleccione la opción ``Notify by slack``.

    .. image:: ../images/use_cases/5_117_aggregator_use_cases_notifications-select-slack_0-57.png
        :align: center
        :scale: 80%

    - Registre los siguientes datos en el formulario de configuración:

        .. image:: ../images/use_cases/5_118_aggregator_use_cases_notifications-slack-form_0-57.png
            :align: center
            :scale: 80%

        **a. Notification Name**: agregue el
        término identificador del comando: ``Slack_Host``.

        **b. Assets type**: seleccione la opción :guilabel:`Host`
        en el desplegable.

        **c. Slack Channel**: registre el
        nombre del canal en Slack que recepcionará las notificaciones
        pertinentes: ``#wocu-wow``.

        **d. Slack Webhook**: registre la
        URL: ``https://hooks.slack.com/services/TOKEN``.
        **Importante:** solicite el objeto Webhook a su administrador de Slack.
        Más información en el siguiente
        `enlace <https://api.slack.com/messaging/webhooks>`__.

**1.3 Creación de un nuevo comando para Servicios**

    - Haga clic en el botón :guilabel:`+ Add Notification Command`
      y seleccione la opción ``Notify by slack``.

    .. image:: ../images/use_cases/5_117_aggregator_use_cases_notifications-select-slack_0-57.png
        :align: center
        :scale: 80%

    - Registre los siguientes datos en el formulario de configuración:

        .. image:: ../images/use_cases/5_119_aggregator_use_cases_notifications-slack-form_0-57.png
            :align: center
            :scale: 80%

        **a. Notification Name**: agregue el
        término identificador del comando: ``Slack_Services``.

        **b. Assets type**: seleccione la opción :guilabel:`Services`
        en el desplegable.

        **c. Slack Channel**: registre el
        nombre del canal en Slack que recepcionará las notificaciones
        pertinentes: ``#wocu-wow``.

        **d. Slack Webhook**: registre la
        URL: ``https://hooks.slack.com/services/TOKEN``.
        **Importante:** solicite el objeto Webhook a su administrador de Slack.
        Más información en el siguiente
        `enlace <https://api.slack.com/messaging/webhooks>`__.

Una vez creado, el comando será configurado dentro de
:ref:`notification-way-tab` que serán asociadan a tantos contactos
como se desee.

.. _create_notification_way:

2. Creación de Notification Way: periodos, tipología y envío
------------------------------------------------------------

**2.1 Acceso a la sección Notifications Ways**

    Para la definición y configuración de periodos de notificación,
    acceda al :ref:`Módulo Configuration<import_tool>` y diríjase
    a la sección
    :ref:`Active Assets<active_assets>` > :ref:`Contacts<contacts_active>` >
    :ref:`Notifications Way<notification-way-tab>`.

    .. image:: ../images/use_cases/5_083_aggregator_use_cases_notifications-section_0-57.png
        :align: center

**2.2 Creación de una nueva vía de notificación**

    - Haga clic en el botón :guilabel:`+ Add Notification way`.

    .. image:: ../images/setup/4_133_import-tool_active-assets_contacts-new-notifications_0-56.png
        :align: center

    - Registre los siguientes datos en el formulario de configuración:

        .. image:: ../images/use_cases/5_084_aggregator_use_cases_notifications-form_0-56.jpg
            :align: center
            :width: 30 em

        **a. Notification name**: agregue el término identificativo de la
        vía de notificación: ``working time period``.

        **b. Host notification schedule**: configure el marco temporal
        sujeto a notificaciones.

        Para este caso de uso, seleccione el acceso rápido
        :guilabel:`Working schedule` y configure un primer marco temporal
        que inicie (*Start Time*) a las 09:00 h. y finalice (*End time*)
        a las 14:00 h.

        A continuación, agregue un nuevo marco temporal mediante el botón
        :guilabel:`New Schedule`. Repita la selección del acceso rápido
        :guilabel:`Working schedule`, y por último, defina un segundo
        periodo que inicie (*Start Time*) a las 15:00 h. y finalice (*End time*)
        a las 18:00 h.

        Recuerde que el espacio de tiempo que no abarque la configuración vigente,
        será tratado como periodos de inactividad a efecto de avisos.

        .. image:: ../images/use_cases/5_085_aggregator_use_cases_notifications-schedule_0-56.jpg
            :align: center
            :scale: 55%

        **c. Host notification options**: configure ante qué eventos generar
        una notificación. Para este caso de uso, se busca recibir
        alertas cuando los Dispositivos registren un estado DOWN. Para ello,
        seleccione la casilla correspondiente a la
        opción: ``Notify on DOWN host states``.

        .. image:: ../images/use_cases/5_086_aggregator_use_cases_notifications-optios_0-56.jpg
            :align: center
            :scale: 60 %

        **d. Host notification commands**: seleccione el comnando ``Slack_Host``
        para que el sistema emita notificaciones a través de la
        aplicación Slack.
        Esta opción ha sido creada en el paso: :ref:`create_command`.

        .. image:: ../images/use_cases/5_114_aggregator_use_cases_notifications-command_0-57.jpg
            :align: center

        **e. Service notification schedule**: seleccione el acceso rápido
        :guilabel:`Working schedule` y configure un primer marco temporal
        que inicie (*Start Time*) a las 09:00 h. y finalice (*End time*)
        a las 14:00 h.

        A continuación, agregue un nuevo marco temporal mediante el botón
        :guilabel:`New Schedule`. Repita la selección del acceso rápido
        :guilabel:`Working schedule`, y por último, defina un segundo
        periodo que inicie (*Start Time*) a las 15:00 h. y finalice (*End time*)
        a las 18:00 h.

        .. image:: ../images/use_cases/5_087_aggregator_use_cases_notifications-schedule_0-56.jpg
            :align: center
            :scale: 55%

        **f. Service notification options**: configure ante qué eventos
        generar una notificación. Para este caso de uso, se busca recibir
        alertas cuando los Servicios registren un estado DOWN. Para ello,
        seleccione la casilla correspondiente a la
        opción: ``Notify on CRITICAL service states``.

        .. image:: ../images/use_cases/5_088_aggregator_use_cases_notifications-optios_0-56.jpg
            :align: center
            :scale: 60%

        **g. Service notification commands**: seleccione el comnado ``Slack_Services``
        para que el sistema emita notificaciones a través de la aplicación Slack.
        Esta opción ha sido creada en el paso: :ref:`create_command`.

        .. image:: ../images/use_cases/5_115_aggregator_use_cases_notifications-command_0-57.jpg
            :align: center

        Por último, confirme la nueva vía de notificación definida a
        través del botón :guilabel:`Create`.

**2.3 Visualización de la vía de notificación**

Ya dispone del nuevo método de notificación denominado ``working time period``
en el listado global de :ref:`notification-way-tab`.

.. image:: ../images/use_cases/5_089_aggregator_use_cases_notifications-list_0-56.jpg
    :align: center
    :scale: 55%

.. _link_notification_way_to_contact:

3. Asociar la nueva vía de notificación al Contacto receptor
------------------------------------------------------------

En este paso, se aborda la vinculación de vías de notificación
como parte de la configuración de Contactos.

**3.1 Acceso a la sección Contacts**

    Para la vinculación de periodos de notificación a un Contacto,
    acceda al :ref:`Módulo Configuration<import_tool>` y diríjase
    a la sección
    :ref:`Active Assets<active_assets>` > :ref:`Contacts<contacts_active>`.

.. image:: ../images/use_cases/5_090_aggregator_use_cases_contacts-tab_0-56.jpg
    :align: center
    :scale: 55%

**3.2 Localización del contacto pertinente**

    - En el listado global de :ref:`Contacts<contacts_active>`,
      localice ``User_1``. Este será el futuro receptor de notificaciones.

    .. image:: ../images/use_cases/5_091_aggregator_use_cases_contacts_list_0-56.jpg
        :align: center
        :scale: 55%

    - Para editar la configuración del Contacto, haga
      clic sobre el nombre del mismo.

    .. image:: ../images/use_cases/5_092_aggregator_use_cases_contacts_detail_0-56.jpg
        :align: center
        :scale: 80 %

    - A continuación, emergerá el perfil del Contacto ``User_1``, con
      la opción :guilabel:`Edit` encabezando la vista.

    .. image:: ../images/use_cases/5_109_aggregator_use_cases_contacts_edit_0-56.jpg
        :align: center
        :scale: 55%

    - Ya en el formulario de edición, posiciónese
      en el atributo **Notification ways**, despliegue la pestaña
      y seleccione la vía de notificación ``working time period``.
      Esta opción ha sido creada en el paso: :ref:`create_notification_way`.

    .. image:: ../images/use_cases/5_110_aggregator_use_cases_contacts_notifications_ways_0-56.jpg
        :align: center
        :scale: 55%

    - Confirmado el cambio realizado mediante el botón
      :guilabel:`Save`, quedará asignada la nueva configuración de
      notificación al Contacto, con los avisos pertinentes procedentes de
      Dispositivos y Servicios asociados al mismo.

    .. Note::

        Si por el contrario desea dar de alta un nuevo Contacto,
        puede hacerlo desde la acción :ref:`addcontact`, ubicada
        en la sección :ref:`Contacts<contacts_active>`.

        .. image:: ../images/use_cases/5_112_aggregator_use_cases_add_contact_0-56.jpg
            :align: center
            :scale: 55%

        En este caso, una vez creado el nuevo perfil, este **deberá
        vincularse a un activo para poder registrar y notificar
        las incidencias pertinentes que ocurran**. Puede hacerse de forma
        manual en la configuración de cada activo, o mediante
        la asignación de :ref:`templates-hosts`. En ambas situaciones,
        existe el atributo **Contacts** para establecer la relación
        activo/contacto.

        .. image:: ../images/use_cases/5_111_aggregator_use_cases_contacts_field_0-56.jpg
            :align: center
            :scale: 55%

.. _incidences_in_slack:

4. Recepción de alarmas en Slack
--------------------------------

En este paso final, se aborda la integración de WOCU-Monitoring
con `Slack <https://slack.com/intl/es-es>`_ para la notificación en
tiempo real de eventos específicos.
Será el administrador de WOCU-Monitoring y de Slack
quienes deban realizar unas configuraciones previas.

En concreto, será necesario que el administrador facilite acceso
al canal de notificación habilitado y configure la variable ``webhook``
para consolidar la conexión entre ambas herramientas.
Más información en el siguiente
`enlace <https://api.slack.com/messaging/webhooks>`__.

**4.1 Recepción y gestión de notificaciones en Slack**

En este caso de uso, el administrador de Slack ha creado el canal
``#wocu-wow`` donde se recepcionan las notificaciones. En él, se listan
las distintas alertas que se ajustan a los criterios establecidos
(periodos de tiempo y alcance marcado).

De acuerdo al caso de uso actual, se pueden observar dos notificaciones
por cada tipo de activo: Dispositivo **Host_LML** y Servicio **Http**.
En ambos ejemplos se ha producido una pérdida total de la disponibilidad,
registrando un estado de monitorización Down/Critical.

.. image:: ../images/use_cases/5_113_aggregator_use_cases_slack_integration_0-56.png
    :align: center

A partir de este punto, el usuario ya es conocedor de la incidencia y
puede proceder a solventarla para así minimizar su impacto.

Tipos de notificaciones
-----------------------

En el proceso de configuración de notificaciones, es esencial considerar
con detenimiento el tipo específico de notificación que se está gestionando.
El campo ``NOTIFICATION TYPE`` desempeña un papel fundamental al identificar
la naturaleza de la notificación en cuestión.

.. image:: ../images/use_cases/5_120_aggregator_use_cases_type_notifications_0-58.png
    :align: center
    :scale: 70%

Al comprender claramente los distintos tipos de notificaciones, el operario
puede optimizar la gestión de eventos y asegurarse de que las respuestas
del sistema se alineen de manera precisa con las necesidades de monitorización
de sus entornos.

A continuación, se presenta una tabla con los distintos tipos de notificaciones,
junto con descripciones detalladas de cada una.

.. csv-table:: **Tipos de Notificaciones en WOCU-Monitoring**
   :header: "Tipología", "Descripción"
   :widths: 9, 20

   "**PROBLEM**","Esta tipología indica que existe una anomalía
   con un activo monitorizado por WOCU-Monitoring. Cuando se trate
   de un Servicio, puede hacer referencia a un cambio de estado de
   disponibilidad a: Warning, Unknown o Critical. Si es sobre un
   Dispositivo, los posibles estados son Down o Unreachable."
   "**RECOVERY**","Indica la recuperación de la disponibilidad de un activo
   monitorizado volviendo a ser accesible nuevamente, después de haber
   experimentado algún tipo de interrupción con anterioridad. Cuando se trate
   de un Servicio, significa que acaba de volver a un estado OK. Si es sobre
   un Dispositivo, acaba de registrar un estado UP."
   "**ACKNOWLEDGEMENT**","Esta tipología hace referencia a la confirmación
   de que el operario tiene conocimiento de un problema registrado en un
   Dispositivo o Servicio monitorizado. Los reconocimientos son generados
   a través de la interfaz web por los contactos designados para ese activo
   en particular. En otras palabras, cuando alguien responsable de la
   supervisión detecta una incidencia, a través de la interfaz web puede
   confirmar que tiene conocimiento de la situación, y esta notificación sirve
   como un registro de ese reconocimiento."
   "**FLAPPINGSTART**","Significa que un Dispositivo o Servicio acaba de
   registrar un estado *flapping*, es decir, está experimentando cambios
   frecuentes y rápidos en su estado operacional, lo que indica
   inestabilidad en la disponibilidad del activo en cuestión."
   "**FLAPPINGSTOP**","Significa que un Dispositivo o Servicio ha dejado
   de mostrar este comportamiento *flapping*. En otras palabras, el activo
   se ha estabilizado. Esto puede ser un indicador positivo, ya que la
   estabilidad en el estado operacional facilita la identificación y resolución
   de problemas potenciales."
   "**FLAPPINGDISABLED**","Indica que el estado *flapping* ha sido
   desactivado (a propósito) para el Dispositivo o Servicio en cuestión, lo
   que implica que no se generará una alerta cuando haya cambios frecuentes
   en su estado. Esto podría ser útil en situaciones específicas donde se
   prefiera desactivar temporalmente la detección de fluctuación,
   por ejemplo, durante el mantenimiento o cuando se espera que el estado
   cambie con frecuencia sin que sea motivo de preocupación."
   "**DOWNTIMESTART**","Indica que un Dispositivo o Servicio ha comenzado
   un periodo de inactividad programada. Durante este tiempo, se espera que
   el activo no esté disponible o esté fuera de servicio debido a actividades
   planificadas, como mantenimiento. Para evitar la generación de notificaciones
   innecesarias o alarmas no deseadas durante esta fraja temporal definida,
   se suprimen futuras notificaciones."
   "**DOWNTIMESTOP**","Indica que un Dispositivo o Servicio ha finalizado un
   periodo previamente programado de inactividad y se reanuda el alertado de
   eventos. Durante dicho periodo, las notificaciones sobre cualquier problema
   o irregularidad en activos monitorizados se suspendieron."
   "**DOWNTIMECANCELLED**","Indica que el periodo de tiempo programado para
   inactividad (*downtime*) de un Dispositivo o Servicio acaba de ser
   cancelado. Las notificaciones sobre problemas ahora pueden reanudarse."