EventProcessorUtilOOB - com escopo

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 5 min. de leitura
  • O script include 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 - construtorandPublishEvent(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 método de utilitário principal de gerenciamento de filas. Você não deve precisar 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 básica, 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. Retorna
    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 fizer qualquer uma das seguintes:
    • 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 evento do produtor.

    Você também pode precisar substituir os métodos no script TroubleTicketNotificationUtil include 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 evento 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ócios, como Evento de mudança de atributo de tíquete de problema, que está associado à tabela Incidente [incidente].

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

    eventType Cadeia de caracteres Tipo de evento. Este valor especifica o tipo de dados do evento que é passado na carga eventSnapshot. A carga passada é processada com base neste tipo de evento. O tipo de evento é carimbado no registro da fila de entrada pela regra de negócios 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 dos 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. Retorna
    Tipo Descrição
    tmfEventPayload Carga do evento em formato compatível com TMF. Para ver o processo de transformação do objeto eventSnapshot passado 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 switch case 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 para o 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(objeto tmfEventPayload)

    Instancia a classe HermesEventPublisher e publica a carga do evento passada para o agente de mensagens do 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. Retorna
    Tipo Descrição
    Nenhum

    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;
    },