condition:
!gs.hasRole('itil') || !gs.isInteractive()
script:
(function executeRule(current, previous /*null when async*/ ) {
//--see STRY0010718 for full background "Pentest - Limits on non-ITIL user API Calls"
//--CONDITION: !gs.hasRole('itil') || !gs.isInteractive()
var thresholdPeriod = parseInt(gs.getProperty('integ.threshold.period')); //--in seconds
var maxTransactions = parseInt(gs.getProperty('integ.threshold.value')); //--max allowed transactions
var bDebug = (gs.getProperty('integ.threshold.debug_logging') == 'true');
if (bDebug) {
gs.log(current.number + '; user: ' + gs.getUserName() + '; thresholdPeriod: ' + thresholdPeriod + ';maxTransactions: ' + maxTransactions + '; isInteractive: ' + gs.isInteractive() + '; user has itil role: ' + gs.hasRole('itil'), 'busRule: MTH Limit API Calls');
}
var grINC = new GlideRecord('incident');
var qryStr = 'opened_by=' + gs.getUserID();
qryStr += '^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()';
grINC.addEncodedQuery(qryStr);
grINC.orderByDesc('number');
grINC.query();
var icount = grINC.getRowCount();
if (icount > 0 && (icount >= maxTransactions)) {
if (grINC.next()) {
var dateBack = new GlideDateTime();
var dateINC = new GlideDateTime(grINC.sys_created_on);
var secondsElapsed = gs.dateDiff(dateINC, dateBack, true);
if (bDebug) {
gs.log(current.number + '; count: ' + icount + '; maxTransactions: ' + maxTransactions, 'busRule: MTH Limit API Calls');
}
if (secondsElapsed < thresholdPeriod) {
gs.logError(current.number + '; user: ' + gs.getUserName() + '; Number of permitted Transactions per thresholdPeriod [' + thresholdPeriod + ' ] seconds has been exceeded for table: INCIDENT', 'busRule: MTH Limit API Calls');
current.setAbortAction(true);
}
}
}
})(current, previous);
Comments
Post a Comment