Name

global.LicenseCountConfig

Description

No description available

Script

var LicenseCountConfig  = Class.create();
LicenseCountConfig .prototype = {
  
  initialize: function(name, license_type, id) {
  	this.name = name;
  	this.license_type = license_type;
  	this.nonsubscribedusers = 'Non-subscribed Users';
  	this.licensing = 'Licensing';
  	this.Usage = 'Usage';
  	this.license_id = id;
  	this.msg_source = "LicenseCountConfig";
  	
  	this.PURCHASED = "purchased";
  	this.ALLOCATED = "allocated";
  	this.BORROWED = "borrowed";
  	this.CONTRIBUTED = "contributed";
  	this.USAGEANALYTICS_COUNT_CFG = "usageanalytics_count_cfg";
  	this.MONTHLY = "Monthly";
  	this.DAILY = "Daily";
  	this.IH_ROLLING_USAGE = "IH rolling usage";
  	this.IH_NET_NEW_USE_MONTHLY = "Net New Use Monthly for IntegrationHub";
  	this.IH_ROLLING_BORROWED = "IH rolling borrowed";
  	this.IH_ROLLING_CONTRIBUTED = "IH rolling contributed";
  	
  	this.TABLES_USED = "Tables Mapped";
  	this.TABLES_PURCHASED = "Tables Included";
  	
  	this.RECOGNIZED_CFG_TYPES = {};
  	this.RECOGNIZED_CFG_TYPES[this.BORROWED] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.Usage] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.CONTRIBUTED] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.PURCHASED] = this.licensing;
  	this.RECOGNIZED_CFG_TYPES[this.ALLOCATED] = this.licensing;
  	this.RECOGNIZED_CFG_TYPES[this.nonsubscribedusers] = this.licensing;
  	this.RECOGNIZED_CFG_TYPES[this.TABLES_USED] = this.licensing;
  	this.RECOGNIZED_CFG_TYPES[this.TABLES_PURCHASED] = this.licensing;
  	this.RECOGNIZED_CFG_TYPES[this.IH_ROLLING_USAGE] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.IH_NET_NEW_USE_MONTHLY] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.IH_ROLLING_BORROWED] = this.Usage;
  	this.RECOGNIZED_CFG_TYPES[this.IH_ROLLING_CONTRIBUTED] = this.Usage;
  },
  
  createCountCfg: function(type) {
  	cntCfgSysID = this.createOrUpdateCountCfgRecord(type);
  	
  	return cntCfgSysID;
  },
  
  deleteCountCfg: function() {
  	
  	for (var key in this.RECOGNIZED_CFG_TYPES) {
  		if (this.RECOGNIZED_CFG_TYPES.hasOwnProperty(key)) {
  			if (this.countCfgExists(key, this.RECOGNIZED_CFG_TYPES[key]))
  				this._deleteConfigRecord(key, this.RECOGNIZED_CFG_TYPES[key]);
  		}
  	}
  	
  },
  
  _deleteConfigRecord: function(type, defnType) {
  	var cfgGR = this.getCountCfgGR(type, defnType);
  	cfgGR.query();
  	cfgGR.next();
  	cfgGR.deleteRecord();
  	gs.log("Deleted the " + type + " count config entry for subscription " + this.name);
  	
  },
  	
  countCfgExists: function(type, defnType) {
  	var count_cfg = this.getCountCfgGR(type, defnType);
  	return count_cfg.hasNext();
  },
  
  getCountCfgGR: function(type, defnType) {
  	// Return the GR object for count cfg by adding some base query conditions
  	var defID = this.getDefinitionId(type);
  	
  	var count_cfg = new GlideRecord(this.USAGEANALYTICS_COUNT_CFG);
  	count_cfg.addQuery("name", this.name + " " + type);
  	count_cfg.addQuery("active", "true");
  	count_cfg.addQuery('count_type', defnType);
  	count_cfg.addQuery('definition_id', defID);
  	count_cfg.query();
  	return count_cfg;
  
  },

  createOrUpdateCountCfgRecord: function(type) {
  	
  	if (this.RECOGNIZED_CFG_TYPES.indexOf(type) == -1)
  		return "";
  	
  	var cntCfgSysID = "";
  	var logMessage = "";
  	
  	var cfgGR = this.getCountCfgGR(type, this.licensing);
  	
  	if (!cfgGR.next()) {
  		logMessage = "Creating a " + type  + " count config entry for subscription " + this.name;
  		
  		var grTypeCfg = new GlideRecord(this.USAGEANALYTICS_COUNT_CFG);
  		grTypeCfg.name = this.name + " " + type;
  		grTypeCfg.active = true;
  		grTypeCfg.count_type = this.licensing;
  		grTypeCfg.description = this._getDescriptionForLicenseType(type);
  		grTypeCfg.reportable = "false";
  		grTypeCfg.schedule = this._getScheduleForLicenseType(type);
  		grTypeCfg.script = this.getCountScriptForLicenseType(type);
  		grTypeCfg.definition_id = this.getDefinitionId(type);
  		grTypeCfg.exec_time_threshold = '500';
  		grTypeCfg.run_scope = 'global';
  		cntCfgSysID = grTypeCfg.insert();
  		
  	} else {
  		logMessage = "Updating a " + type + " count config entry for subscription " + this.name;
  		
  	try {
  		var dbu = new GlideDBUpdate(this.USAGEANALYTICS_COUNT_CFG);
          var dbq = new GlideDBQuery(this.USAGEANALYTICS_COUNT_CFG);
          dbq.addQuery('definition_id', cfgGR.getValue('definition_id'));
          dbu.setQuery(dbq);
          dbu.setValue('name', this.name + " " + type);
          dbu.setValue('active', true);
          dbu.setValue('count_type', this.licensing);
          dbu.setValue('description', this._getDescriptionForLicenseType(type));
          dbu.setValue('reportable', "false");
          dbu.setValue('schedule', this._getScheduleForLicenseType(type));
          dbu.setValue('script', this.getCountScriptForLicenseType(type));
          dbu.setValue('exec_time_threshold', "500");
          dbu.setValue('run_scope', 'global');
          dbu.execute();
          dbu.close();
          dbq.close();
  		
          cntCfgSysID = cfgGR.getValue('sys_id');
  	
  	} catch (e) {
  		gs.error("LicenseCountConfig: " + "Exception while updating a " + type + " count config entry for subscription " + this.name + e);
  	} finally {
  		dbu.close();
          dbq.close();
  	}
  	}
  	
  	if(JSUtil.notNil(logMessage))
  		gs.log(logMessage, this.msg_source);
  	
  	return cntCfgSysID;
  },
  	
  getDefinitionId: function(type) {
  
  	if (type == this.PURCHASED)
  		return 'LICPURCH' + this.license_id;
  	else if (type == this.ALLOCATED)
  		return 'LICALLOC' + this.license_id;
  	else if (type == this.nonsubscribedusers)
  		return 'LICUNALC' + this.license_id;
  	else if (type == this.TABLES_PURCHASED)
  		return 'LICTBLCT' + this.license_id;
  	else if (type == this.TABLES_USED)
  		return 'LICTBLUD' + this.license_id;
  	else if (type == this.BORROWED)
  		return 'LICBRW' + this.license_id;
  	else if (type == this.Usage)
  		return 'LICUSG' + this.license_id;
  	else if (type == this.CONTRIBUTED)
  		return 'LICCTR' + this.license_id;
  	else if (type == this.IH_ROLLING_USAGE)
  		return 'LICMCU' + this.license_id;
  	else if (type == this.IH_NET_NEW_USE_MONTHLY)
  		return 'LICIHM' + this.license_id;
  	else if (type == this.IH_ROLLING_BORROWED)
  		return 'LICBCU' + this.license_id;
  	else if (type == this.IH_ROLLING_CONTRIBUTED)
  		return 'LICCCU' + this.license_id;
  },
  
  _getScheduleForLicenseType: function(type) {
  	
  	var schedule = this.MONTHLY;
  	
  	if (type == this.ALLOCATED || type == this.TABLES_USED)
  		schedule = this.DAILY;
  	return schedule;
  	
  },
  
  _getDescriptionForLicenseType: function(type) {
  	var description = "Get the count of " + this.name;
  	
  	if (type == this.PURCHASED)
  		description += " purchased monthly";
  	else if (type == this.ALLOCATED) 
  		description += " allocated daily";
  	else if (type == this.nonsubscribedusers)
  		description += " non-subscribed users monthly";
  	else if (type == this.TABLES_PURCHASED)
  		description += " tables included count monthly";
  	else if (type == this.TABLES_USED)
  		description += " tables mapped count daily";
  	else
  		description = "";
  	
  	return description;
  },
  	
  getCountScriptForLicenseType: function(type) {

  	if (type == this.PURCHASED)
  		
  		return "answer = getCount();\n" +
  			"function getCount() {\n" +
  			"	var gr = new GlideRecord('license_details');\n" +
  			"	gr.addQuery('end_date>javascript:gs.beginningOfLastMonth()^license_id=" + this.license_id + "');\n" +
  			"	gr.query();\n" +
  			"	if (gr.next())\n" +
  			"		return parseInt(gr.getValue('count'));\n"+
  			"	else\n" +
  			"		return parseInt('0');\n" +
  			"}";
  	
  	else if (type == this.ALLOCATED)
  		
  			return "answer = getCount();\n" +
  				"function getCount() {\n" +
  				"	var gr = new GlideRecord('license_details');\n" +
  				"	gr.addQuery('end_date>javascript:gs.beginningOfYesterday()^license_id=" + this.license_id + "');\n" +
  				"	gr.query();\n" +
  				"	if (gr.next())\n" +
  				"		return parseInt(gr.getValue('allocated'));\n"+
  				"	else\n" +
  				"		return parseInt('0');\n" +
  				"}";
  	
  	else if (type == this.nonsubscribedusers)
  		
  		return "var NO_ALLOCATION_STATUS = '3';\n" +
  			"var UNALLOCATED_USER_STATUS = '4';\n\n" +
  			"answer = getUnallocatedCount();\n\n" +
  			"function getUnallocatedCount() {\n" +
  			"    var apps = getApplicationsOfLicense();\n\n" +
  			"    var gr = new GlideAggregate('ua_app_usage');\n" +
  			"    gr.addAggregate('count(distinct', 'user');\n" +
  			"    gr.addQuery('app_id', 'IN', apps);\n" +
  			"    gr.addQuery('status', 'IN', NO_ALLOCATION_STATUS + ',' + UNALLOCATED_USER_STATUS);\n" +
  			"    gr.addQuery('sys_created_onBETWEENjavascript:gs.beginningOfLastMonth()@javascript:gs.endOfLastMonth()');\n" +
  			"    var gc = gr.addQuery('fulfill_count', '>', 0);\n" +
  			"    gc.addOrCondition('produce_count', '>', 0);\n" +
  			"    gr.setGroup(false);\n" +
  			"    gr.query();\n\n" +
  			"    if (gr.next()) {\n" +
  			"        return gr.getAggregate('count(distinct', 'user');\n" +
  			"    }\n" +
  			"    return 0;\n" +
  			"}\n\n" +
  			"function getApplicationsOfLicense() {\n" +
  			"    var apps = [];\n\n" +
  			"    var licenseSysId = getLicenseSysId();\n" +
  			"    if (GlideStringUtil.nil(licenseSysId)) {\n" +
  			"        return apps;\n" +
  			"    }\n\n" +
  			"    var gr = new GlideRecord('license_has_app');\n" +
  			"    gr.addQuery('license', licenseSysId);\n" +
  			"    gr.query();\n\n" +
  			"    while(gr.next()) {\n" +
  			"        var appSysId = gr.getValue('app');\n" +
  			"        var appGR = new GlideRecord('licensable_app');\n" +
  			"        appGR.addQuery('sys_id', appSysId);\n" +
  			"        appGR.query();\n\n" +
  			"        if (appGR.next()) {\n" +
  			"            apps.push(appGR.getValue('app_id'));\n" +
  			"        }\n" +
  			"    }\n\n" +
  			"    return apps;\n" +
  			"}\n\n" +
  			"function getLicenseSysId() {\n" +
  			"    var gr = new GlideRecord('license_details');\n" +
  			"    gr.addQuery('license_id', '" + this.license_id + "');\n" +
  			"    gr.query();\n\n" +
  			"    if (gr.next()) {\n" +
  			"        return gr.getValue('sys_id');\n" +
  			"    }\n" +
  			"    return '';\n" +
  			"}";
  	
  	else if (type == this.TABLES_PURCHASED)
  		
  		return "answer = getCount();\n" +
  			"function getCount() {\n" +
  			"	var gr = new GlideRecord('license_details');\n" +
  			"	gr.addQuery('end_date>javascript:gs.beginningOfLastMonth()^license_id=" + this.license_id + "');\n" +
  			"	gr.query();\n" +
  			"	if (gr.next())\n" +
  			"		return parseInt(gr.getValue('table_count'));\n"+
  			"	else\n" +
  			"		return parseInt('0');\n" +
  			"}";
  	
  	else if (type == this.TABLES_USED)
  		
  			return "answer = getCount();\n" +
  				"function getCount() {\n" +
  				"	var gr = new GlideRecord('license_details');\n" +
  				"	gr.addQuery('end_date>javascript:gs.beginningOfYesterday()^license_id=" + this.license_id + "');\n" +
  				"	gr.query();\n" +
  				"	if (gr.next())\n" +
  				"		return parseInt(gr.getValue('tables_used'));\n"+
  				"	else\n" +
  				"		return parseInt('0');\n" +
  				"}";

  },

  type: 'LicenseCountConfig'
};

Sys ID

f77a8ad3eb222100b8f326115206fe4d

Offical Documentation

Official Docs: