Name

sn_app_insights.SlowPatternToScriptsMappingCreator

Description

No description available

Script

var SlowPatternToScriptsMappingCreator = Class.create();
SlowPatternToScriptsMappingCreator.prototype = {
  initialize: function() {
  },
  createMappingsIfNeeded: function (sysPatternTable) {
      var cutOffTimeInMins = gs.getProperty('glide.app_insights.slow_pattern.mapping_generation_cutoff_mins', 0);
      var lastCreated = this._mappingLastCreated(sysPatternTable);
      var cutOff = new GlideDateTime();
      cutOff.add(-1 * cutOffTimeInMins * 60 * 1000);
      //skip mapping creation if we already checked for new slow patterns in the last x minutes, where x is set by the above property
      if (lastCreated && lastCreated.after(cutOff) && cutOffTimeInMins > 0)
          return;
      var slowPatternGr = new GlideRecord(sysPatternTable);
      /**
       * - lastCreated is before cutOff
       * - cutOff not defined(value <= 0 mean not defined)
       * x if the there's no lastCreated, that means this is the first time ever querying
       */
      if (lastCreated)
          slowPatternGr.addQuery('sys_created_on', '>=', lastCreated);
      slowPatternGr.query();
      var mappingGr;
      while (slowPatternGr.next()) {
          var scriptsInStack = new sn_app_insights.StackTraceParser()
                                      .getScriptsInStack(slowPatternGr.getValue('stack_trace'));
          for (var scriptId in scriptsInStack) {
              mappingGr = new GlideRecord("sn_app_insights_slow_patterns_to_scripts_mapping");
              mappingGr.script_source = scriptId;
              mappingGr.script_source_table = scriptsInStack[scriptId].table;
              mappingGr.slow_pattern = slowPatternGr.sys_id;
              mappingGr.slow_pattern_type = slowPatternGr.sys_class_name;
              mappingGr.calling_order = scriptsInStack[scriptId].calling_order;
              mappingGr.insert();
          }
      }
  },

  _mappingLastCreated: function(sysPatternTable) {
      var slowPatternAggGr = new GlideAggregate("sn_app_insights_slow_patterns_to_scripts_mapping");
      slowPatternAggGr.setGroup(false);
      slowPatternAggGr.addAggregate('MAX', 'sys_created_on');
      if (sysPatternTable === 'sys_script_pattern' || sysPatternTable === 'sys_query_pattern')
          slowPatternAggGr.addQuery("slow_pattern_type", sysPatternTable);
      slowPatternAggGr.query();
      if (slowPatternAggGr.next() && !gs.nil(slowPatternAggGr.getAggregate('MAX', 'sys_created_on')))
          return new GlideDateTime(slowPatternAggGr.getAggregate('MAX', 'sys_created_on'));
  },

  create: function() {
      this.createMappingsIfNeeded("sys_query_pattern");
      this.createMappingsIfNeeded("sys_script_pattern");
  },
  type: 'SlowPatternToScriptsMappingCreator'
};

Sys ID

cd86ed7a530030102e10ddeeff7b1258

Offical Documentation

Official Docs: