Name

global.LicensingHelper

Description

This script prepares data for licensing purposes

Script

var LicensingHelper = Class.create();
LicensingHelper.prototype = {

  serversCounter : undefined,
  cloudApplicationsCounter : undefined,

  initialize: function() {
  	this.serversCounter = new ServersCounter();
  	this.cloudApplicationsCounter = new CloudApplicationsCounter();
  },

  saveRecord : function(num) {
  	var gr = new GlideRecord('sa_server_usage');
  	gr.setValue('number_of_servers', num);
  	gr.setValue('created_on', gs.nowDateTime());
  	gr.insert();
  },

  saveProductCount: function(count) {
  	var licenseUtils = new sn_itom_license.ITOMLicensingUtils();
  	licenseUtils.updateProductCount('Service Mapping', count);
  },

  // This function saves licensing counter for each domain
  // to DB table sa_server_usage, if saveToDB parameter is true
  // Returns: sum of all licensing counters as integer
  // For each domain licensing counter is sum of 2 numbers:
  // 1. Number of servers that are belong to business services
  // 2. Number of applications, hosted on logical datacenters

  saveNumberOfServersInAllDomains : function (saveToDB) {
  	var serversData   = this.serversCounter.getServerCounters();
  	var cloudAppsData = {}; //PRB1170297     this.cloudApplicationsCounter.getCloudApplicationCounters();

  	var res = {};
  	var domain;

  	for (domain in serversData)
  		if (serversData.hasOwnProperty(domain))
  				res[domain] = serversData[domain];
  	for (domain in cloudAppsData)
  		if (cloudAppsData.hasOwnProperty(domain)) {
  			if (res.hasOwnProperty(domain))
  				res[domain] += cloudAppsData[domain];
  			else
  				res[domain] = cloudAppsData[domain];
  		}

  	var total = 0;
  	var noData = true;

  	for (domain in res)
  		if (res.hasOwnProperty(domain)) {
  			noData = false;
  			total += res[domain];
  			if (saveToDB) {
  				var currentDomain = GlideSession.get().getCurrentDomainID();
  			    GlideSession.get().setDomainID(domain);
  				this.saveRecord(res[domain]);
  			    GlideSession.get().setDomainID(currentDomain);
  			}
  		}
  	if (saveToDB) {
  		if (noData)
  			this.saveRecord(0);

  		this.saveProductCount(total);
  	}

  	return total;
  },

  //This function prepares report about all objects that are
  //included to licensing counters for verification purposes.
  //Returns: Javascript object with domain SysIDs as properties,
  //the value of each one is array of SysIDs of CIs, that belong
  //to appropriate domain and included to licensing counter.
  getReport : function() {
  	var serversData   = this.serversCounter.getServers();
  	var cloudAppsData = {}; //PRB1170297     this.cloudApplicationsCounter.getCloudApplications();

  	var res = {};
  	var domain;

  	for (domain in serversData)
  		if (serversData.hasOwnProperty(domain))
  				res[domain] = serversData[domain];


  	for (domain in cloudAppsData)
  		if (cloudAppsData.hasOwnProperty(domain)) {
  			if (domain in res) {
  				for (var n = 0; n < cloudAppsData[domain].length; n++)
  					res[domain][res[domain].length] = cloudAppsData[domain][n];
  			}
  			else
  				res[domain] = cloudAppsData[domain];
  		}
  	return res;
  },

  //This function prints detailed report about CIs, that
  //are included to licensing counter, to log.
  //Can be invoked on instance from background script.
  logReport : function() {
  	var data = this.getReport();
  	var total = 0;

  	for (var domain in data)
  		if (data.hasOwnProperty(domain)) {
  			gs.log('Domain: ' + domain);
  			var num = 1;
  			total += data[domain].length;
  			for (var i = 0; i < data[domain].length; i++) {
  				var info = data[domain][i];
  				gs.log('    ' + num + ': ' + info.sys_id + '    ' + info.name + '    ' + info.sys_class_name);
  				num++;
  			}
  		}
  	gs.log('TOTAL: ' + total);
  },

  type: 'LicensingHelper'
};

Sys ID

8cd30542f35a32003c37ae4716612bf2

Offical Documentation

Official Docs: