Name

sn_itom_integ_app.pullConnectorHandler

Description

No description available

Script

var pullConnectorHandler = Class.create();
pullConnectorHandler.prototype = {
  initialize: function() {
  },
  
  saveConnectorInstance: function(connectorValues, connectorDynamicValues, shouldActivate, shouldTest){
  	if (!connectorValues)
  		return {success: false, error: {message: gs.getMessage('Instance data is empty')}};
  	
  	var dataValidation = this.validateConnectorData(connectorValues, connectorDynamicValues);
  	if (!dataValidation.isValid){
  		return {success: false, error: {message: dataValidation.errorMessage, errorsArr: dataValidation.errorsArr}};
  	}
  		
  	var grConnectorInstance = new GlideRecord('em_connector_instance');
  	
  	if(grConnectorInstance.get('name', connectorValues.name)){
  		if (!connectorValues.sysId || connectorValues.sysId != grConnectorInstance.sys_id){
  			return {success: false, error: {message: gs.getMessage('Instance name is already exist')}};
  		}
  	}
  	
  	var result = connectorValues.sysId 
  		? this.updateConnectorInstance(grConnectorInstance, connectorValues) 
  		: this.createConnectorInstance(grConnectorInstance, connectorValues);
  	if (!result.success)
  		return result;
  	
  	var instanceDetailsHandler = new connectorInstanceDetailsHandler();
  	instanceDetailsHandler.updateInstanceDetails(result.data.sys_id, connectorValues);		
  	
  	result.data.mid_server = this.updateMidServer(connectorValues.mid_server, result.data.sys_id);
  	result.data.connectorDynamicValues = this.updateConnectorInstanceValues(connectorDynamicValues, result.data.sys_id);
  	
  	if (shouldTest || shouldActivate){
  		var testResult = this.testConnector(result.data.sys_id);
  		if (!testResult.success)
  			return testResult;
  		if (shouldActivate) {
  			grConnectorInstance.active = true;
  			grConnectorInstance.update();
  		}
  		result.testResult = testResult.data;	
  	}
  	
  	return result;
  },
  
  updateConnectorInstance: function(gr, connectorValues){
  	if(!gr.get(connectorValues.sysId)){
  		return {success: false, error: {message: gs.getMessage('cannot find sysId of updated instance')}};
  	}
  	delete connectorValues.sysId;
  	delete connectorValues.sys_id;
  	Object.keys(connectorValues).forEach(function(x){gr[x] = connectorValues[x];});
  	var sysId = gr.update();
  	return sysId 
  		? {success: true, data: {sys_id: sysId}}
  		: {success: false, error: {message: gs.getMessage('Update failed')}};
  },
  
  createConnectorInstance: function(gr, connectorValues) {
  	gr.newRecord();
  	Object.keys(connectorValues).forEach(function(x){gr[x] = connectorValues[x];});
  	var sysId = gr.insert();
  	return sysId 
  		? {success: true, data: {sys_id: sysId}}
  		: {success: false, error: {message: gs.getMessage('Insert failed')}};
  },
  
  updateMidServer: function(midServer, sysId){
  	if (!midServer)
  		return null;
  	var midServerIdArr = midServer.map(function(mid){return mid.id;});
  	var gr = new GlideRecord('em_connector_instance_to_mid');
  	gr.addQuery('connector', sysId);
  	gr.query();
  	while(gr.next()){
  		if (midServerIdArr.indexOf(gr.mid_server) == -1)
  			gr.deleteRecord();
  	}

  	midServerIdArr.forEach(function(mid){
  		var gr = new GlideRecord('em_connector_instance_to_mid');
  		gr.addQuery('connector', sysId);
  		gr.addQuery('mid_server', mid);
  		gr.query();
  		if(!gr.next()){
  			gr.newRecord();
  			gr.mid_server = mid;
  			gr.connector = sysId;
  			gr.insert();
  		}}
  	);
  	return midServerIdArr;
  },
  
  updateConnectorInstanceValues: function(connectorDynamicValues, sysId){
  	var updatedValues = [];
  	connectorDynamicValues && Object.keys(connectorDynamicValues || {}).forEach(function(x){
  		var gr = new GlideRecord('em_connector_instance_value');	
  		gr.addQuery('connector_instance', sysId);
  		gr.addQuery('name', x);
  		gr.query();
  		if (gr.next()){
  			gr.value = connectorDynamicValues[x];
  			updatedValues.push(gr.update());
  		}
  	});
  	return updatedValues;
  },
  
  activateConnector: function(sysId){
  	var testResult = this.testConnector(sysId);
  	if (!testResult.success)
  		return testResult;
  	var gr = new GlideRecord('em_connector_instance');
  	if (sysId && gr.get(sysId)){
  		gr.active = true;
  		var updateSuccess = gr.update();
  		return updateSuccess
  		? {success: true, data: {sys_id: sysId}}
  		: {success: false, error: {message: gs.getMessage('Activation failed')}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  deactivateConnector: function(sysId){
  	var gr = new GlideRecord('em_connector_instance');
  	if (sysId && gr.get(sysId)){
  		if (!gr.active)
  			return {success: true, data: {sys_id: sysId}};
  		gr.active = false;
  		var updateSuccess = gr.update();
  		return updateSuccess
  		? {success: true, data: {sys_id: sysId}}
  		: {success: false, error: {message: gs.getMessage('Deactivation failed')}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  deleteConnector: function(sysId){
  	var gr = new GlideRecord('em_connector_instance');
  	if (sysId && gr.get(sysId)){
  		var deleteSuccess = gr.deleteRecord();
  		return deleteSuccess
  		? {success: true}
  		: {success: false, error: {message: gs.getMessage('Delete failed')}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  testConnector: function(sysId){
      var connectorTestExecutor = new sn_em_connector.ConnectorTestExecutor();
      var connectorTestResult = connectorTestExecutor.execute(sysId);
      connectorTestResult.sys_id = sysId;
      if (connectorTestResult && connectorTestResult.status == 'success')
  		return {success: true, data: connectorTestResult};
  	this.deactivateConnector(sysId);
  	return {success: false, error: connectorTestResult};
  },
  
  validateConnectorData: function(connectorValues, connectorDynamicValues){
  	var formValidatorFields = ['name', 'host', 'credential'];
  	var errorsList = [];
  	formValidatorFields.forEach(function(field){
  		if (!connectorValues[field] || !connectorValues[field].trim().length) {
  			errorsList.push({fieldName: field, errorMessage: 'field cannot be empty'});
  		}
  	});
  	
  	if (connectorValues.connector_definition == '38996c33c332210039a3553a81d3aeab') {
  		var supportedScomVersions = ['2019','2016', '2012', '2007'];
  		if (!connectorDynamicValues.scom_version || !connectorDynamicValues.scom_version.trim().length){
  			errorsList.push({fieldName: 'scom_version', errorMessage: 'field cannot be empty'});
  		} else if (supportedScomVersions.indexOf(connectorDynamicValues.scom_version) == -1){
  			errorsList.push({fieldName: 'scom_version', errorMessage: 'scom version not supported'});  
  		}
  	}
  	
  	if (connectorValues.connector_definition == '83baa9311b973018e71a5240604bcb3b') {
  		if (!connectorDynamicValues.port || !connectorDynamicValues.port.trim().length){
  			errorsList.push({fieldName: 'port', errorMessage: 'field cannot be empty'});
  		}
  	}
  	
  	var errorMessage = '';
  	errorsList.forEach(function(error){
  		errorMessage += errorMessage.length ? ', ' : '';
  		errorMessage += error.fieldName + ' - ' + error.errorMessage;
  	});
  	
  	
  	return {isValid: !errorsList.length, errorsArr: errorsList, errorMessage: errorMessage};
  },

  type: 'pullConnectorHandler'
};

Sys ID

c2ef6810735ca110feb4989d9f148b13

Offical Documentation

Official Docs: