Name

sn_cmp.VMwareEventHandler

Description

No description available

Script

var VMwareEventHandler = Class.create();
VMwareEventHandler.prototype = Object.extendsObject(CloudEventHandler, {
  
  processEvent : function(headersStr, bodyStr, queryParamsStr){
  	var response = {};
  	response.sys_domain = this.getErrorEventsDefaultDomain();
  	var json = new global.JSON();
  	var headers = json.decode(headersStr);
  	var body = json.decode(bodyStr);
  	var queryParams = json.decode(queryParamsStr);
  	
  	var eccQueueSysId = headers.eccQueueSysId;
  	var eventName = headers.eventName;
  	var ciSysId = headers.ciSysId;
  	var status = headers.status;
  	var statusSysId = headers.statusSysId;
  	var ciTable = headers.ciTable;
  	var data = body.data;
  	var accountId = body.vcenter_instance_uuid;
  	var subject;
  	if (data)
  		subject = data.fullFormattedMessage;

  	var serviceAccountGr = this._verifyServiceAccount(accountId);
  	if (!gs.nil(serviceAccountGr))
  		response.sys_domain = gs.nil(serviceAccountGr.sys_domain) ? '' : serviceAccountGr.sys_domain;
  	
  	if (!status || status == 'error') {
  		response.state = 'error';
  		response.error_message = gs.getMessage('Error processing event {0}', [eventName]);
  		return response;
  	}
  	
  	if (!ciSysId || !ciTable) {
  		response.state = 'skipped';
  		response.error_message = gs.getMessage('Cannot locate CI with event {0}', [eventName]);
  		return response;
  	}
  	var gr = new GlideRecord(ciTable);
  	if (!gr.get(ciSysId)) {
  		response.state = 'skipped';
  		response.error_message = gs.getMessage('Cannot locate CI with event {0}', [eventName]);
  		return response;
  	}
  	
  	if (status == 'discovering'){
  		if (!statusSysId)
  			status = 'error';
  		var statusGr = new GlideRecord('discovery_status');
  		if (!statusGr.get(statusSysId))
  			status = 'error';
  		status = statusGr.getValue('state');
  		if (status == 'error') {
  			response.state = 'error';
  			response.error_message = gs.getMessage('Error discovering CI with event {0}', [eventName]);
  			return response;
  		}
  		if (status == 'Canceled') {
  			response.state = 'skipped';
  			response.error_message = gs.getMessage('Discovery canceled for CI with event {0}', [eventName]);
  			return response;
  		}
  		if (status != 'Completed') {
  			response.state = 'ready'; // discovery is still going for this CI, set event state to ready so it can be re-processed
  			return response;
  		} 
  	}
  	if (subject)
  		response.subject = subject;
  	
  	response.event_name = eventName;
  	response.ci = ciSysId;
  	
  	var resourceId = gr.getValue('object_id');
  	if (resourceId)
  		response.resource_id = resourceId;
  	var resourceTypeGr = this._getResourceTypeGr(ciTable);
  	if (resourceTypeGr) {
  		response.resource_type = resourceTypeGr.getUniqueValue();
  		response.resource_block = this._getResourceblock(resourceTypeGr.getUniqueValue());
  	}
  	
  	response.state = 'processed';
  	return response;
  },
  
  _getResourceTypeGr : function(tableName){
  	var resourceTypeGr = new GlideRecord('sn_capi_resource_type');
  	resourceTypeGr.addQuery('ci_class', tableName);
  	var qc = resourceTypeGr.addQuery('product.name','VMware vSphere');
  	qc.addOrCondition('product.name','VMware VDisk');
  	resourceTypeGr.query();
  	if (resourceTypeGr.next())
  		return resourceTypeGr;
  	return null;
  },

  type: 'VMwareEventHandler'
});

Sys ID

cd7b97e6d734320097eb6ccf6e61038a

Offical Documentation

Official Docs: