Nota

Configurare le notifiche per i job del workflow AIDP e gli scenari personalizzati utilizzando le notifiche OCI

Introduzione

Questa esercitazione spiega come configurare le notifiche per i job del workflow AIDP utilizzando il servizio Notifiche ed eventi OCI. Imparerai anche come implementare la logica di notifica personalizzata utilizzando un programma Python in un notebook AIDP.

Il servizio Notifiche OCI utilizza un modello di pubblicazione/sottoscrizione per consegnare i messaggi in modo affidabile e sicuro.

Obiettivi

Entro la fine di questo tutorial, sarete in grado di:

Prerequisiti


Task 1: Crea argomento di notifica e sottoscrizione

  1. Eseguire il login a OCI Console.
  2. Passare a Servizi per sviluppatori → Notifiche.
  3. Fare clic su Crea argomento e fornire:
    • Nome
    • Descrizione

    Crea argomento

  4. Crea sottoscrizione:
    • Protocollo: E-mail
    • E-mail: il tuo indirizzo e-mail

    Crea iscrizione

  5. Controlla la tua email e conferma l'iscrizione.

    Conferma della sottoscrizione

Nota: lo stato della sottoscrizione viene modificato da In sospeso in Attivo dopo la conferma.


Task 2: Configura regola evento per flusso di lavoro AIDP

  1. Passare a Osservabilità e gestione → Servizio eventi → Regole.
  2. Fare clic su Crea regola
  3. Configurare quanto riportato di seguito.
    • Service: Data lake intelligente
    • Tipo di evento: Esegui job - Fine
    • Nome attributo 1: jobKey
    • Valori attributo 1: Mantieni ID flusso di lavoro helpp
    • Nome attributo 2: jobStatus
    • Valori attributo 2: non riuscito
  4. Imposta azione:
    • Seleziona argomento di notifica creato in precedenza

    Conferma della sottoscrizione

Suggerimento: è possibile personalizzare le regole per altri stati quali Operazione riuscita o Esecuzione.


Task 3: Convalida notifica e-mail

  1. Attivare o eseguire un job del workflow.
  2. Se necessario, forzare uno scenario di errore.
  3. Controllare la posta in arrivo dell'e-mail.

    Notifica errore mansione

Nota: la notifica include dettagli sul job, ad esempio il nome e lo stato.


Task 4: Implementare una notifica personalizzata utilizzando Python

Di seguito è riportato un programma Python di esempio per inviare notifiche utilizzando l'SDK OCI.

import oci
from oci.ons.models import MessageDetails

config = oci.config.from_file("~/.oci/config", "DEFAULT")
client = oci.ons.NotificationDataPlaneClient(config)

topic_id = "<your_topic_ocid>"

message_details = MessageDetails(
    title="Test Notification",
    body="Hello from AIDP!"
)

response = client.publish_message(
    topic_id=topic_id,
    message_details=message_details
)

print("Message sent:", response.data.message_id)

Task 5: Classe notifica personalizzata avanzata

import oci
import logging
import time
from typing import List, Optional, Dict

logger = logging.getLogger("OCI_Notifier")
logger.setLevel(logging.INFO)

handler = logging.StreamHandler()
formatter = logging.Formatter(
    "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)

class OCINotifier:
    def __init__(
        self,
        topic_id: str,
        config_file: str = "~/.oci/config",
        profile: str = "DEFAULT",
        max_retries: int = 3,
        retry_delay: int = 2,
    ):
        """
        Initialize OCI Notification client

        Args:
            topic_id: OCI Notification Topic OCID
            config_file: Path to OCI config
            profile: Config profile name
            max_retries: Retry attempts
            retry_delay: Delay between retries (seconds)
        """
        self.topic_id = topic_id
        self.max_retries = max_retries
        self.retry_delay = retry_delay

        try:
            self.config = oci.config.from_file(config_file, profile)
            self.client = oci.ons.NotificationDataPlaneClient(self.config)
            logger.info("OCI Notifier initialized successfully")
        except Exception as e:
            logger.error(f"Failed to initialize OCI client: {e}")
            raise

    
    def send(
        self,
        title: str,
        message: str,
        metadata: Optional[Dict] = None,
    ) -> bool:
        """
        Send notification message

        Args:
            title: Notification subject
            message: Notification body
            metadata: Optional metadata dictionary

        Returns:
            bool: True if success, False otherwise
        """

        payload = {
            "title": title,
            "body": message,
        }

        if metadata:
            payload["metadata"] = metadata

        for attempt in range(1, self.max_retries + 1):
            try:
                response = self.client.publish_message(
                    self.topic_id,
                    payload
                )
                logger.info(
                    f"Notification sent successfully | "
                    f"Message ID: {response.data.message_id}"
                )
                return True

            except Exception as e:
                logger.error(
                    f"Attempt {attempt} failed: {str(e)}"
                )
                if attempt < self.max_retries:
                    time.sleep(self.retry_delay)
                else:
                    logger.error("Max retries reached. Notification failed.")
                    return False



def notify_success(notifier: OCINotifier, job_name: str):
    notifier.send(
        title=f"{job_name} SUCCESS",
        message=f"Job '{job_name}' completed successfully."
    )


def notify_failure(notifier: OCINotifier, job_name: str, error: str):
    notifier.send(
        title=f"{job_name} FAILED",
        message=f"Job '{job_name}' failed.\nError: {error}"
    )

Task 6: Notifica personalizzata chiamata da blocco note AIDP

È possibile richiamare la logica di notifica all'interno del workflow o del notebook:

from notifier import notify_failure

notify_failure(notifier, "SampleJob", "Error details here")

Risoluzione dei problemi e suggerimenti

Suggerimento: assicurarsi che il percorso del file di configurazione OCI sia corretto.

Nota: verificare l'OCID dell'argomento e lo stato della sottoscrizione.

Suggerimento: utilizzare i nuovi tentativi nel notificatore personalizzato per garantire l'affidabilità.


Passi successivi


Riconoscimenti

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.