Name

sn_itom_pattern.ProbeInvoker

Description

No description available

Script

var ProbeInvoker = Class.create();
ProbeInvoker.prototype = {
  initialize: function() {
  },

  sendProbe : function(accountID,credentialsID,probeName,jobName) {
  	var midId = this.getMid();
  	if(!midId)
  	{
  		gs.debug("ProbeInvoker: No Mid was found to trigger the GCP-Events-Probe");
  		return;
  	}
  	gs.debug("ProbeInvoker: Invoking probe on Mid "+midId);
  	var payload = this._createProbePayload(accountID,credentialsID);
  	this._sendProbe(midId,payload,probeName,jobName,accountID);
  },

  _createProbePayload : function(accountID,credentialsID){
  	var payload = new XMLDocument2();
  	payload.createElement("parameters");

  	// account context
  	this._addParameter(payload,'account_id', accountID);
  	this._addParameter(payload,'discovery_credentials', credentialsID);


  	// set infra context params
  	this._addParameter(payload,'used_by_runbook', "true");
  	this._addParameter(payload,'glide.xmlhelper.trim.enable', "true");
  	this._addParameter(payload,'probe', "428e6bf8db813300dc92f1910f961978");
  	this._addParameter(payload,'used_by_discovery', "true");
  	this._addParameter(payload,'probe_name', "GCP-Events-Probe");

  	var ts = this._getLatestTimeStampFromDB(accountID);
  	gs.debug("ProbeInvoker timestamp is " + ts);
  	this._addParameter(payload,'latest_timestamp', ts);
  	// GCP API filter
  	this._addAPIFilterParams(payload);

  	return payload;

  },

  /***
   * retrieve the suppported resources from the probe parameters table
   * @private
   */
  _addAPIFilterParams : function(payload) {
  	var probeParams = this._createGlideQueryForProbTable();
  	probeParams.addQuery('name','gcp_supported_resource_type');
  	probeParams.query();
  	if(probeParams.next()) {
  			this._addParameter(payload, probeParams.name, probeParams.value);
  	}else{
  		gs.error("Could not find the probe parameter gcp_supported_resource_type for probe 428e6bf8db813300dc92f1910f961978");
  	}
  	
  	var probeParams1 = this._createGlideQueryForProbTable();
  	probeParams1.addQuery('name','max_events_size');
  	probeParams1.query();
  	if(probeParams1.next()) {
  		this._addParameter(payload,probeParams1.name, probeParams1.value);
  	}
  	else{
  		gs.error("Could not find the probe parameter max_events_size for probe 428e6bf8db813300dc92f1910f961978");
  	}
  	
  	var probeParams2 = this._createGlideQueryForProbTable();
  	probeParams2.addQuery('name','max_number_pages');
  	probeParams2.query();
  	if(probeParams2.next()) {
  		this._addParameter(payload,probeParams2.name, probeParams2.value);
  	}
  	else{
  		gs.error("Could not find the probe parameter max_number_pages for probe 428e6bf8db813300dc92f1910f961978");
  	}

  },
  
  _createGlideQueryForProbTable : function() {
  	var probeParams = new GlideRecord('discovery_probe_parameter');
  	probeParams.addQuery('probe','428e6bf8db813300dc92f1910f961978');
  	return probeParams;
  },

  _addParameter : function(payload, name, value) {
  	var el = payload.createElement("parameter");
  	el.setAttribute("name", name);

  	if (value)
  		el.setAttribute("value", value);

  	return el;
  },

  getMid: function () {
  	var midSelector = new global.CloudMidSelectionApi();
  	var midID = midSelector.selectMid(null, "Google", null, "{}");
  	var midGr = new GlideRecord('ecc_agent');
  	midGr.get(midID);
  	gs.debug("Selected MID: " + midGr.name);
  	return midGr.name;
  },
  
  //added function for adding the Domain to the Probe properties
  getDomain : function(serviceAccountId) {	
  	var accountGR = new GlideRecord("cmdb_ci_cloud_service_account");
  	accountGR.addQuery("account_id", serviceAccountId);
  	accountGR.setLimit(1);
  	accountGR.query();
  	if (accountGR.next()) {
  		var sys_domain = accountGR.getValue("sys_domain");
  	}	
  	return sys_domain;
  },

  _sendProbe: function(midId, payload,probeName,jobName,accountID) {
  	var gr = new GlideRecord('ecc_queue');
  	gr.initialize();
  	gr.setValue('agent',  'mid.server.'+midId);
  	
  	//gr.setValue('source', command); //TODO: new. check that is working
  	gr.setValue('name',  jobName);
  	if (payload) {
  		gs.debug("payload is "+payload.toString());
  		gr.setValue('payload', payload.toString());
  	}
  	gr.setValue('topic',  'JavascriptProbe');
  	gr.setValue('queue',  'output');
  	gr.setValue('state',  'ready');
  	gr.setValue('priority',  '0');
  	gr.setValue('sys_domain', this.getDomain(accountID));
  	gr.insert();
  },

  _getLatestTimeStampFromDB : function(accountID) {
  	var tsHandler = new EventsTimestampHandler();
  	return tsHandler.getLatestTimeStampForAccount(accountID);
  },

  type: 'ProbeInvoker'
};

Sys ID

03f1c1e81b1dbf802e1cfccf1d4bcb8f

Offical Documentation

Official Docs: