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