Name

global.MIDServerUtil

Description

Utility for the MID server

Script

var MIDServerUtil;

(function() {

MIDServerUtil = {
  createOrUpdateIssue: createOrUpdateIssue,
  createOrUpdateUniqueIssue:createOrUpdateUniqueIssue,
  resolveExistingIssues: resolveExistingIssues,
  getUnresolvedIssueCount: getUnresolvedIssueCount,
  writeEvent: writeEvent,
  getClusterName: getClusterName,
  logInfo: logInfo,
  logWarning: logWarning,
  logError: logError,
  MID_SERVER_SOURCE: 'MID Server'
};

/**
* Insert or update an issue based on MID, source and message.  Existing resolved issues are ignored.
*
*/
function createOrUpdateIssue(midSysId, issueSource, issueMessage) {
  var issueSysId;

  var issue = new GlideRecord('ecc_agent_issue');
  issue.addQuery('mid_server', midSysId);
  issue.addQuery('source', issueSource);
  issue.addQuery('message', issueMessage);
  issue.addQuery('state', '!=', 'resolved');
  issue.query();

  if (issue.next()) {
  	issueSysId = issue.getValue('sys_id');
  	// issue exists, just update last_detected and count
  	issue.setValue('last_detected', new GlideDateTime());
  	issue.setValue('count', (+ issue.getValue('count')) + 1);
  	issue.update();
  } else {
  	issue.initialize();
  	issue.setValue('mid_server', midSysId);
  	issue.setValue('source', issueSource);
  	issue.setValue('message', issueMessage);
  	issue.setValue('last_detected', new GlideDateTime());
  	issueSysId = issue.insert();
  }

  return issueSysId;
}

/**
* Resolve all open (acknowledged, new) issues for a given MID Server, source and (optionally) message.
* If a message is given, only issues that match the message will be resolved.
*
*/
function resolveExistingIssues(midSysId, issueSource, issueMessage) {
  var openIssues = new GlideRecord('ecc_agent_issue');
  openIssues.addQuery('mid_server', midSysId);
  openIssues.addQuery('source', issueSource);
  openIssues.addQuery('state', '!=', 'resolved');
  if (JSUtil.notNil(issueMessage))
  	openIssues.addQuery('message', issueMessage);
  openIssues.query();
  
  // DEF0182644: Previous call to GlideRecord.updateMultiple was not resulting
  // in the update of audit fields (e.g. sys_updated_on)
  while (openIssues.next()) {
  	openIssues.setValue('state', 'resolved');
  	openIssues.update();
  }
}

/**
* Get unresolved issue count for a given MID Server.
*/
function getUnresolvedIssueCount(midSysId) {
  var gr = new GlideRecord('ecc_agent_issue');
  gr.addQuery('mid_server', midSysId);
  gr.addQuery('state','!=','resolved');
  gr.query();
  return gr.getRowCount();
}

/**
* Insert or update an issue record with the input message and resolve all issues with the
* same source and different message.
**/
function createOrUpdateUniqueIssue(midSysId, issueSource, message) {
  
  // Resolve all existing issues with the same source and different message
  var openIssues = new GlideRecord('ecc_agent_issue');
  openIssues.addQuery('mid_server', midSysId);
  openIssues.addQuery('source', issueSource);
  openIssues.addQuery('state', '!=', 'resolved');
  openIssues.addQuery('message', '!=' , message);
  openIssues.query();

  while (openIssues.next()) {
  	openIssues.setValue('state', 'resolved');
  	openIssues.update();
  }
  
  createOrUpdateIssue(midSysId, issueSource, message);
}

/**
* Logging utilities
**/
function logInfo(message, source) {
  gs.log(message, MIDServerUtil.MID_SERVER_SOURCE + (source ? ' ' + source : ''));
}

function logWarning(message, source) {
  gs.logWarning(message, MIDServerUtil.MID_SERVER_SOURCE + (source ? ' ' + source : ''));
}

function logError(message, source) {
  gs.logError(message, MIDServerUtil.MID_SERVER_SOURCE + (source ? ' ' + source : ''));
}

/**
* Get the name of the cluster that the mid server belongs to.
**/
function getClusterName(agentId) {
  var gr = new GlideRecord('ecc_agent_cluster_member_m2m');
  gr.addQuery('agent', agentId);
  gr.query();
  if (gr.next()) {
      var clusterId = '' + gr.cluster;
      var clusterCache = new SNC.ECCAgentClusterCache();
      var cluster = clusterCache.getBySysId(clusterId);
      if (cluster)
          return '' + cluster.name;
  }
  return '';
}

/**
* Write a MID server lifecycle event to the event table
**/
function writeEvent(agent, cluster, event, source, message) {
  var gr = new GlideRecord("mid_server_event");
  gr.initialize();
  gr.setValue("agent", agent);
  gr.setValue("cluster", cluster);
  gr.setValue("event", event);
  if (JSUtil.notNil(source)) {
      gr.setValue("source", source);
  } else {
  	gr.setValue("source", "MID Server Lifecycle Event");
  }
  if (JSUtil.notNil(message))
      gr.setValue("message", message);
  gr.insert();
}

})();

Sys ID

8b6fb0c09f8103005581decf857fcff2

Offical Documentation

Official Docs: