Prevent high volume spam api calls on task table: my version for Incident table

 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

Popular posts from this blog

Running transform maps asynchronously

GlideRecord setValue

Post a command to the ECC queue for the mid server to initiate a powershell file copy