Name

global.InstanceCloneValidatorAjax

Description

Instance Clone Validator for validating some Preflight Rules Check for Clone

Script

var InstanceCloneValidatorAjax = Class.create();
InstanceCloneValidatorAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  /**
  * @param : sysparm_clone_sys_id -  SysID - String
  * @return : String
  **/
  executeValidationRules : function() {
  	var response = {};
  	var cloneProfileSysId = this.getParameter('sysparm_clone_profile_sys_id');
  	var errMsg = SystemCloneUtil.validateCloneRequest(cloneProfileSysId);
  	if(!gs.nil(errMsg)) {
  		response.type = 'error';
  		response.message = errMsg;
  	} else {
  		var cloneHistorySysId = this.getParameter('sysparm_clone_sys_id');
  		if (gs.nil(cloneHistorySysId)) 
  			return ;

  		var cloneGr = new GlideRecord("clone_instance");
  		if (!cloneGr.get(cloneHistorySysId)) 
  			return ;
  		
  		var validationRules = cloneGr.getValue('clone_request_validation_rules');
  		if (gs.nil(validationRules)) 
  			return ;

  		validationRules = new JSON().decode(validationRules);
  		if (!gs.nil(validationRules.preflightCheck)) {
  			var preflightChecksResponse = this.executePreflightChecks(validationRules.preflightCheck);
  			if (!gs.nil(preflightChecksResponse)) 
  				response = preflightChecksResponse;
  		}

  		if (!gs.nil(validationRules.preflightErrors)) {
  			var preflightErrors = validationRules.preflightErrors;
  			var preflightErrorMsg = '';
  			for(var key in preflightErrors)
  				if(preflightErrors.hasOwnProperty(key))
  					preflightErrorMsg = preflightErrorMsg.concat(preflightErrors[key] + ";");

  			if(!gs.nil(preflightErrorMsg)) {
  				response.type = 'error';
  				response.message = preflightErrorMsg;
  			}
  		}
  	}

  	var encodedResponseString = new JSON().encode(response);
  	return encodedResponseString;
  },

  /**
  * @arg : preflightCheckObj -  JSON Object
  * @return : response - JSON Object
  **/

  executePreflightChecks : function(preflightCheckObj) {
  	var response = {};
  	if (gs.nil(preflightCheckObj.exclusionTablesBlacklistRules))
  		return;

  	var exclusionTablesBlacklistRules = preflightCheckObj.exclusionTablesBlacklistRules;
  	if (gs.nil(exclusionTablesBlacklistRules.tables))
  		return;

  	var excludeTablesBlackList = exclusionTablesBlacklistRules.tables;
  	var excludeListGr = new GlideRecord("clone_data_exclude");
  	excludeListGr.addQuery('name', 'IN', excludeTablesBlackList);
  	excludeListGr.query();
  	if (excludeListGr.next()) {
  		response.type = exclusionTablesBlacklistRules.type;
  		response.message = exclusionTablesBlacklistRules.message;
  	}
  	return response; 

  },

  /**
  * @arg : sysparm_clone_sys_id -  SysID - String
  * @return : response JSON object
  **/
  executeLargePreserverValidation: function() {
  	var cloneHistorySysId = this.getParameter('sysparm_clone_sys_id');
  	if (gs.nil(cloneHistorySysId))
  		return;
  	var response = {};
  	var cloneGr = new GlideRecord("clone_instance");
  	if (!cloneGr.get(cloneHistorySysId))
  		return;
  	var largeTablesList = "";
  	var excessCloneTime = 0;
  	var reasonsForLargePreserver = [];
  	var largeTablesInPreserver = this.checkForLargeTablesInPreserver(cloneGr);
  	reasonsForLargePreserver = this.getReasonsForLargePreserver(cloneGr);
  	if (!gs.nil(largeTablesInPreserver)) {
  		for (var table in largeTablesInPreserver) {
  			largeTablesList += table;
  			largeTablesList += ", ";
  			excessCloneTime += largeTablesInPreserver[table];
  		}
  		largeTablesList = largeTablesList.substring(0, largeTablesList.length - 2);
  	}
  	response.reasonsForLargePreserver = reasonsForLargePreserver;
  	response.largeTablesList = largeTablesList;
  	if(excessCloneTime == 0){
  		response.warningMessage = gs.getMessage("clone.large.preserver.warning.tables",[largeTablesList]);
  	}
  	else{
  		var warningMessage = gs.getMessage("clone.large.preserver.warning.tables",[largeTablesList]);
  		response.warningMessage = gs.getMessage("{0} by {1} minutes.",[warningMessage,excessCloneTime]);
  	}
  	
  	var encodedResponseString = new JSON().encode(response);
  	return encodedResponseString;
  	
  },

  getReasonsForLargePreserver: function(cloneGr) {
  	var cloudDetails = cloneGr.getValue("cloud_details");
  	cloudDetails = new JSON().decode(cloudDetails);
  	var reasonsForLargePreserver = cloudDetails.reasonsForLargePreserver;
  	return reasonsForLargePreserver;
  },
  
  checkForLargeTablesInPreserver: function(cloneGr) {
  	var tableName,preserverGr,useCloneProfile;
  	var largeTablesInPreserver = {};
  	var cloudDetails = cloneGr.getValue("cloud_details");
  	cloudDetails = new JSON().decode(cloudDetails);
  	var largeTablesList = cloudDetails.largeTablesList;
  	var cloneProfile = cloneGr.getValue("profile");
  	if(gs.nil(cloneProfile))
  		useCloneProfile = false;
  	else
  		useCloneProfile = true;
  	if(useCloneProfile) {
  		preserverGr = new GlideRecord("clone_profile_preservers");
  		preserverGr.addQuery('profile', cloneProfile);
  		preserverGr.query();
  		while (preserverGr.next()) {
  			tableName = preserverGr.preserver.table;
  			if(largeTablesList.hasOwnProperty(tableName) && !(largeTablesInPreserver.hasOwnProperty(tableName)))
  				largeTablesInPreserver[tableName] = largeTablesList[tableName];
  		}
  	} else {
  		preserverGr = new GlideRecord("clone_data_preserver");
  		preserverGr.query();
  		while(preserverGr.next()) {
  			tableName = preserverGr.getValue("table");
  			if(largeTablesList.hasOwnProperty(tableName) && !(largeTablesInPreserver.hasOwnProperty(tableName)))
  				largeTablesInPreserver[tableName] = largeTablesList[tableName];
  		}
  	}
  	return largeTablesInPreserver;
  },
  type: 'InstanceCloneValidatorAjax'
});

Sys ID

79c22376db100300081f92c8f0b8f5a5

Offical Documentation

Official Docs: