Name

sn_cmdb_int_util.CMDBIntegrationExecutionUtil

Description

No description available

Script

var CMDBIntegrationExecutionUtil = Class.create();
CMDBIntegrationExecutionUtil.prototype = {
  initialize: function() {
      this.IMPORT_SET_RUN_ERROR_STATES = ["complete_with_errors", "incomplete"];
  },
  
  isTableCmdb: function(tableName) {
  	if (gs.nil(tableName))
  		return false;

  	if (tableName == 'cmdb' || tableName == 'cmdb_ci')
  		return true;

  	var gr = new GlideRecord('sys_db_object');
  	gr.addQuery("name", tableName);
  	gr.query();
  	if (!gr.next())
  		return false;

  	return this._isTableCmdbBySysId(gr.getValue('super_class'));
  },
  
  _isTableCmdbBySysId: function(tableSysId) {
  	if (gs.nil(tableSysId))
  		return false;

  	var gr = new GlideRecord('sys_db_object');
  	gr.addQuery("sys_id", tableSysId);
  	gr.query();
  	if (!gr.next())
  		return false;
  	
  	var tableName = gr.getValue("name");
  	
  	if (tableName == 'cmdb' || tableName == 'cmdb_ci')
  		return true;
  	
  	return this._isTableCmdbBySysId(gr.getValue('super_class'));
  },

  isConcurrentImportSetForCMDBRTE: function(concurrentImportSet) {
      var tableName = "" + concurrentImportSet.data_source.import_set_table_name;
      var result = this.tableHasCMDBRTE(tableName);
      return result;
  },

  tableHasCMDBRTE: function(tableName) {
      var gr = new GlideRecord("sys_robust_import_set_transformer");
      gr.addActiveQuery();
      gr.addQuery("source_table", tableName);
      gr.addQuery("robust_transform_engine.sys_class_name", "cmdb_inst_application_feed");
      gr.setLimit(1);
      gr.query();
      return gr.hasNext();
  },

  isImportSetForCMDBRTE: function(sysImportSet) {
      var tableName = "" + sysImportSet.table_name;
      var result = this.tableHasCMDBRTE(tableName);
      return result;
  },

  concurrentImportSetCreation: function(concurrentImportSet, executionId) {
      var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
      execution.get(executionId);
      execution.setValue("concurrent_import_set", concurrentImportSet.sys_id);
      execution.setValue("start_time", new GlideDateTime());
      execution.setValue("scheduled_import", concurrentImportSet.scheduled_import);
      var tableName = "" + concurrentImportSet.data_source.import_set_table_name;
      this.setIntegrationOnExecution(tableName, execution);
      execution.update();
  },

  scheduledJobExecutionContextCreation: function(scheduledJobExecutionContext) {
      var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
      execution.initialize();
      execution.setValue("start_time", new GlideDateTime());
      execution.setValue("scheduled_import", scheduledJobExecutionContext.parent_import);
      execution.setValue("sys_execution_context", scheduledJobExecutionContext.sys_id);
      var tableName = "" + scheduledJobExecutionContext.parent_import.data_source.import_set_table_name;
      this.setIntegrationOnExecution(tableName, execution);
      return execution.insert();
      // result is new execution record and an integration reference
  },

  setIntegrationOnExecution: function(tableName, execution) {
      var rte = new GlideRecord("sys_robust_import_set_transformer");
      rte.addActiveQuery();
      rte.addQuery("source_table", tableName);
      rte.addQuery("robust_transform_engine.sys_class_name", "cmdb_inst_application_feed");
      rte.setLimit(1);
      rte.query();
      if (rte.next()) {
          execution.setValue("integration", rte.getValue("sys_id"));
          var gr2 = new GlideRecord("cmdb_inst_application_feed");
          if (gr2.get(rte.getValue("robust_transform_engine"))) {
              execution.setValue("application", gr2.getValue("cmdb_inst_application"));
              execution.setValue("verbose", rte.getValue("verbose"));
          } else {
              gs.error("Unable to find cmdb_inst_application_feed");
          }
      }
  },

  sysImportSetCreation: function(sysImportSet, executionId) {
      var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
      execution.get(executionId);
      execution.setValue("import_set", sysImportSet.sys_id);
      execution.setValue("start_time", new GlideDateTime());
  	var tableName = "" + sysImportSet.table_name;
      this.setIntegrationOnExecution(tableName, execution);
      execution.update();

      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.initialize();
      executionIs.setValue("cmdb_integration_execution", execution.sys_id);
      executionIs.setValue("import_set", sysImportSet.sys_id);
      executionIs.setValue("start_time", new GlideDateTime());
      executionIs.setValue("import_start_time", new GlideDateTime());

      executionIs.insert();
  },

  sysImportSetMadeConcurrent: function(sysImportSet) {

      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.addQuery("import_set", sysImportSet.sys_id);
      executionIs.setLimit(1);
      executionIs.query();
      if (executionIs.next()) {
          var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
          execution.addQuery("concurrent_import_set", sysImportSet.getValue("concurrent_import_set"));
          execution.setLimit(1);
          execution.query();
          if (execution.next()) {
              executionIs.setValue("cmdb_integration_execution", execution.sys_id);
              executionIs.update();

              var executionToDelete = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
              executionToDelete.addQuery("import_set", sysImportSet.sys_id);
              executionToDelete.addNullQuery("concurrent_import_set");
              executionToDelete.setLimit(1);
              executionToDelete.query();
              if (executionToDelete.next()) {
                  executionToDelete.deleteRecord();
              }
          }
      } else {
          gs.info("Unable to find execution for importset " + sysImportSet.number);
      }
  },

  sysImportSetStateChange: function(sysImportSet) {
      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.addQuery("import_set", sysImportSet.sys_id);
      executionIs.setLimit(1);
      executionIs.query();
      if (!executionIs.next()) {
          gs.info("No execution found for " + sysImportSet.number);
          return;
      }
      if ("loading" == sysImportSet.getValue("state")) {
          executionIs.setValue("import_start_time", new GlideDateTime());
          executionIs.setValue("state", "loading");
          executionIs.update();
      } else if ("loaded" == sysImportSet.getValue("state")) {

          //Set the row count.
          var count = new GlideAggregate(sysImportSet.table_name);
          count.addQuery("sys_import_set", sysImportSet.sys_id);
          count.addAggregate('COUNT');
          count.query();
          if (count.next())
              executionIs.setValue("rows", count.getAggregate('COUNT'));

          executionIs.setValue("import_end_time", new GlideDateTime());
          executionIs.setValue("state", "loaded");
          executionIs.update();
      }
      //Error handling?
  },

  _getPartialPayloadsCount: function() {
      var gr = new GlideAggregate("cmdb_ire_partial_payloads");
      gr.addQuery("active", true);
      gr.addAggregate("COUNT");
      gr.query();
      var count = 0;
      if (gr.next())
          count = gr.getAggregate("COUNT");

      return count;
  },

  _getIncompletePayloadsCount: function() {
      var gr = new GlideAggregate("cmdb_ire_incomplete_payloads");
      gr.addAggregate("COUNT");
      gr.query();
      var count = 0;
      if (gr.next())
          count = gr.getAggregate("COUNT");

      return count;
  },

  sysImportSetRunStarted: function(sysImportSetRun) {

      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.addQuery("import_set", sysImportSetRun.set.sys_id);
      executionIs.setLimit(1);
      executionIs.query();
      if (!executionIs.next()) {
          gs.info("No execution found for import set run " + sysImportSetRun.number);
          return;
      }

      executionIs.setValue("transform_history", "" + sysImportSetRun.sys_id);
      executionIs.setValue("transform_start_time", new GlideDateTime());
      executionIs.setValue("partial_payload_start", this._getPartialPayloadsCount());
      executionIs.setValue("incomplete_payload_start", this._getIncompletePayloadsCount());
      executionIs.setValue("state", "transforming");

      executionIs.update();
      //Error handling?
  },

  setMostRecentError: function(importSet) {
      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.addQuery("import_set", importSet);
      executionIs.query();
      if (!executionIs.next())
          return;

      var executionError = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_error");
      executionError.addQuery("cmdb_integration_execution_import_set", executionIs.sys_id);
      executionError.orderByDesc("sys_created_on");
      executionError.setLimit(1);
      executionError.query();
      var msg = "";
      if (!executionError.next())
          return;

      msg = executionError.getValue("error_message");
      executionIs.setValue("most_recent_error", msg);
      executionIs.update();
  },

  sysImportSetRunCompleted: function(sysImportSetRun) {

      var executionIs = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution_import_set");
      executionIs.addQuery("import_set", sysImportSetRun.set.sys_id);
      executionIs.setLimit(1);
      executionIs.query();
      if (!executionIs.next()) {
          gs.info("No execution found for import set run " + sysImportSetRun.number);
          return;
      }

      executionIs.setValue("inserts", sysImportSetRun.getValue("inserts"));
      executionIs.setValue("row_updates", sysImportSetRun.getValue("updates"));
      executionIs.setValue("ignored", sysImportSetRun.getValue("ignored"));
      executionIs.setValue("skipped", sysImportSetRun.getValue("skipped"));
      executionIs.setValue("errors", sysImportSetRun.getValue("errors"));
      executionIs.setValue("partial_payload_end", this._getPartialPayloadsCount());
      executionIs.setValue("incomplete_payload_end", this._getIncompletePayloadsCount());

      executionIs.setValue("transform_end_time", new GlideDateTime());
      executionIs.setValue("end_time", new GlideDateTime());

      var state = sysImportSetRun.getValue("state");
      if (this.IMPORT_SET_RUN_ERROR_STATES.indexOf(state) >= 0)
          executionIs.setValue("state", "error");
      else
          executionIs.setValue("state", "complete");

      executionIs.update();
  },

  type: 'CMDBIntegrationExecutionUtil'
};

Sys ID

434171e673320010011e3e2dfef6a7ee

Offical Documentation

Official Docs: