Name
sn_itom_licensing.ITOMLicensingMetaDataStore
Description
metadata APIs, - get spesific category tables no input, return list of tables. - get categories for list of CIs input is list of CIs sysIds, return map - {inputSysId outputSysId, category }
Script
var ITOMLicensingMetaDataStore = Class.create();
ITOMLicensingMetaDataStore.prototype = {
METADATA_TABLE: 'itom_lu_metadata',
CATEGORY_METADATA_TABLE: 'itom_lu_category_metadata',
BUNDLE_MAPPING_TABLE: 'itom_lu_bundle_mappings',
isInitiate: false,
metadataTableNameVSCategory: {},
categoryMetadataTable: {},
initialize: function() {
this.util = new ITOMLicensingUtilsStore();
this.bundleMapping = this.getBundleMapping();
},
getBundleMapping: function(skuType) {
var result = {};
var gr = new GlideRecord(this.BUNDLE_MAPPING_TABLE);
if(skuType)
gr.addQuery('sku.sku', skuType);
gr.query();
while (gr.next()) {
var vs = gr.getValue('value_stream');
vs = vs.split(",");
vs.forEach(function(obj) {
if (result[obj]) {
result[obj].push(gr.getValue('bundle_id'));
} else {
result[obj] = [gr.getValue('bundle_id')];
}
});
}
return result;
},
getServersTables: function() {
return this.getTables("Servers");
},
getPaasTables: function() {
return this.getTables("PaaS");
},
getContainersTables: function() {
return this.getTables("Containers");
},
getTables: function(category) {
var tablesList = [];
var gr = new GlideRecord(this.METADATA_TABLE);
gr.addQuery('category', category);
gr.query();
while (gr.next()) {
tablesList.push(gr.getValue('table'));
}
return tablesList;
},
getTablesForSku: function(category, skuTypeSysId) {
var tablesList = [];
var gr = new GlideRecord(this.CATEGORY_METADATA_TABLE);
gr.addQuery('category', category);
gr.addQuery('sku_type', skuTypeSysId);
gr.query();
while (gr.next()) {
tablesList.push(gr.getValue('table'));
}
return tablesList;
},
initMetadataLists: function(cis) {
if (this.isInitiate)
return;
this.isInitiate = true;
var gr = new GlideRecord(this.METADATA_TABLE);
gr.query();
while (gr.next()) {
this.metadataTableNameVSCategory[gr.getValue('table')] = gr.getValue('category');
}
},
initCategoryMetadataTable: function() {
if (this.isInitiateCategoryMetadata)
return;
this.isInitiateCategoryMetadata = true;
var res = {};
var gr = new GlideRecord(this.CATEGORY_METADATA_TABLE);
gr.query();
while (gr.next()) {
var skus = gr.getValue('sku_type').split(',');
var category = gr.getValue('category');
var table = gr.getValue('table');
skus.forEach(function(sku) {
if (res[sku])
res[sku][table] = category;
else {
var skuObj = {};
skuObj[table] = category;
res[sku] = skuObj;
}
});
}
this.categoryMetadataTable = res;
return;
},
getCategory: function(table) {
var map = this.getCategories([table]);
var category = map[table];
if (!category)
category = '';
return category;
},
getCategories: function(tables, sku) {
if (sku) {
var skuId = this.util.skuSysId[sku];
this.initCategoryMetadataTable();
} else
this.initMetadataLists();
var ans = {};
if (!tables || tables == [])
return ans;
for (var index = 0; index < tables.length; index++) {
var table = tables[index];
var gth = new GlideTableHierarchy(table);
var allParants = gth.getTables();
for (var p = 0; p < allParants.length; p++) {
var curentParent = allParants[p];
var category = (sku) ? this.categoryMetadataTable[skuId][curentParent] : this.metadataTableNameVSCategory[curentParent];
if (category) {
ans[table] = category;
break;
}
}
}
return ans;
},
getCategoryNames: function() {
var licenseInfoList = this.util._getItomLicenseInfo();
if (!licenseInfoList.length) {
gs.error('Could not retreive license information from GlideEntitlement API');
return [];
}
var i;
var categories = [];
for (i = 0; i < licenseInfoList.length; i++) {
var ratioInfo = licenseInfoList[i].ciTypeToSURatioMap || licenseInfoList[i].su_ratio;
if (ratioInfo) {
categories = this.getCategoriesOfSku(ratioInfo);
break;
}
}
if (!categories.length) {
gs.error('No categories were defined from the license information from GlideEntitlement API');
return [];
}
return categories;
},
getCategoryNamesBasedonValueStream: function(valueStream, skuType) {
var licenseInfoList = this.util._getItomLicenseInfo();
if (!licenseInfoList.length) {
gs.error('Could not retreive license information from GlideEntitlement API');
return [];
}
var skuList = this.bundleMapping[valueStream];
var bundleListforSKU = this.getBundleIdFromSkuType(skuType);
if (!skuList) {
gs.error('Could not retreive a list of Bundles for a given valuestream');
return [];
}
var categories = [];
for (var i = 0; i < licenseInfoList.length; i++) {
var sku = licenseInfoList[i];
var ratioInfo = sku.ciTypeToSURatioMap || sku.su_ratio;
if (new global.ArrayUtil().contains(skuList, sku.app_bundle) && new global.ArrayUtil().contains(bundleListforSKU, sku.app_bundle) && ratioInfo) {
if (sku.app_bundle.indexOf(skuType) != -1) {
categories = this.getCategoriesOfSku(ratioInfo);
break;
} else if (skuType == 'itom') {
categories = this.getCategoriesOfSku(ratioInfo);
break;
}
}
}
if (new global.ArrayUtil().contains(categories, this.getCategoryNameForUnknown()) && "health" != valueStream && "hla" != valueStream)
categories = categories.filter(function(category) {
return category != this.getCategoryNameForUnknown();
}, this);
if ('governance' == valueStream)
categories.push('Uncategorized Object');
return categories;
},
getCategoriesOfSku: function(ratioInfo) {
var categories = (Object.keys(ratioInfo)).filter(function(category) {
return category != 'Unknown';
});
return categories;
},
getCategoryNameForUnknown: function() {
return "Unresolved monitored objects";
},
getBundleStreams: function(bundleType) {
var bundleStream = {};
var gr = new GlideRecord(this.BUNDLE_MAPPING_TABLE);
gr.addQuery('bundle_type', bundleType)
gr.query();
while (gr.next()) {
bundleStream[gr.getValue('bundle_id')] = gr.getValue('value_stream').split(',');
}
return bundleStream;
},
getBundleIdFromSkuType: function(sku) {
var skuId = this.util.skuSysId[sku];
var res = [];
var gr = new GlideRecord(this.BUNDLE_MAPPING_TABLE);
gr.addQuery('sku', skuId)
gr.query();
while (gr.next()) {
res.push(gr.getValue('bundle_id'));
}
return res;
},
getBundleIDfromSkuAndBundleType: function(sku, bundleType) {
var skuId = this.util.skuSysId[sku];
var res = [];
var gr = new GlideRecord(this.BUNDLE_MAPPING_TABLE);
gr.addQuery('sku', skuId)
gr.addQuery('bundle_type', bundleType);
gr.query();
while (gr.next()) {
res.push(gr.getValue('bundle_id'));
}
return res;
},
type: 'ITOMLicensingMetaDataStore'
};
Sys ID
4456231b5375301046dfddeeff7b1228