Name

sn_itom_integ_app.customConnectorHandler

Description

No description available

Script

var customConnectorHandler = Class.create();
customConnectorHandler.prototype = {
  initialize: function() {
  	this.apiHandler = new sn_em_connector.CustomConnectorUtil();
  	this.imagesHandler = global.integrationsLaunchpadImageHandler && new global.integrationsLaunchpadImageHandler();
  	this.mappingHandler = new sn_em_connector.CustomConnectorMappingUtils();
  	this.severityConst = 'severity_for_all_events/';
  	this.defaultImageSysIdConst = '2cf1592a532121109472ddeeff7b12a2';
  },
  
  createImage: function(){
  	return this.imagesHandler 
  		? this.imagesHandler.createImage() 
  		: {success: false, error: {message: gs.getMessages('Something went wrong, check for valid imageHandler')}};
  },
  
  updateImage: function(image, record_sys_id){
  	return this.imagesHandler 
  		? this.imagesHandler.updateImage(image, record_sys_id) 
  		: {success: false, error: {message: gs.getMessages('Something went wrong, check for valid imageHandler')}}; 
  },
  
  updateConnectorImage: function(connector_sys_id, image_sys_id){
  	if (!connector_sys_id) 
  		return {success: false, error: {message: gs.getMessages('Connector sys_id cannot be empty')}};
  	var grInstance = new GlideRecord('sn_em_connector_push_instance');
  	grInstance.get(connector_sys_id);
  	if (grInstance.isValidRecord()){
  		var definition_sys_id = grInstance.getValue('push_connector_definition');			
  		var gr_hobDefinition = new GlideRecord('sn_em_ai_hob_definition_details');
  		gr_hobDefinition.get('reference_id', definition_sys_id);
  		if (gr_hobDefinition.isValidRecord()){
  			gr_hobDefinition.setValue('image', image_sys_id || this.defaultImageSysIdConst);
  			gr_hobDefinition.update();
  			return {success: true};
  		}
  		return {success: false, error: {message: gs.getMessages('Cannot find definition sys_id')}};
  	}
  	return {success: false, error: {message: gs.getMessages('Cannot find connector sys_id')}};
  },
  
  shouldSaveMapping: function(step, mappingData){
  	if (step > 1) return true;
  	if (mappingData 
  		&& mappingData.definitionSysId 
  		&& mappingData.severityMap
  		&& (mappingData.jsonPayload 
  			|| Object.keys(mappingData.jsonMapping).length 
  			|| Object.keys(mappingData.timeOfEventMap).length
  			|| Object.keys(mappingData.severityMap).some(function(key){return mappingData.severityMap[key];})))
  		return true;
  	return false;
  },
  
  saveConnector: function(connectorValues, shouldActivateConnector, mappingData, step){
  	var sysId = connectorValues.sysId;
  	var retData = {};
  	connectorValues.event_source_label = connectorValues.source;
  	connectorValues.type = connectorValues.type || '10';
  	if (connectorValues.type == '11' && !connectorValues.mid_server)
  		return {success: false, error: {message: gs.getMessage('Mid Server not selected')}};
  	connectorValues.image_sys_id = connectorValues.image_sys_id == '-1'
  		? this.defaultImageSysIdConst
  		: connectorValues.image_sys_id;
  	var grInstance = new GlideRecord('sn_em_connector_push_instance');
  	if(grInstance.get('name', connectorValues.name)){
  		if (!sysId || sysId != grInstance.sys_id){
  			return {success: false, error: {message: gs.getMessage('Instance name is already exist')}};
  		}
  	}
  	var grDefinition = new GlideRecord('sn_em_connector_listener');
  	if (sysId){
  		grInstance.get(sysId);
  		if (grInstance.isValidRecord()){
  			var definition_sysId = grInstance.getValue('push_connector_definition');
  			if(grDefinition.get('event_source_label', connectorValues.event_source_label)){
                  if (definition_sysId != grDefinition.sys_id){
                      return {success: false, error: {message: gs.getMessage('Definition name is already exist')}};
                  }
              }
  		}
  		connectorValues.sys_id = sysId;
  		this.apiHandler.updateInstanceAndDefinitionFields(connectorValues);
  		retData = {connector_sys_id: sysId};
  	} else {
  		if(grDefinition.get('event_source_label', connectorValues.event_source_label)){
              return {success: false, error: {message: gs.getMessage('Source name is already exist')}};
          }
  		var responseData = this.apiHandler.createDefinitionAndInstance(connectorValues);
  		retData = {sys_id: responseData[0], connector_sys_id: responseData[1], url: responseData[2]};
  	}

  	if (this.shouldSaveMapping(step, mappingData)){
  		retData.mappingData = this.mapData(mappingData);
  		if (!retData.mappingData.success)				
  			return {success: false, error: retData.mappingData.error};
  	}
  	
  	if (shouldActivateConnector)
  		this.activateConnector(retData.connector_sys_id);
  		
  	return {success: true, 	data: retData};
  },
  
  mapData: function(mappingData){
  	if (!mappingData.jsonPayload){
  		return {success: false, error: {message: 'Cannot save mapping - missing json payload'}};
  	}
  	if (!mappingData.jsonMapping){
  		return {success: false, error: {message: 'Cannot save mapping - missing json mapping'}};
  	}
  	if (!mappingData.jsonMapping.severity){
  		return {success: false, error: {message: 'Cannot save mapping - missing severity value'}};
  	}
  	
  	var jsonMapping = mappingData.jsonMapping;
  	jsonMapping.severityMap = mappingData.severityMap || {}; 
  	jsonMapping.severityMap.isConstSeverity = jsonMapping.severityMap.isConstSeverity || false;
  	jsonMapping.timeOfEventMap = mappingData.timeOfEventMap;
  	if (jsonMapping.severity.startsWith(this.severityConst)){
  		jsonMapping.severity = jsonMapping.severity.split(this.severityConst).filter(Boolean)[0];
  		jsonMapping.severityMap.isConstSeverity = true;
  	}
  	var nonEmptySeverityMapKeys = Object.keys(jsonMapping.severityMap).filter(function(key){return jsonMapping.severityMap[key];});
  	if (!nonEmptySeverityMapKeys.length){
  		return {success: false, error: {message: 'Cannot save mapping - at least one severity value is required'}};
  	}
  	
  	jsonMapping = JSON.stringify(jsonMapping);
  	
  	var retData = this.mappingHandler.createAndUpdateMappingRecord(mappingData.definitionSysId, mappingData.jsonPayload, jsonMapping);
  	
  	return {success: true, data: retData};
  },
  
  activateConnector: function(sysId){
  	var grInstance = new GlideRecord('sn_em_connector_push_instance');
  	grInstance.get(sysId);
  	if (grInstance.isValidRecord()){
  		var definition_sys_id = grInstance.getValue('push_connector_definition');
  		var grMapping = new GlideRecord('sn_em_connector_custom_field_mapping');
  		grMapping.get('push_connector_definition', definition_sys_id);
  		if (grMapping.isValidRecord()){
  			this.apiHandler.activateInstanceAndDefinition(sysId);
  			return {success: true};
  		}
  	}
  	return {success: false, error: {message: 'Cannot activate connector - make sure mapping step was complete'}};
  },
  
  deactivateConnector: function(sysId){
  	this.apiHandler.deactivateInstanceAndDefinition(sysId);
      return {success: true};
  },
  
  deleteConnector: function(sysId){
  	this.apiHandler.deleteInstanceAndDefinition(sysId);
      return {success: true};
  },
  
  type: 'customConnectorHandler'
};

Sys ID

ad37b72777822110feb4c84e2c5a996f

Offical Documentation

Official Docs: