Name

global.MidServerDashboardUtil

Description

Functions for gathering information about MID Servers that can be reflected in the MID Server Dashboard

Script

var MidServerDashboardUtil;
var MIN_POWERSHELL_VERSION = 3; 
(function() {

MidServerDashboardUtil = {
  getIdForDisplay: getIdForDisplay,
  getVersionStatus: getVersionStatus,
  getUserStatus: getUserStatus,
  hasMinimunPowerShellVersion: hasMinimunPowerShellVersion,
  isMidConfigAvailable: isMidConfigAvailable,
  COMPAT_EQUAL: 'EQUAL',
  COMPAT_COMPATIBLE: 'COMPATIBLE',
  COMPAT_INCOMPATIBLE: 'INCOMPATIBLE',
  COMPAT_UNKNOWN: 'UNKNOWN'
};

//Get the MID Server sys_id for e.g. field styles. Only allowed for ecc_agent and ecc_agent_status.
function getIdForDisplay(gr) {
  if (JSUtil.nil(gr))
  	return null;
  
  switch (gr.getTableName()) {
  	case 'ecc_agent':
  		return gr.sys_id;
  	case 'ecc_agent_status':
  		return gr.agent;
  }
  
  return null;
}

//Get an object to report on MID Server/Instance version compatibility and if a MID Server is pinned
function getVersionStatus(agentId) {
  var gra = new SNC.ECCAgentCache().getBySysId(agentId);
  if (JSUtil.nil(gra) || !gra.isValidRecord())
  	return {instance_version:'', mid_version:'', compatibility:MidServerDashboardUtil.COMPAT_UNKNOWN, pinned:false, pinned_version:''};
  
  var o = {};
  o.instance_version = gs.getProperty('mid.buildstamp', null);
  o.mid_version = gra.version;
  o.pinned_version = getPinnedVersion(agentId);
  o.pinned = (o.pinned_version != '');
  o.compatibility = getCompatibility(o.instance_version, o.mid_version);
  
  return o;
}

//Compatibility definitions:
//  'EQUAL': MID and Instance versions are identical
//  'COMPATIBLE': MID and Instance versions are in same release family
//  'INCOMPATIBLE': MID and Instance versions are in different release families
//  'UNKNOWN': Insufficient information to determine compatibility
function getCompatibility(instance, mid) {
  var releaseRegex = /[^__]*/;
  if (JSUtil.nil(instance) || JSUtil.nil(mid))
  	return MidServerDashboardUtil.COMPAT_UNKNOWN;
  if (instance == mid)
  	return MidServerDashboardUtil.COMPAT_EQUAL;
  if (''+instance.match(releaseRegex) == ''+mid.match(releaseRegex))
  	return MidServerDashboardUtil.COMPAT_COMPATIBLE;
  
  return MidServerDashboardUtil.COMPAT_INCOMPATIBLE;
}

function getPinnedVersion(agentId) {
  var gr = new GlideRecord('ecc_agent_config');
  gr.addQuery('ecc_agent', agentId);
  gr.addQuery('param_name', 'mid.pinned.version');
  gr.query();
  
  return gr.next() ? gr.value : '';
}

//Get an object to report on MID Server user state
function getUserStatus(agentId) {
  var gra = new SNC.ECCAgentCache().getBySysId(agentId);
  if (JSUtil.nil(gra) || !gra.isValidRecord())
  	return {logged_user:'', config_user:'', matches_config:false, is_missing_roles:false, missing_roles:[]};

  var o = {};
  o.logged_user = ''+gra.user_name;
  o.config_user = getConfigUser(gra);

  if (gra.is_using_mutual_auth) {
    o.matches_config = true;
  } else {
    o.matches_config = (o.logged_user.toLowerCase() == o.config_user.toLowerCase());
  }

  o.missing_roles = getMissingRoles(gra);
  o.is_missing_roles = (o.missing_roles.length > 0);
  
  return o;
}

//If ecc_agent_config is populated
//Returns true if the config parameters are populated for the input MID Server 
function isMidConfigAvailable(agentId) {
  var grc = new GlideRecord('ecc_agent_config');
  grc.addQuery('ecc_agent', agentId);
  grc.query();
  return grc.hasNext(); 
}

//Get user from ecc_agent_config
function getConfigUser(gra) {
  var grc = new GlideRecord('ecc_agent_config');
  grc.addQuery('ecc_agent', gra.sys_id);
  grc.addQuery('param_name', 'mid.instance.username');
  grc.query();

  return grc.next() ? ''+grc.value : '';
}

//Determine if ecc_agent.user is missing the 'mid_server' role (does not check for any other inherited roles)
//Returns an array to allow addition of more roles over time
function getMissingRoles(gra) {
  var role = 'mid_server';
  var user = GlideUser.getUser(gra.user_name);
  if (JSUtil.nil(user))
  	return [role];
  
  return user.hasRole(role) ? [] : [role];
}

function hasMinimunPowerShellVersion(midOs, PSVersion) {
  
  if (midOs != 'Windows')
  	return true;
  
  if (PSVersion) 
  	return (parseInt(PSVersion.split('.')[0]) >= MIN_POWERSHELL_VERSION) ;
  
  return false;
}
})();

Sys ID

e8a30d765b1312006b9a2e65f0f91a8a

Offical Documentation

Official Docs: