EventProcessorUtilOOB - com escopo

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 5 min. de leitura
  • A inclusão de script EventProcessorUtilOOB fornece métodos para construir e publicar eventos no agente de mensagens configurado.

    Se você quiser mudar a funcionalidade padrão desta inclusão de script, será necessário substituir esses métodos na inclusão de script EventProcessorUtil. Você deve ter a função de administrador para modificar esta inclusão de script.

    Esta inclusão de script é executada no namespace sn_api_notif_mgmt.

    EventProcessorUtilOOB - constructandPublishEvent(objeto inboundEventPayloadRecord, cadeia de caracteres eventId)

    Constrói uma carga compatível com TMF688 com base nas informações passadas e publica o evento na plataforma de publicação configurada.

    A plataforma de publicação padrão é definida na propriedade do sistema sn_api_notif_mgmt.publisher_message_bus_config.

    Nota:
    Este método é um utilitário principal de gerenciamento de filas. Você não precisa substituir este método, a menos que planeje reprojetar a estrutura de notificação subjacente.
    Tabela 1. Parâmetros
    Nome Tipo Descrição
    inboundEventPayloadRecord Objeto Informações associadas ao evento. O formato desta carga útil depende do tipo de evento. Na implementação base, são os dados de registro do Glide do evento associado no formato JSON.
    eventId Cadeia de caracteres ID exclusivo do evento a ser publicado, como um GUID.
    Tabela 2. Retornos
    Tipo Descrição
    tmfEventPayload Carga de evento compatível com TMF688 criada para o evento. Para obter uma descrição do formato padrão desta carga de evento, consulte o Guia do usuário da API de gestão de eventos TMF688.

    O exemplo de código a seguir mostra como chamar este método.

    processIndividualEventRecord: function(inboundQueueGr, node_id) {
      var isError = false;
      var errorMessage;
      try {
        new EventProcessorUtil().constructandPublishEvent(JSON.parse(inboundQueueGr.getValue('payload')), inboundQueueGr.getValue('record_id'));
      } catch (ex) {
        this._logger.logErr("Event processing failed " + ex);
        isError = true;
        errorMessage = JSON.stringify(ex);
      }
    
      // Update the inbound queue record based on processing
      var inboundQueueObj = new sn_tmt_core.BaseObject();
      if (isError == true) {
        inboundQueueObj.setValue('state', sn_tmt_core.Constants.INBOUND_QUEUE_STATE.ERROR);
        inboundQueueObj.setValue('error_message', errorMessage);
      } else {
        inboundQueueObj.setValue('state', sn_tmt_core.Constants.INBOUND_QUEUE_STATE.COMPLETED);
      }
        var inboundQueue = new sn_tmt_core.InboundQueue(inboundQueueGr, false);
        inboundQueue.updateInboundQueueRecord(inboundQueueObj);
    },

    EventProcessorUtilOOB - fetchEventHandlerAndCreateTMFEvent (objeto eventSnapshot, cadeia de caracteres eventType, cadeia de caracteres eventId)

    Converte o objeto de evento bruto aprovado em um objeto de evento compatível com TMF invocando um gerador de carga com base no tipo de evento.

    Você precisará substituir este método se sua implementação:
    • Modifica a manipulação de eventos existente.
    • Adiciona um novo tipo de evento. Você deve adicionar o tipo de evento e seu gerador de carga associado.
    • Adiciona um novo objeto na Estrutura de notificação de eventos do produtor.

    Você também pode precisar substituir os métodos na inclusão de script TroubleTicketNotificationUtil para adicionar atributos à carga compatível com TMF retornada ou modificar o processamento padrão da carga útil.

    Para obter informações adicionais, confira Configurar notificações de tíquete de problema usando a Estrutura de notificação de eventos do produtor.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    eventSnapshot Objeto Dados brutos a serem transformados em um objeto compatível com TMF.

    Você pode obter este objeto do campo de carga da tabela Fila de entrada [sn_tmt_core_inbound_queue]. Os registros da fila de entrada são criados por regras de negócio, como Evento de mudança de atributo do tíquete de problema, que está associado à tabela Incidente [incidente].

    O formato do snapshot do evento é definido pela regra de negócio que originalmente enviou o evento para a fila de entrada.

    eventType Cadeia de caracteres Tipo de evento. Este valor especifica o tipo de dados de evento que são passados na carga útil eventSnapshot. A carga aprovada é processada com base neste tipo de evento. O tipo de evento é carimbado no registro da fila de entrada pela regra de negócio associada na tabela associada. Cada tipo de evento tem sua própria estrutura de carga de evento. Por exemplo:
    {
      "eventId":"dc2003c2c3bb3550054e20bdc0013136",
      "@type":"Troubleticket",
      "eventType":"TroubleTicketCreateEvent",
      "event":{
        "troubleTicket":{
          "short_description":"Test payload",
          "severity":3,
          "ticketType":"incident"
        }
      }
    }

    Os valores padrão para tipos de evento de tíquete de problema são definidos no parâmetro EVENT_TYPES na inclusão de script sn_api_notif_mgmt.Constants.

    eventId Cadeia de caracteres Identificador exclusivo do evento a ser convertido.
    Tabela 4. Retornos
    Tipo Descrição
    tmfEventPayload Carga do evento no formato compatível com TMF. Para ver o processo de transformação do objeto eventSnapshot aprovado para a carga compatível com TMF, revise o código na inclusão de script TroubleTicketNotificationUtilOOB.

    O exemplo de código a seguir mostra como chamar este método.

    constructandPublishEvent: function(inboundEventPayloadRecord, eventId) {
      if (gs.nil(inboundEventPayloadRecord)) return;
      var tmfEventPayload = this.fetchEventHandlerAndCreateTMFEvent(inboundEventPayloadRecord.eventSnapshot, inboundEventPayloadRecord.eventType, eventId);
    
      this._logger.debug("Event payload generated for the event id " + eventId + " is " + JSON.stringify(tmfEventPayload));
    
      if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.OPEN_MESSAGE_BUS) {
        // Publish event in custom message bus
          this.publishEventToOpenMessageBus(tmfEventPayload);
    
      } else if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.HERMES) {
        // Publish event in hermes kafka
        try {
          this.publishMessageToHermesKafka(tmfEventPayload);
        } catch (ex) {
          this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
        }
      } else if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.BOTH_MESSAGE_BUS_CONFIGURATIONS) {
        // Publish event in both custom message bus and hermes kafka
        this.publishEventToOpenMessageBus(tmfEventPayload);
        try {
          this.publishMessageToHermesKafka(tmfEventPayload);
        } catch (ex) {
          this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
        }
      }
      return tmfEventPayload;
    },

    O exemplo de código a seguir mostra as declarações de caso de alternância usadas por este método para determinar como transformar a carga do evento passada com base no parâmetro eventType. Se você adicionar outros tipos de evento à sua implementação, deverá substituir este método e incluir o processamento do novo tipo de evento.

    fetchEventHandlerAndCreateTMFEvent: function(eventSnapshot, eventType, eventId) {
    var eventPayload;
    switch (eventType) {
      case Constants.EVENT_TYPES.TROUBLE_TICKET_STATUS_CHANGE:
        eventPayload = new sn_ind_tsm_sdwan.TroubleTicketNotificationUtil().generateTroubleTicketStatusChangePayload(eventSnapshot, eventType, eventId);
        break;
    
      // New event type in trouble ticket
      case ‘troubleTicketPriorityChange’
        eventPayload = new sn_ind_tsm_sdwan.TroubleTicketNotificationUtil().generateTroubleTicketAttributeChangePayload(eventSnapshot, eventType, eventId);
        break;
    
      // New event type of object other than trouble ticket
      case ‘domainOrderStatusChange’
        eventPayload = new sn_ind_tmt_orm().domainOrderNotification().generatedomainOrderStatusChangePayoad(eventSnapshot, eventType, eventId);
        break;
    
      default:
        this._logger.debug("Event with id " + eventId + " could not find the matching payload generator");
        eventPayload = null;
      }
    return eventPayload;
    },

    EventProcessorUtilOOB – publicarMessageToHermesKafka(Object tmfEventPayload)

    Instancia a classe HermesEventPublisher e publica a carga do evento aprovada no agente de mensagens Hermes Kafka.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    tmfEventPayload Objeto Carga de evento compatível com TMF688 criada para o evento. Para obter uma descrição do formato padrão desta carga de evento, consulte o Guia do usuário da API de gestão de eventos TMF688.
    Tabela 6. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo de código a seguir mostra como chamar este método.

    constructandPublishEvent: function(inboundEventPayloadRecord, eventId) {
      if (gs.nil(inboundEventPayloadRecord)) return;
      var tmfEventPayload = this.fetchEventHandlerAndCreateTMFEvent(inboundEventPayloadRecord.eventSnapshot, inboundEventPayloadRecord.eventType, eventId);
    
      this._logger.debug("Event payload generated for the event id " + eventId + " is " + JSON.stringify(tmfEventPayload));
    
      if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.OPEN_MESSAGE_BUS) {
        // Publish event in open message bus
        this.publishEventToOpenMessageBus(tmfEventPayload);
    
      } else if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.HERMES) {
        // Publish event in Hermes Kafka
        try {
          this.publishMessageToHermesKafka(tmfEventPayload);
        } catch (ex) {
            this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
        }
      } else if (gs.getProperty(Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION) == Constants.EVENT_PUBLISH_MESSAGE_BUS_CONFIGURATION_VALUES.BOTH_MESSAGE_BUS_CONFIGURATIONS) {
        // Publish event in both custom message bus and Hermes Kafka
        this.publishEventToOpenMessageBus(tmfEventPayload);
        try {
          this.publishMessageToHermesKafka(tmfEventPayload);
        } catch (ex) {
          this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
        }
      }
      return tmfEventPayload;
    },