Name
sn_grc.LicenseStrategy
Description
No description available
Script
var LicenseStrategy = Class.create();
LicenseStrategy.prototype = {
initialize: function() {
},
updateLightUserAudit: function(tableName, operation, user) {
var operationName = this._getOperationField(operation);
var timeStamp = this.getCurrentMonthAccrualPeriod();
var gr = new GlideRecord("sn_grc_light_user_audit");
gr.addQuery("table_name", tableName);
gr.addQuery("user", user);
gr.addQuery("accrual_period", timeStamp);
gr.query();
if (gr.next()) {
var operationValue = gr.getValue(operationName);
gr.setValue(operationName, parseInt(operationValue) + 1);
gr.update();
} else {
this._createLiteUserRecord(tableName, user, timeStamp, operationName);
}
},
updateUniqueUserTable: function(user) {
var timeStamp = this.getCurrentMonthAccrualPeriod();
this.addToGRCUsageTable(user, timeStamp);
},
copyLightUserPrevDayTableData: function() {
var lightUserUsageEntry = new GlideRecord("sn_grc_light_user_audit");
var g1 = new GlideDateTime();
g1.addDaysUTC(-1);
var g2 = new GlideDateTime(g1.getDate() + " 00:00:00");
lightUserUsageEntry.addQuery("sys_updated_on", ">=", g2);
lightUserUsageEntry.query();
while (lightUserUsageEntry.next()) {
this._addLightUserToGRCUsageTable(lightUserUsageEntry.user, lightUserUsageEntry.accrual_period);
}
},
copyPrevDayTableData: function() {
var uaUsageEntry = new GlideRecord("ua_app_usage");
uaUsageEntry.addQuery("produce_count", "!=", 0);
uaUsageEntry.addQuery("app_id", 'IN', this._getApps());
var g1 = new GlideDateTime();
g1.addDaysUTC(-1);
var g2 = new GlideDateTime(g1.getDate() + " 00:00:00");
uaUsageEntry.addQuery("sys_updated_on", ">=", g2);
uaUsageEntry.query();
while (uaUsageEntry.next()) {
this.addToGRCUsageTable(uaUsageEntry.user, uaUsageEntry.time_stamp);
}
},
updateUniqueUsageTable: function(asmt) {
var user;
if (asmt.getTableName() == 'asmt_assessment_instance')
user = asmt.user;
else
user = asmt.assigned_to;
var timeStamp = this.getCurrentMonthAccrualPeriod();
this.addToGRCUsageTable(user, timeStamp);
},
getLastMonthAccrualPeriod: function() {
var month = new GlideDateTime(gs.beginningOfLastMonth()).getMonthLocalTime();
var year = new GlideDateTime(gs.beginningOfLastMonth()).getYearLocalTime();
var timeStamp = year + "-" + month;
if (month < 10)
timeStamp = year + "-0" + month;
return timeStamp;
},
_createLiteUserRecord: function(tableName, user, timeStamp, operationName) {
try {
gr = new GlideRecord("sn_grc_light_user_audit");
gr.initialize();
gr.setValue("table_name", tableName);
gr.setValue("user", user);
gr.setValue(operationName, 1);
gr.setValue("accrual_period", timeStamp);
gr.insert();
} catch (e) {}
},
_getOperationField: function(operation) {
if (operation == "update") {
return "update_count";
} else if (operation == "insert") {
return "insert_count";
} else if (operation == "delete") {
return "delete_count";
}
},
_hasUniqueUserUsageEntry: function(user, accrual_period) {
var usageEntry = new GlideRecord(this.uniqueUserTableName);
usageEntry.addQuery("user", user);
usageEntry.addQuery("accrual_period", accrual_period);
usageEntry.setLimit(1);
usageEntry.query();
return usageEntry.hasNext();
},
_createUniquerUserUsageRecord: function(user, accrual_period, isLiteuser) {
try {
var usageEntry = new GlideRecord(this.uniqueUserTableName);
usageEntry.setValue("user", user);
usageEntry.setValue("accrual_period", accrual_period);
usageEntry.setValue("is_light_user", isLiteuser);
usageEntry.insert();
} catch (e) {}
},
_getUniqueUserUsageEntry: function(user, accrual_period) {
var usageEntry = new GlideRecord(this.uniqueUserTableName);
usageEntry.addQuery("user", user);
usageEntry.addQuery("accrual_period", accrual_period);
usageEntry.setLimit(1);
usageEntry.query();
if (usageEntry.next())
return usageEntry;
else
return null;
},
_addLightUserToGRCUsageTable: function(user, accrual_period) {
if (!this._hasUniqueUserUsageEntry(user, accrual_period)) {
this._createUniquerUserUsageRecord(user, accrual_period, true);
}
},
addToGRCUsageTable: function(user, accrual_period) {
//Check if the user entry exists in sn_grc_unique_user_usage and insert if not exists
if (this._hasUniqueUserUsageEntry(user, accrual_period)) {
var usageEntry = this._getUniqueUserUsageEntry(user, accrual_period);
if (usageEntry.is_light_user == true && this._isOperator(user)) {
usageEntry.setValue("is_light_user", false);
usageEntry.update();
}
} else {
this._createUniquerUserUsageRecord(user, accrual_period, false);
}
},
getCurrentMonthAccrualPeriod: function() {
var month = new GlideDateTime(gs.beginningOfThisMonth()).getMonthLocalTime();
var year = new GlideDateTime(gs.beginningOfThisMonth()).getYearLocalTime();
var timeStamp = year + "-" + month;
if (month < 10)
timeStamp = year + "-0" + month;
return timeStamp;
},
_getApps: function() {
var apps = [];
var m2mOfApplicationFamilyApplications = new GlideRecord("sn_grc_m2m_family_application");
m2mOfApplicationFamilyApplications.addQuery("licensable_application_family", this.appFamilyId);
m2mOfApplicationFamilyApplications.addQuery("application_for_licensing.active", true);
m2mOfApplicationFamilyApplications.query();
while (m2mOfApplicationFamilyApplications.next()) {
var pluginId = m2mOfApplicationFamilyApplications.application_for_licensing.application_name.scope;
if (!gs.nil(pluginId)) {
pluginId = pluginId.replace("com.", "");
apps.push(pluginId);
}
}
return apps;
},
_isOperator: function(user) {
var gr = new GlideRecord('sys_user_has_role');
gr.addQuery('user', user);
gr.addQuery('role.name', 'sn_grc.business_user');
gr.query();
return gr.hasNext();
},
type: 'LicenseStrategy'
};
Sys ID
1395d2a8c71130100a079e0703c260c3