Name

global.EvtMgmtAlertActions

Description

No description available

Script

var EvtMgmtAlertActions = Class.create();
EvtMgmtAlertActions.prototype = {
  initialize: function() {
  },
  
  type: 'EvtMgmtAlertActions'
};

EvtMgmtAlertActions.runAlertActions = function() {
  	gs.warn("EvtMgmtAlertActions.runAlertActions shouldn't run anymore, it was used only in legcay Alert Actions Rules job and was replaced with EvtMgmtAlertActions.runAlertActionsFromManagementJob in the new Alert Management job ");
};


EvtMgmtAlertActions.runAlertActionsFromManagementJob = function() {

  gs.include('EvtMgmtIncidentHandler');
  gs.include('EvtMgmtRemoteIncidentAdapter');
  gs.include('EvtMgmtKBHandler');
  var cmpPolicyHanlder = gs.include('CmpAlertPolicyHandler');
  
  //close alerts if associated incidents are resolved
  if (gs.getProperty('evt_mgmt.incident_closes_alert') == 'true') { // if property is turned on
  	
  	// Close any alerts whose incidents are already resolved or closed
  	
  	var remoteUrl = EvtMgmtIncidentHandler.isRemoteIncidentURLDefined();
  	if (!remoteUrl){
  		var inProgress = new GlideDateTime();
  		var closedSecondsBack = gs.getProperty("evt_mgmt.alert_rule_close_delay", "5");
  		var gt = new GlideTime(1000 * closedSecondsBack); 
  		inProgress.subtract(gt);
  		
  		var alert = new GlideRecord('em_alert');
  		// Get alerts with delay, this makes sure all BR on create/update alerts completed before the job is running
  		alert.addQuery('sys_updated_on', '<=', inProgress);
  		alert.addQuery('state', '!=', 'Closed');
  		alert.addQuery('severity', '!=', '5');
  		alert.addNotNullQuery('incident');
  		var gr = alert.addJoinQuery('incident', 'incident', 'sys_id');
  		gr.addCondition('state', 'IN', '6,7'); // 6 - Resolved or 7 - Closed
  		
  		alert.query();
  		while (alert.next()) {
  			// create a mapping from alert to service
  			alert.setValue('state', 'Closed');
  			var alertManager = new SNC.AlertManager();
  			alertManager.updateWorkNotesOnAlert(alert, gs.getMessage('Closing alert because the related incident is already Resolved or Closed'));
  			alert.update();
  		}
  	}
  	
  	else{ //incidents are remote
  		EvtMgmtRemoteIncidentAdapter.closeResolvedAlerts();
  	}
  }
  
  if (gs.getProperty('evt_mgmt.alert.management.enable_legacy_alert_action_rules','true') == 'true') {  // if property is turned on, used to disable legacy alert rules where not needed
  		
  	var startTime = new Date();
  	//create incident for all updated alerts since previous round
  	var hashGr = new GlideRecord('sa_hash');
  	hashGr.addQuery('name','last_calculated_alert_job');
  	hashGr.query();
  	var timestamp;
  	var number = 0;
  	if (hashGr.next()){
  		timestamp = hashGr.getValue('hash'); //get last calculated timestamp
  		var inProgress = new GlideDateTime();
  		var secondsBack = gs.getProperty("evt_mgmt.alert_rule_delay", "5");
  		var gt = new GlideTime(1000 * secondsBack);
  		inProgress.subtract(gt);
  		var openStates = ["Open", "Reopen", "Flapping"];
  		var recentAlerts = new GlideRecord('em_alert');
  		recentAlerts.addQuery('sys_updated_on', '>=', timestamp);
  		recentAlerts.addQuery('sys_updated_on', '<=', inProgress);
  		recentAlerts.addQuery('state', 'IN', openStates);
  		recentAlerts.query();


  		var orgSessionID = gs.getSession().getCurrentDomainID();
  		var alerts = [];
  		var createdIncident = false;
  		while (recentAlerts.next()) {
  			gs.getSession().setDomainID(recentAlerts.sys_domain); // run rules and create incident in same domain as alert
  			createdIncident = EvtMgmtIncidentHandler.createIncident(recentAlerts, true);
  			if(createdIncident == true)
  				number++;
  			EvtMgmtKBHandler.setKB(recentAlerts);
  			alerts.push(recentAlerts.getUniqueValue());

  		}

  		var toTrigger = gs.getProperty('evt_mgmt.tigger_cmp_policy', true);
  		if (cmpPolicyHanlder && toTrigger) {
  			var currentTime = new Date();
  			CmpAlertPolicyHandler.applyPolicy(alerts);

  			var timeDifference = Number((new Date().getTime() - currentTime.getTime()) / 1000).toFixed(3);
  			if (timeDifference > 3) { //in case the CMP policy handler took more than 3 seconds - disable it
  				gs.setProperty('evt_mgmt.tigger_cmp_policy', false);
  			}
  		}

  		//return domain to original
  		if (gs.getSession().getCurrentDomainID() != orgSessionID) {
  			gs.getSession().setDomainID(orgSessionID);
  		}

  		hashGr.setValue('hash', inProgress);
  		hashGr.update();
  	}
  	else {
  		gs.warn("SA_HASH keys are not initialized");
  	}

  	if(number > 0) {
  		var duration = Number((new Date().getTime() - startTime.getTime()) / 1000).toFixed(3);
  		var rate = number;
  		if(duration > 0)
  			rate = Number(number/duration).toFixed(2);
  		gs.log("Number of created incidents: " + number + ", elapsed time (sec): " + duration + ", rate (count/time): " + rate);
  	}
  }
  
};

Sys ID

c9c24f6453b003000238ddeeff7b128a

Offical Documentation

Official Docs: