Name

global.EvtMgmtMidConnectorCacheHandler

Description

No description available

Script

var EvtMgmtMidConnectorCacheHandler = Class.create();
EvtMgmtMidConnectorCacheHandler.prototype = {
  MIDCONNECTORS_LASTUPDATEDTIME_NAME: "MidConnectorCacheRecords.lastUpdatedTime",
  EVTMGMT_MIDCONNECTOR_CACHE_UPDATETIME_SECS: "evt_mgmt.midconnector_cache_updatetime_minus_seconds",
  initialize: function() {},

  midConnectorCacheUpdateSendEccReq: function(operation, sysId) {
      var res = true;
      var LAUNCHPAD_CONNECTOR_INSTANCE_TABLE = "sn_itom_integ_app_instance_details";
      var CONNECTOR_PARAMS_TABLE = "sn_em_connector_push_config";
      var CONNECTOR_INSTANCE_PARAMS_TABLE = "sn_em_connector_push_instance_config_param";
      var updatedTimeFieldName = "sys_updated_on";
      var currentTime = new GlideDateTime();
      currentTime.addSeconds(-1 * (gs.getProperty(this.EVTMGMT_MIDCONNECTOR_CACHE_UPDATETIME_SECS, 10))); // look from 10 seconds before so that we will not miss any updated records

      try {
          var probe = SncProbe.get("Update Mid Connectors Cache Probe");

          probe.addParameter('type', 'midpushconnector');
          probe.setEccPriority("2");

          if (operation == "update") {

              var lastUpdatedTime = this.getLastUpdatedTime();

              var isNameTagsTableUpdated = this.wasTableUpdated(LAUNCHPAD_CONNECTOR_INSTANCE_TABLE, updatedTimeFieldName, lastUpdatedTime);
              var isParamTableUpdated = this.wasTableUpdated(CONNECTOR_PARAMS_TABLE, updatedTimeFieldName, lastUpdatedTime);
              var isInstanceParamTableUpdated = this.wasTableUpdated(CONNECTOR_INSTANCE_PARAMS_TABLE, updatedTimeFieldName, lastUpdatedTime);

              if (isNameTagsTableUpdated || isParamTableUpdated || isInstanceParamTableUpdated) {
                  //this.printDebug("sending probe to update mid connectorcache");
                  probe.addParameter('updateNameTags', isNameTagsTableUpdated ? 'true' : 'false');
                  probe.addParameter('updateParams', isParamTableUpdated ? 'true' : 'false');
                  probe.addParameter('updateInstanceParams', isInstanceParamTableUpdated ? 'true' : 'false');

                  probe.addParameter('operation', 'cacheUpdate');
                  probe.addParameter('updatedTime', lastUpdatedTime);

                  this.printDebug("Sending Update Mid Connectors Cache Probe " + "updateNameTags=" + isNameTagsTableUpdated + " updateParams=" + isParamTableUpdated + "  updateInstanceParams=" + isInstanceParamTableUpdated + " operation=cacheUpdate");

                  res = this.sendProbe(probe);
                  if (res) {
                      this.updateHash(currentTime.getValue());
                  }
              } else {
                  this.updateHash(currentTime.getValue());
              }
          } else if (operation == "delete") {
              this.printDebug("sending probe to delete some records from mid connectorcache");
              probe.addParameter('operation', 'cacheRecordDelete');
              probe.addParameter('sysId', sysId);

              res = this.sendProbe(probe);
          } else if (operation == "cacheExpiredFlush") {
              this.printDebug("sending probe to check and delete cache records that are expired from mid connectorcache");
              probe.addParameter('operation', 'cacheExpiredFlush');
              res = this.sendProbe(probe);
          }
          return res;

      } catch (e) {
          gs.error("EvtMgmtMidConnectorCacheHandler.MidConnectorCacheUpdateSendEccReq script include failed: " + e + ", " + e.stack);
          return false;
      }
  },

  /**
   * send the probe to all mid servers where the event listener is up and running
   * @param probe
   * @returns {boolean}
   */
  sendProbe: function(probe) {
      var res = true;
      var midsToSendTo = this.getEventListenerMidServers();

      this.printDebug("Sending ecc update command MidConnectorCacheUpdateSendEccReq for mids " + midsToSendTo);

      for (var i = 0; i < midsToSendTo.length; i++) {

          var localRes = probe.create(midsToSendTo[i]);

          //make sure localRes doesn't has a value
          if (!(localRes)) {
              res = false;
              gs.error("EvtMgmtMidConnectorCacheHandler.MidConnectorCacheUpdateSendEccReq Error on sending probe to mid : " + midsToSendTo[i]);
          }
      }
      //this.printDebug("after sending ECCQUEUE entry for MidConnectorCacheUpdateSendEccReq");
      return res;
  },

  /**
   * get the list of mid servers that has Event Listeners that are in UP state
   * @returns {*[]}
   */
  getEventListenerMidServers: function() {
      var midservers = [];
      var gr = new GlideRecord("ecc_agent_ext_context_event");
      gr.addQuery('status', 'Started');
      gr.query();

      while (gr.next()) {
          if (GlideStringUtil.notNil(gr.executing_on.name) && (midservers.indexOf(gr.executing_on.name) == -1)) {
              midservers.push(gr.executing_on.name);
          }
      }
      return midservers;
  },

  printDebug: function(message) {
      if (gs.getProperty('evt_mgmt.log_debug', 'false') == 'true') {
          var debugMsg = "EvtMgmtMidConnectorCacheHandler: ";
          debugMsg += message;
          gs.debug(debugMsg);
      }
  },

  /**
   * Check whether the given tableName has rows/records that are updated after lastUpdatedTime
   * @param tableName
   * @param updatedTimeFieldName
   * @param lastUpdatedTime
   * @returns {boolean} true if there any updated records after lastUpdatedTime else false
   */
  wasTableUpdated: function(tableName, updatedTimeFieldName, lastUpdatedTime) {

      try {

          var tableGr = new GlideRecord(tableName);
          if ((tableGr.isValid()) && ((updatedTimeFieldName) && (tableGr.isValidField(updatedTimeFieldName)))) {
              tableGr.addQuery(updatedTimeFieldName, ">", lastUpdatedTime);
              tableGr.orderByDesc(updatedTimeFieldName);
              tableGr.setLimit(1);
              tableGr.query();
              if (tableGr.next()) {
                  return true;
              }
              return false;
          }
          return false;

      } catch (e) {
          gs.error("EvtMgmtMidConnectorCacheHandler.wasTableUpdated script include failed: " + e);
          return false;
      }
  },

  /**
   * if we have lastUpdatedTime it will return it otherwise will return 0;
   * @returns {number}
   */
  getLastUpdatedTime: function() {
      var hashGr = new GlideRecord("sa_hash");
      hashGr.addQuery("name", this.MIDCONNECTORS_LASTUPDATEDTIME_NAME);
      hashGr.query();

      var lastUpdatedTime = 0;
      if (hashGr.next()) {
          lastUpdatedTime = hashGr.getValue("hash");
      } else {
          hashGr.initialize();
          hashGr.setValue("name", this.MIDCONNECTORS_LASTUPDATEDTIME_NAME);
          hashGr.setValue("hash", lastUpdatedTime);
          hashGr.insert();
      }
      return lastUpdatedTime;
  },


  updateHash: function(lastUpdatedTime) {

      try {
          var hashGr = new GlideRecord("sa_hash");
          hashGr.addQuery("name", this.MIDCONNECTORS_LASTUPDATEDTIME_NAME);
          hashGr.query();

          if (hashGr.next()) {
              hashGr.setValue("hash", lastUpdatedTime);
              hashGr.update();
          } else { //need to first create that record
              hashGr.initialize();
              hashGr.setValue("name", this.MIDCONNECTORS_LASTUPDATEDTIME_NAME);
              hashGr.setValue("hash", lastUpdatedTime);
              hashGr.insert();
          }
      } catch (e) {
          gs.error("EvtMgmtMetricCacheHandler.updateHash script include failed: " + e + ", " + e.stack);
      }
  },

  type: 'EvtMgmtMidConnectorCacheHandler'
};

Sys ID

19798a2347c2e9506ff43c72846d438c

Offical Documentation

Official Docs: