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