Name
sn_cmdb_int_util.CMDBIntegrationExecutionRollup
Description
No description available
Script
var CMDBIntegrationExecutionRollup = Class.create();
CMDBIntegrationExecutionRollup.prototype = {
initialize: function() {},
rollupStateToExecution: function(executionId) {
var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
execution.get(executionId);
var sums = new GlideAggregate('sn_cmdb_int_util_cmdb_integration_execution_import_set');
sums.addQuery("cmdb_integration_execution", executionId);
sums.groupBy("cmdb_integration_execution");
sums.addAggregate("SUM", "rows");
sums.addAggregate("SUM", "inserts");
sums.addAggregate("SUM", "row_updates");
sums.addAggregate("SUM", "ignored");
sums.addAggregate("SUM", "skipped");
sums.addAggregate("SUM", "errors");
sums.addAggregate("SUM", "partial_payload_start");
sums.addAggregate("SUM", "partial_payload_end");
sums.addAggregate("SUM", "incomplete_payload_start");
sums.addAggregate("SUM", "incomplete_payload_end");
sums.addAggregate("MIN", "import_start_time");
sums.addAggregate("MIN", "transform_start_time");
sums.addAggregate("MIN", "import_end_time");
sums.addAggregate("MAX", "import_end_time");
sums.addAggregate("MIN", "transform_end_time");
sums.addAggregate("MAX", "transform_end_time");
sums.query();
if (sums.next()) {
var rows = sums.getAggregate("SUM", "rows");
var start_time = sums.getAggregate("min", "import_start_time");
var end_time;
var duration = 0;
var rate = 0;
execution.setValue("rows", sums.getAggregate("SUM", "rows"));
execution.setValue("inserts", sums.getAggregate("SUM", "inserts"));
execution.setValue("row_updates", sums.getAggregate("SUM", "row_updates"));
execution.setValue("ignored", sums.getAggregate("SUM", "ignored"));
execution.setValue("skipped", sums.getAggregate("SUM", "skipped"));
execution.setValue("errors", sums.getAggregate("SUM", "errors"));
execution.setValue("partial_payload_start", sums.getAggregate("SUM", "partial_payload_start"));
execution.setValue("partial_payload_end", sums.getAggregate("SUM", "partial_payload_end"));
execution.setValue("incomplete_payload_start", sums.getAggregate("SUM", "incomplete_payload_start"));
execution.setValue("incomplete_payload_end", sums.getAggregate("SUM", "incomplete_payload_end"));
execution.setValue("import_start_time", start_time);
execution.setValue("transform_start_time", sums.getAggregate("min", "transform_start_time"));
if (gs.nil(sums.getAggregate("min", "import_end_time"))) {
execution.setValue("import_end_time", "NULL");
} else {
// set import end time and update the duration of the import progress so far
var import_end_time = sums.getAggregate("max", "import_end_time");
execution.setValue("import_end_time", import_end_time);
duration = this._getDuration(start_time, import_end_time);
execution.setValue('duration', duration);
}
if (gs.nil(sums.getAggregate("min", "transform_end_time"))) {
execution.setValue("transform_end_time", "NULL");
} else {
end_time = sums.getAggregate("max", "transform_end_time");
execution.setValue("transform_end_time", end_time);
execution.setValue("end_time", end_time);
// set a final duration and rate
duration = this._getDuration(start_time, end_time);
execution.setValue('duration', duration);
rate = this._getImportRate(rows, duration);
execution.setValue("insert_rate", rate);
}
}
var state = this._getExecutionState(executionId);
var mostRecentError = this.getMostRecentError(executionId);
execution.setValue("most_recent_error",mostRecentError);
execution.setValue("state", state);
execution.update();
},
getMostRecentError: function(executionId){
var gr = new GlideRecord('sn_cmdb_int_util_cmdb_integration_execution_import_set');
gr.addQuery("cmdb_integration_execution", executionId);
gr.addNotNullQuery("most_recent_error");
gr.orderByDesc("sys_created_on");
gr.setLimit(1);
gr.query();
var mostRecentError = "";
if (gr.next()){
mostRecentError = gr.getValue("most_recent_error");
}
return mostRecentError;
},
updateIRECountsFromAudit: function(executionId){
var execution = new GlideRecord("sn_cmdb_int_util_cmdb_integration_execution");
execution.get(executionId);
execution.setValue("ire_unchanged", 0);
execution.setValue("ire_partial", 0);
execution.setValue("ire_inserted", 0);
execution.setValue("ire_updated", 0);
var sums = new GlideAggregate('sn_cmdb_int_util_cmdb_integration_execution_audit');
sums.addQuery("cmdb_integration_execution_import_set.cmdb_integration_execution", executionId);
sums.addAggregate("SUM", "count");
sums.groupBy("operation");
sums.query();
while (sums.next()) {
if ("unchanged" == sums.getValue("operation")) {
execution.setValue("ire_unchanged", sums.getAggregate("SUM", "count"));
} else if ("partial" == sums.getValue("operation")) {
execution.setValue("ire_partial", sums.getAggregate("SUM", "count"));
} else if ("inserted" == sums.getValue("operation")) {
execution.setValue("ire_inserted", sums.getAggregate("SUM", "count"));
} else if ("updated" == sums.getValue("operation")) {
execution.setValue("ire_updated", sums.getAggregate("SUM", "count"));
}
}
execution.update();
},
_getExecutionState: function(executionId) {
var states = [];
gr = new GlideAggregate('sn_cmdb_int_util_cmdb_integration_execution_import_set');
gr.addQuery("cmdb_integration_execution", executionId);
gr.addAggregate('count', 'state');
gr.query();
var state = '';
while (gr.next()) {
state = gr.getValue("state");
cnt = gr.getAggregate("count", "state");
states.push(state);
}
var size = states.length;
if ("error" in states) {
state = "error";
} else if ("transforming" in states) {
state = "transforming";
} else if ("loading" in states) {
state = "loading";
} else if ("loaded" in states && size == 1) {
state = "loaded";
} else if ("complete" in states && size == 1) {
state = "complete";
}
return state;
},
_getDuration: function(start_time, end_time) {
var start_time_dt = new GlideDateTime(start_time);
var end_time_dt = new GlideDateTime(end_time);
return GlideDateTime.subtract(start_time_dt, end_time_dt);
},
_getImportRate: function(rows, duration){
return (rows / duration.getNumericValue()) * 3600 * 1000; // rows per hour
},
type: 'CMDBIntegrationExecutionRollup'
};
Sys ID
5f1239e673320010011e3e2dfef6a70f