Name

global.PatternDependecyExporter

Description

This PatternDependecyExporter include the business logic of export pattern depended data

Script

var PatternDependecyExporter = Class.create();

/*
- Shared libraries
- Extension sections
- Pre-sensor scripts
- Post-sensor scripts
- Pre-launch scripts
- Deletion strategies
- Classification records and triggering probe records
- Custom parsing strategies
- Custom operations
- Custom operations params
- Pre-SM task definitions
- Related CIs definitions
- Tracked files
- Serverless input parameters
*/

PatternDependecyExporter.prototype = {
  
  DEPENDED_TABLES: {
      SA_PATTERN: 'sa_pattern',
      SA_PATTERN_EXTENSION: 'sa_pattern_extension',
      SA_CI_TO_PATTERN: 'sa_ci_to_pattern',
      SA_PATTERN_PREPOST_SCRIPT: 'sa_pattern_prepost_script',
      DISCOVERY_CLASSIFIER_PROBE: 'discovery_classifier_probe',
      DISCOVERY_CLASSY: 'discovery_classy',
      SA_TRACKED_FILES_DEFINITION: 'sa_tracked_file_definition',
      SA_CUSTOM_OPERATION: 'sa_custom_operation',
      SA_CUSTOM_OPERATION_PARAM: 'sa_custom_operation_param',
      SA_CUSTOM_PARSING_STRATEGY: 'sa_custom_parsing_strategy',
      DISCOVERY_PTRN_LNCH_PARAM_DEF: 'discovery_ptrn_lnch_param_def',
      SA_PRE_TASK_SCRIPT: 'sa_pre_task_script'
  },
  
  
  initialize: function(patternList, publisher, tracker, intervalPercent, logger) {
      this.patternList = patternList;
      this.publisher = publisher;
      this.logger = logger;
      this.tracker = tracker;
      this.intervalPercent = intervalPercent;
      
  },
  
  exportData: function() {
     for(var patternIndex in this.patternList) {
         var patternSysId = this.patternList[patternIndex];
         this.logger.log("Exporting dependencies for pattern: " + this._getPatternName(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getPatternRecord(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getPrePostRecords(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishMultiple(this.getExtensionRecords(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getExtensionReferenceRecords(patternSysId), false, true, 'extension', 'pattern');
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getDeletionStrategies(patternSysId),false, true, 'ci_type', 'pattern');
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getTriggerProbes(patternSysId));
         this.publisher.publishSingle(this.getDiscoveryClassyForTriggerProbes(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getTrackedFileDefintions(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishMultiple(this.getCustomOperationsParsingStrategies(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent*2);
         this.publisher.publishSingle(this.getServerlessInputParameters(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         /* 
          We need to avoid export for table that exist only when Service Mapping plugin installed
         */
         if(GlidePluginManager.isActive('com.snc.service-mapping'))
             this.publisher.publishSingle(this.getPreSmTaskDefinitions(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
         this.publisher.publishSingle(this.getSharedLibsRecords(patternSysId));
         this.tracker.incrementPercentComplete(this.intervalPercent);
     }
  },
  
  getPatternRecord: function(patternId){
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN);
      gr.addQuery('active', true);
      gr.addQuery('sys_id', patternId);
      gr.query();
      return gr;   
  },
  
  getPrePostRecords: function(patternId) {
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN_PREPOST_SCRIPT);
      gr.addQuery("active", true);
      gr.addQuery("pattern", 'CONTAINS', patternId);
      gr.query();
      return gr;
  },
  
  getSharedLibsRecords: function(patternId){
      var pl = new SNC.GlidePatternLibrary();
      var listOfLibs = JSON.parse(pl.getPatternLibraries(patternId));
      return this.__getLibsRecords(listOfLibs);
  },
  
  __getExtensionLibsRecords: function(libraryId){
      var pl = new SNC.GlidePatternLibrary();
      var listOfLibs = JSON.parse(pl.getLibraryLibraries(libraryId));
      return this.__getLibsRecords(listOfLibs);
  },
  
  __getLibsRecords: function(listOfLibs){
      if (!(listOfLibs instanceof Array) && listOfLibs !== null) 
          listOfLibs = [listOfLibs];
          
      if (listOfLibs.length > 0) {
          var grSharedLibs = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN);
          grSharedLibs.addQuery('active', true);
          grSharedLibs.addQuery('sys_id', listOfLibs);
          grSharedLibs.query();
          
          return grSharedLibs;
      }
      return null;
  },
  
  getExtensionRecords: function(patternId){
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN_EXTENSION);
      gr.addQuery('active', true);
      gr.addQuery('pattern', patternId);
      gr.query();
      var patternExtesnions = [];
      while (gr.next()) {
          var grExt = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN);
          grExt.addQuery('sys_id', gr.extension);
          grExt.query();
          patternExtesnions.push(grExt);
          var extensionLibs = this.__getExtensionLibsRecords(gr.extension);
          if (extensionLibs !== null){
              patternExtesnions.push(extensionLibs);
          }
      }
      
      return patternExtesnions;      
  },
  
  getExtensionReferenceRecords: function(patternId){
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN_EXTENSION);
      gr.addQuery('active', true);
      gr.addQuery('pattern', patternId);
      gr.query();
      return gr;      
  },
  
  getDeletionStrategies: function(patternId) {
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_CI_TO_PATTERN);
      gr.addQuery('pattern', patternId);
      gr.query();
      return gr;      
  },
  
  getTriggerProbes: function(patternId) {
      var gr = new GlideRecord(this.DEPENDED_TABLES.DISCOVERY_CLASSIFIER_PROBE);
      gr.addQuery('pattern', patternId);
      gr.query();
      return gr;      
  },
  
  getDiscoveryClassyForTriggerProbes: function(patternId) {
      var grTriggerProbes = this.getTriggerProbes(patternId);
      var arrClassy = [];
      
      while (grTriggerProbes.next()){
          arrClassy.push(grTriggerProbes.getValue("classy"));
      }
      
      if (!arrClassy || arrClassy.length < 1)
          return null;
      
      var grDiscoClassy = new GlideRecord(this.DEPENDED_TABLES.DISCOVERY_CLASSY);
      grDiscoClassy.addQuery("sys_id", arrClassy);
      grDiscoClassy.query();
      if (grDiscoClassy.getRowCount() > 0)
          this.logger.log("Exporting discovery_classy files, got: " + grDiscoClassy.getRowCount());
      
      return grDiscoClassy;
  },
  
  getTrackedFileDefintions: function(patternId) {
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_TRACKED_FILES_DEFINITION);
      gr.addQuery('pattern', patternId);
      gr.query();  
      return gr;      
  },
  
  getCustomOperationsParsingStrategies: function(patternId) {
      var pl = new SNC.GlidePatternLibrary();
      var result = JSON.parse(pl.getCustomOperationsAndStrategies(patternId));
      gs.log(result);
      if (result !== null && Object.keys(result).length > 0) {
          var glideResult = [];
          var listOfOperations = result['CUSTOM_OPERATIONS'][1];
          var listOfStrategies = result['CUSTOM_STRATEGIES'][1];
          if (!(listOfOperations instanceof Array) && listOfOperations !== null) 
              listOfOperations = [listOfOperations];
          
          if (!(listOfStrategies instanceof Array) && listOfStrategies !== null) 
              listOfStrategies = [listOfStrategies];
          
          if (listOfOperations.length > 0) {
              var grCustomOperation = new GlideRecord(this.DEPENDED_TABLES.SA_CUSTOM_OPERATION);
              grCustomOperation.addQuery('active', true);
              grCustomOperation.addQuery('sys_id', listOfOperations);
              grCustomOperation.query();
              
              if (grCustomOperation.getRowCount() > 0)
                  this.logger.log("Exporting custom operations, got: " + grCustomOperation.getRowCount());
              
              glideResult.push(grCustomOperation);
              
              var grCustomOperationParams = new GlideRecord(this.DEPENDED_TABLES.SA_CUSTOM_OPERATION_PARAM);
              grCustomOperationParams.addQuery('operation', listOfOperations);
              grCustomOperationParams.query();
              
              if (grCustomOperationParams.getRowCount() > 0)
                  this.logger.log("Exporting custom operations paramters, got: " + grCustomOperationParams.getRowCount());
              
              glideResult.push(grCustomOperationParams);
              
          }
          
          if (listOfStrategies.length > 0) {
              var grStrategies = new GlideRecord(this.DEPENDED_TABLES.SA_CUSTOM_PARSING_STRATEGY);
              grStrategies.addQuery('active', true);
              grStrategies.addQuery('sys_id', listOfStrategies);
              grStrategies.query();
              
              if (grStrategies.getRowCount() > 0)
                  this.logger.log("Exporting custom strategies, got: " + grStrategies.getRowCount());
              
              glideResult.push(grStrategies);
          }
          
          return glideResult;
          
      } 
          
      return null;
  },
 
  getServerlessInputParameters: function(patternId) {
      var gr = new GlideRecord(this.DEPENDED_TABLES.DISCOVERY_PTRN_LNCH_PARAM_DEF);
      gr.addQuery('pattern', patternId);
      gr.query();
      return gr; 
  },
  
  getPreSmTaskDefinitions: function(patternId) {
      var patternCiType = this._getPatternCiType(patternId);
      if (patternCiType !== null) {
          var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PRE_TASK_SCRIPT);
          gr.addQuery('ci_types', patternCiType);
          gr.query();
          return gr; 
      }else
          return null;

  },
  
  _getPatternCiType: function(patternId){
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN);
      gr.addQuery('sys_id', patternId);
      gr.query();
      
      if(gr.next())
          return gr.ci_type;
      else
          return null; 
  },
  
  _getPatternName: function(patternId){
      var gr = new GlideRecord(this.DEPENDED_TABLES.SA_PATTERN);
      if (gr.get(patternId))
          return gr.name;
      return null;
  },
  
  type: 'PatternDependecyExporter'
};

Sys ID

f224fdf6930203008a2e35bb357ffbd9

Offical Documentation

Official Docs: