Name

sn_cmdb_ci_class.OTUtils

Description

Operational Technology utility class.

Script

var OTUtils = Class.create();

OTUtils.CLASSES_TO_SYNC_IP_ADDRESS = ['cmdb_ci_nids'];
OTUtils.CLASSES_TO_SKIP_OT_ASSET = ['cmdb_ci_nids', 'cmdb_ci_ni_equipment_holder', 'cmdb_ci_ni_telco_equipment', 'cmdb_ci_interface_card'];
OTUtils.CMDB_CONTROL_MODULE_CLASS = "cmdb_ci_ot_control_module";
OTUtils.CMDB_OWNS_BY_REL_TYPE_SYSID = "25242fb2377a9200738d021a54990e88";

OTUtils.syncOTAssetReferenceOnCI = function(otID, ciID, setWorkflow) {
  if (otID && ciID) {
      setWorkflow = setWorkflow || false;

      var grCI = new GlideRecord('cmdb_ci');
      if (grCI.get('sys_id', ciID)) {
          grCI.setWorkflow(setWorkflow);
          grCI.setValue('cmdb_ot_entity', otID);
          grCI.update();
      }
  }
};

OTUtils.isValidOTClass = function(className) {
  return OTUtils.CLASSES_TO_SKIP_OT_ASSET.indexOf(className) < 0;
};

OTUtils._getIPfromParam = function(paramObj) {
  var ip = paramObj.ip;
  return !ip ? '' : ip.trim();
};

OTUtils._getCIfromParam = function(paramObj) {
  var ci = new GlideRecord('cmdb_ci');
  if (!ci.get(paramObj.ciSysId))
      return null;

  // Specifically always send back the CI for certain classes
  if (OTUtils.CLASSES_TO_SYNC_IP_ADDRESS.indexOf(ci.getValue('sys_class_name')) >= 0)
      return ci;

  if (!ci.getValue('cmdb_ot_entity'))
      return null;

  return ci;
};

OTUtils._getIPArrayfromCI = function(ci) {
  var ips = ci.getValue('ip_address');
  ips = !ips ? '' : ips.trim();
  var ipArray = [];
  if (ips.length > 0)
      ipArray = ips.split(',');
  return ipArray;
};

OTUtils._addIPtoCI = function(ip, ci) {
  var ipArray = OTUtils._getIPArrayfromCI(ci);
  var index = ipArray.indexOf(ip);
  if (index >= 0)
      return false;

  ipArray.push(ip);
  ci.setValue('ip_address', ipArray.toString());
  return true;
};

OTUtils._removeIPfromCI = function(ip, ci) {
  var ipArray = OTUtils._getIPArrayfromCI(ci);
  var index = ipArray.indexOf(ip);
  if (index < 0)
      return false;
  ipArray.splice(index, 1);
  ci.setValue('ip_address', ipArray.toString());
  return true;
};

OTUtils.syncOTAssetIPAddress = function(operation, paramObjStr) {
  var paramObj = new global.JSON().decode(paramObjStr);
  if (gs.nil(paramObj)) {
      gs.error("[OTUtils - syncOTAssetIPAddress]: param object parsing failed for " + paramObjStr);
      return;
  }

  var currIP = OTUtils._getIPfromParam(paramObj.current);
  var currCI = OTUtils._getCIfromParam(paramObj.current);
  var prevIP;
  var prevCI;
  if (operation === 'insert' && currCI && OTUtils._addIPtoCI(currIP, currCI) || operation === 'delete' && currCI && OTUtils._removeIPfromCI(currIP, currCI)) {
      currCI.setWorkflow(false);
      currCI.update();
  } else if (operation === 'update') {
      prevIP = OTUtils._getIPfromParam(paramObj.previous);
      if (currCI && paramObj.previous.ciSysId === paramObj.current.ciSysId) {
          OTUtils._removeIPfromCI(prevIP, currCI);
          OTUtils._addIPtoCI(currIP, currCI);
          currCI.setWorkflow(false);
          currCI.update();
      } else {
          prevCI = OTUtils._getCIfromParam(paramObj.previous);
          if (prevCI && OTUtils._removeIPfromCI(prevIP, prevCI)) {
              prevCI.setWorkflow(false);
              prevCI.update();
          }
          if (currCI && OTUtils._addIPtoCI(currIP, currCI)) {
              currCI.setWorkflow(false);
              currCI.update();
          }
      }
  }
};

OTUtils._fetchParentCI = function(ci) {
  var gr = new GlideRecord("cmdb_rel_ci");
  gr.addQuery("type", OTUtils.CMDB_OWNS_BY_REL_TYPE_SYSID);
  gr.addQuery("child", ci);
  gr.orderByDesc("sys_updated_on");
  gr.setLimit(1);
  gr.query();
  if (gr.next())
      return gr.getValue("parent");
  return null;
};

OTUtils.prototype = {
  initialize: function() {},

  isOTAsset: function(cmdb_ci_id) {
      var grOT = new GlideRecord('cmdb_ot_entity');
      grOT.addQuery('ot_asset', cmdb_ci_id);
      grOT.query();

      return grOT.hasNext();
  },

  type: 'OTUtils'
};

Sys ID

21015bba734620100fe565a80ff6a721

Offical Documentation

Official Docs: