Name

sn_em_connector.EvtMgmtConnectorsCleanupEventsData

Description

sn_em_connector_event_data table cleanup

Script

var EvtMgmtConnectorsCleanupEventsData = Class.create();
EvtMgmtConnectorsCleanupEventsData.prototype = {

  initialize: function() {},

  type: 'EvtMgmtConnectorsCleanupEventsData'
};

EvtMgmtConnectorsCleanupEventsData.cleanUp = function() {



  /*
   * If Azure Bi-directional connector is Not Active
   * Delete the records in sn_em_connector_event_data table in 2 days.
   * taking 2 days if customer has disabled it temporarily, we should not clean up
   * 
   * If Azure Bi-directional connector is Active
   * If Alert is in closed state, then we will retain 
   * data for 7 days and can be customized by sn_em_connector.eventdata_closedevent_interval
   * if we reopen a closed alert in 7 days then we will be able to reopen the corresponding closed alerts from Azure portal.
   * if we reopen a closed alert after 7 days then we will NOT be able to 
   *  reopen the corresponding closed alerts from Azure portal.
   *
   * If Alert is in open state, then we will retain the data for 30 days and can be customized by sn_em_connector.eventdata_openevent_interval
   * If we want to close or acknowledge an opened servicenow alert in 30 days,
   * we will be able to close/acknowledge all corresponding azure alerts on Azure portal.
   * If we want to close or acknowledge an opened servicenow alert after 30 days,
   * we will NOT be able to close/acknowledge all corresponding azure alerts on Azure portal.
   */

  var startTime = new GlideDateTime();

  var CLOSE_INTERVAL = parseInt(gs.getProperty('sn_em_connector.eventdata_closedevent_interval', 604800)); //default 7days. 7*24*60*60
  var OPEN_INTERVAL = parseInt(gs.getProperty('sn_em_connector.eventdata_openevent_interval', 2592000)); //default 30 days. 30*24*60*60
  var AZURE_INACTIVE_CLEANUP_INTERVAL = parseInt(gs.getProperty('sn_em_connector.eventdata_azure_inactive_cleanup_interval', 172800)); //default 2 days. 2*24*60*60

  var connDefGr = new GlideRecord("em_connector_definition");
  connDefGr.addQuery("name", "Azure Monitor");
  connDefGr.query();

  if (connDefGr.next()) {

      var azureDef = connDefGr.getUniqueValue();
      var connInstGr = new GlideRecord("em_connector_instance");
      connInstGr.addQuery("connector_definition", azureDef);
      connInstGr.addQuery("active", true);
      connInstGr.query();

      //If there is no active azure monitor conenctor delete azure data
      if (!connInstGr.hasNext()) {

          var azureInActiveEventDataGr = new GlideRecord("sn_em_connector_event_data");
          var azurenow = new GlideDateTime();
          azurenow.addSeconds(AZURE_INACTIVE_CLEANUP_INTERVAL * -1);
          azureInActiveEventDataGr.addQuery("source", "Azure Monitor");
          azureInActiveEventDataGr.addQuery("sys_updated_on", "<=", azurenow);
          azureInActiveEventDataGr.query();
          azureInActiveEventDataGr.deleteMultiple();
      }
  }

  //keeping them outside Azure as we are soting oracle cloud event data also in this table.
  if (parseInt(CLOSE_INTERVAL) > 0) {

      var eventDataGr = new GlideRecord("sn_em_connector_event_data");
      var now = new GlideDateTime();
      now.addSeconds(CLOSE_INTERVAL * -1);
      eventDataGr.addQuery("state", "IN", "Closed,ClosedAcknowledged,ClosedByEvent,ClosedByEventAcknowledged");
      eventDataGr.addQuery("sys_updated_on", "<=", now);
      eventDataGr.query();
      eventDataGr.deleteMultiple();
  }

  if (parseInt(OPEN_INTERVAL) > 0) {

      var eventDataOpenGr = new GlideRecord("sn_em_connector_event_data");
      var opennow = new GlideDateTime();
      opennow.addSeconds(OPEN_INTERVAL * -1);
      eventDataOpenGr.addQuery("state", "IN", "New,NewAcknowledged,Reopen,ReopenAcknowledged");
      eventDataOpenGr.addQuery("sys_updated_on", "<=", opennow);
      eventDataOpenGr.query();
      eventDataOpenGr.deleteMultiple();
  }

  var duration = (new GlideDateTime()).getNumericValue() - startTime.getNumericValue();

  if (duration > 5000) {
      // Write statistics only if the query took more then 5 seconds
      _writeToPerfTable(alertsCount, duration);
  }

  var _writeToPerfTable = function(count, duration) {

      var performanceStatsGr = new GlideRecord("sa_performance_statistics");
      performanceStatsGr.setValue("type", "closeAlertsJob");
      performanceStatsGr.setValue("count", count);
      performanceStatsGr.setValue("duration", duration);
      performanceStatsGr.insert();
  };
};

Sys ID

056824655b713010ea1d1b800481c7b1

Offical Documentation

Official Docs: