Name

sn_cmdb_int_util.CMDBIntegrationErrorParser

Description

No description available

Script

var CMDBIntegrationErrorParser = Class.create();
CMDBIntegrationErrorParser.prototype = {
  initialize: function() {},

  parseRow: function(row) {
      if (row.getValue("sys_import_state") == "error") {
          //Check for IRE log.
          var ireLog = new GlideRecord("import_log");
          ireLog.addQuery("level", "2");
          ireLog.setLimit(20);
          ireLog.addQuery("import_set_row", row.getValue("sys_id"));
          ireLog.addQuery("message", "STARTSWITH", "Identification Reconciliation Engine(IRE) Processing errors->");
          ireLog.addQuery("sys_created_on", ">=", row.getValue("sys_created_on"));
          ireLog.query();
          if (ireLog.next()) {
              var message = ireLog.getValue("message");
              //This message is split by line returns.
              var ireMessages = message.split("\n");
              //Ignore the first row.
              for (var i = 1; i < ireMessages.length; i++) {
                  var ireMessage = ireMessages[i];
                  ireMessage = this.cleanIREMessage(ireMessage);
                  if (!gs.nil(ireMessage)) {
                      this.createErrorRecord(row, ireMessage, "ire");
                  }
              }
          }
      }
  },

  parseRowForIREWarnings: function(row) {
      //Check for IRE log.
      var ireLog = new GlideRecord("import_log");
      ireLog.addQuery("level", "0");
      ireLog.addQuery("import_set_row", row.getValue("sys_id"));
      ireLog.setLimit(1);
      ireLog.addQuery("message", "STARTSWITH", "Identification Reconciliation Engine(IRE) Processing warnings-");
      ireLog.addQuery("sys_created_on", ">=", row.getValue("sys_created_on"));
      ireLog.query();
      if (ireLog.next()) {
          var message = ireLog.getValue("message");
          //This message is split by line returns.
          var ireMessages = message.split("\n");
          //Ignore the first row.
          for (var i = 1; i < ireMessages.length; i++) {
              var ireMessage = ireMessages[i];
              ireMessage = this.cleanIREMessage(ireMessage);
              if (!gs.nil(ireMessage)) {
                  this.createErrorRecord(row, ireMessage, "ire");
              }
          }
      }
  },

  cleanIREMessage: function(message) {
      // Remove the leading number.
      message = message.replace(/^\d+:\s*/, "");
      // Some errors have two sentences. The second sentence isn't unique.
      if (message.indexOf(". ") > 0) {
          message = message.substring(0, message.indexOf(". ") + 1);
      }
      if (message == "ABANDONED: Abandoned due to too many errors") {
          return null;
      }
      return message;
  },

  createErrorRecord: function(row, message, category) {
      //Find my execution import set.
      var executionImportSet = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionImportSet.addQuery("import_set", row.sys_import_set.sys_id);
      executionImportSet.setLimit(1);
      executionImportSet.query();
      if (!executionImportSet.next()) {
          return;
      }
      var error = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_error");
      error.addQuery("cmdb_integration_execution_import_set", executionImportSet.sys_id);
      error.setLimit(1);
      error.addQuery("error_message", message);
      error.query();
      if (error.next()) {
          error.setValue("count", 1 + parseInt(error.getValue("count")));
          error.update();
      } else {
          error.initialize();
          error.setValue("cmdb_integration_execution_import_set", executionImportSet.sys_id);
          error.setValue("error_message", message);
          error.setValue("category", category);
          error.setValue("target_table", row.getTableName());
          error.setValue("target_sys_id", row.getValue("sys_id"));
          error.setValue("count", 1);
          error.insert();
      }
  },

  createImportErrorRecord: function(import_set, message, category) {
      //Find my execution import set.
      var executionImportSet = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionImportSet.addQuery("import_set", import_set.sys_id);
      executionImportSet.setLimit(1);
      executionImportSet.query();
      if (!executionImportSet.next()) {
          return;
      }

      var error = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_error");
      error.addQuery("cmdb_integration_execution_import_set", executionImportSet.sys_id);
      error.setLimit(1);
      error.addQuery("error_message", message);
      error.query();
      if (error.next()) {
          error.setValue("count", 1 + parseInt(error.getValue("count")));
          error.update();
      } else {
          error.initialize();
          error.setValue("cmdb_integration_execution_import_set", executionImportSet.sys_id);
          error.setValue("error_message", message);
          error.setValue("category", category);
          error.setValue("count", 1);
          error.insert();
      }
  },

  createExecutionErrorRecord: function(execution_import_set, message, category) {
      var error = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_error");
      error.addQuery("cmdb_integration_execution_import_set", execution_import_set.sys_id);
      error.setLimit(1);
      error.addQuery("error_message", message);
      error.query();
      if (error.next()) {
          error.setValue("count", 1 + parseInt(error.getValue("count")));
          error.update();
      } else {
          error.initialize();
          error.setValue("cmdb_integration_execution_import_set", execution_import_set.sys_id);
          error.setValue("error_message", message);
          error.setValue("category", category);
          error.setValue("count", 1);
          error.insert();
      }
  },

  captureTransformHistoryErrors: function(transform_history) {
      var importLogGR = new GlideRecord("import_log");
      importLogGR.addQuery("run_history", transform_history.getUniqueValue());
      importLogGR.addQuery("level", "IN", "1,2");
      importLogGR.addQuery("sys_created_on", ">=", transform_history.getValue("sys_created_on"));
      importLogGR.setLimit(10);
      importLogGR.query();
      if (!importLogGR.hasNext())
          return;

      var grExecution = new GlideRecord('sn_cmdb_int_util_cmdb_integration_execution_import_set');
      grExecution.addQuery('import_set', transform_history.set);
      grExecution.orderByDesc('sys_created_on');
      grExecution.setLimit(1);
      grExecution.query();
      if (!grExecution.next())
          return;

      while (importLogGR.next())
          this.createExecutionErrorRecord(grExecution, importLogGR.message, 'datasource');
  },

  type: 'CMDBIntegrationErrorParser'
};

Sys ID

4962b9e673320010011e3e2dfef6a787

Offical Documentation

Official Docs: