Name
global.CiDeleter
Description
No description available
Script
var CiDeleter = Class.create();
CiDeleter.createConnection = function(parentTable, childTable, referenceField){
return {
"parentTable": parentTable,
"childTable" : childTable,
"referenceField" : referenceField
};
},
CiDeleter.prototype = {
initializeMainCiSysId: function () {
this.mainCiSysId = g_device.getCmdbCi();
},
initializeConfiguration: function(ciModelConfiguration){
this.ciModel = ciModelConfiguration.modelConnections;
this.mainCiType = ciModelConfiguration.mainCiType;
},
initialize: function (ciModelConfiguration) {
if (!ciModelConfiguration) {
return;
}
this.initializeMainCiSysId();
this.initializeConfiguration(ciModelConfiguration);
this.ciDeleterCounter = 0;
},
isMainCi: function (ci) {
return ci.sysId == this.mainCiSysId;
},
doesSysIdExistInPayload: function (sysIdToCheck, sysIdsOfParentType) {
return (sysIdsOfParentType.indexOf(sysIdToCheck) > -1);
},
getExistingSysIds: function (valuesToSearch, parentTable, referenceField) {
var existingSysIds = [];
var glideRecord = new GlideRecord(parentTable);
glideRecord.addQuery(referenceField, 'IN', valuesToSearch);
glideRecord.query();
while (glideRecord.next()) {
existingSysIds.push(glideRecord.getValue("sys_id"));
}
return existingSysIds;
},
deleteRecords: function (sysIdsToDelete, tableToDeleteFrom) {
var glideRecord = new GlideRecord(tableToDeleteFrom);
glideRecord.addQuery("sys_id", 'IN', sysIdsToDelete);
glideRecord.query();
glideRecord.deleteMultiple();
},
findSysIdsToDelete: function (valuesToSearch, parentTable, childTable, referenceField, sysIdsOfParentType) {
var sysIdsToDelete = [];
var existingSysIdsInDb = this.getExistingSysIds(valuesToSearch, parentTable, referenceField);
if (existingSysIdsInDb) {
for (var index in existingSysIdsInDb) {
if (!this.doesSysIdExistInPayload(existingSysIdsInDb[index], sysIdsOfParentType)) {
sysIdsToDelete.push(existingSysIdsInDb[index]);
}
}
}
this.ciDeleterCounter += sysIdsToDelete.length;
return sysIdsToDelete;
},
getSysIdsToDelete: function (sysIdsByCiType) {
var sysIdsToDeleteByType = {};
var sysIdsToDelete;
for (var index in this.ciModel) {
if(!sysIdsToDeleteByType[this.ciModel[index].parentTable]){
sysIdsToDeleteByType[this.ciModel[index].parentTable] = [];
}
sysIdsToDelete = this.findSysIdsToDelete(
sysIdsByCiType[this.ciModel[index].childTable] || [],
this.ciModel[index].parentTable,
this.ciModel[index].childTable,
this.ciModel[index].referenceField,
sysIdsByCiType[this.ciModel[index].parentTable] || []
);
sysIdsToDeleteByType[this.ciModel[index].parentTable] =
sysIdsToDeleteByType[this.ciModel[index].parentTable].concat(sysIdsToDelete);
}
return sysIdsToDeleteByType;
},
sortPaylodByClassType: function (payloadFromIE) {
var traveredCiItem;
var cisByTypeHashmap = {};
for (var index in payloadFromIE) {
traveredCiItem = payloadFromIE[index];
if(traveredCiItem.className){
if (this.isMainCi(traveredCiItem)) {
traveredCiItem.className = this.mainCiType;
}
if (!cisByTypeHashmap[traveredCiItem.className]) {
cisByTypeHashmap[traveredCiItem.className] = [];
}
cisByTypeHashmap[traveredCiItem.className].push(traveredCiItem.sysId);
}
}
return cisByTypeHashmap;
},
deleteUnusedCis: function(sysIdsToDeleteByType){
for(var tableName in sysIdsToDeleteByType){
this.deleteRecords(sysIdsToDeleteByType[tableName] ,tableName);
}
},
compareAndDeleteUnusedCisFromDB: function (payloadFromIE) {
var sysIdsByCiType, sysIdsToDeleteByType;
sysIdsByCiType = this.sortPaylodByClassType(payloadFromIE);
sysIdsToDeleteByType = this.getSysIdsToDelete(sysIdsByCiType);
if (this.ciDeleterCounter > 0) {
DiscoveryLogger.info("Old Ci's number deleted: " + this.ciDeleterCounter, 'CiDeleter' ,this.getEccQueueId(), null);
}
this.deleteUnusedCis(sysIdsToDeleteByType);
},
type: 'CiDeleter'
};
Sys ID
2312deb0dbb4a200d8c976231f96198c