Name

sn_cmp.CloudEventHandler

Description

No description available

Script

var CloudEventHandler = Class.create();
CloudEventHandler.prototype = Object.extendsObject(CloudPatternBase, {	
  GLIDE_CMP_DEBUG: 'glide.cmp.debug',
  ERROR_EVENTS_DEFAULT_DOMAIN: 'sn_cmp.error_events.default_domain',

  initialize: function() {
  	this._errorEventsDefaultDomain = gs.getProperty(this.ERROR_EVENTS_DEFAULT_DOMAIN,'');
  },
  
  processEvent : function(headersStr, bodyStr, queryParamsStr) {
  	//must be implemented by each provider handler
  	var response = {};
  	response.state = 'error';
  	response.error_message = 'processEvent function is not implemented';
  	return response;
  },

  getErrorEventsDefaultDomain: function() {
  	return this._errorEventsDefaultDomain;
  },

  _verifyLDC : function(serviceAccountId, ldc) {
  	var serviceAccountGr = this._verifyServiceAccount(serviceAccountId);
  	if (!serviceAccountGr)
  		return false;
  	var datacenterlist = '';
  	var dataCenterGr = new GlideRecord('cmdb_ci_logical_datacenter');
  	dataCenterGr.addQuery('region',ldc);
  	dataCenterGr.query();
  	while(dataCenterGr.next()) { 
  		datacenterlist = datacenterlist + dataCenterGr.getUniqueValue();
  		if(dataCenterGr.hasNext()) {
  			datacenterlist = datacenterlist + ',';
  		}
  	}
  	if(datacenterlist == '') return false;
  	var ciRel = new GlideRecord('cmdb_rel_ci');
  	ciRel.addQuery('type.name', 'Hosted on::Hosts');
  	ciRel.addQuery('child',serviceAccountGr.getUniqueValue());
  	ciRel.addQuery('parent','IN',datacenterlist);
  	ciRel.setLimit(1);
  	ciRel.query();
  	return ciRel.hasNext();
  },
  
  _verifyCredential : function(serviceAccountId) {
  	var serviceAccountGr = this._verifyServiceAccount(serviceAccountId);
  	if (!serviceAccountGr)
  		return "";
  	return serviceAccountGr.discovery_credentials.sys_id+'';
  },
  
  _verifyServiceAccount : function(serviceAccountId) {
  	var serviceAccountGr = new GlideRecord('cmdb_ci_cloud_service_account');
  	if (!serviceAccountGr.get('account_id', serviceAccountId))
  		return null;
  	return serviceAccountGr;
  },
  
  _getValidatorName : function(resourceType) {
  	var resourceTypeGr = new GlideRecord('sn_capi_resource_type');
  	if (!resourceTypeGr || !resourceTypeGr.get('name', resourceType))
  		return null;
  	var ciClass = resourceTypeGr.getValue('ci_class');
  	if (!ciClass)
  		return null;
  	var validatorGr = new GlideRecord('cmdb_cmp_cloud_model_validator');
  	validatorGr.addQuery('ci_class',ciClass);
  	validatorGr.addQuery('validator_type','4');//insert/update type
  	validatorGr.query();
  	if (validatorGr.next())
  		return validatorGr.getValue('validator_name');
  },
  	
  _getClassTypeId : function(resourceType) {
  	var resourceTypeGr = this._getResourceTypeGr(resourceType);
  	if (!resourceTypeGr || !resourceTypeGr.get('name', resourceType))
  		return null;
  	
  	var ciClass = resourceTypeGr.getValue('ci_class');
  	return (ciClass) ? ciClass : null;
  },
  
  _getCiId : function(classType, inputObjectId) {
  	var cmdbCloudCi = new GlideRecord(classType);
  	var record = cmdbCloudCi.get('object_id', inputObjectId);
  	return (record) ? cmdbCloudCi.getUniqueValue() : ''; 
  },
  		
  _debug : function(msg) {
  	if (gs.getProperty(this.GLIDE_CMP_DEBUG,false))
  		gs.info('['+this.type+']********'+msg);
  },
  
  _updateResponse : function(response, resourceType, cloudModelPayload) {
  	var resourceTypeGr = this._getResourceTypeGr(resourceType);
  	var ciClass;
  	if (!resourceTypeGr)
  		return;
  	response.resource_type = resourceTypeGr.getUniqueValue();
  	ciClass = resourceTypeGr.getValue('ci_class');		
  	response.resource_block = this._getResourceblock(resourceTypeGr.getUniqueValue());
  	
  	if (ciClass) {
  		cloudModelPayload = new global.JSON().decode(cloudModelPayload);
  		for (var key in cloudModelPayload) {
  			if (key.indexOf(ciClass) == 0) {
  				var ciId = cloudModelPayload[key];
  				if (ciId){
  					response.ci = ciId;
  				}
  				break;
  			}
  		}			
  	}
  },
  
  _getResourceblock : function(resourceTypeId) {
  	var rt_rb_mapping = new GlideRecord('sn_cmp_rt_rb_m2m');
  	if (rt_rb_mapping.get('resource_type',resourceTypeId))
  		return rt_rb_mapping.getValue('resource_block');
  	return '';
  },

  type: 'CloudEventHandler'
});

Sys ID

c6dfbea1d7d4320097eb6ccf6e6103d1

Offical Documentation

Official Docs: