Skip to main content

ServiceNow ARRAYS: looking for matching values in alerts and events (e.g. problemID)

 (ServiceNow )


gs.info("checking list of today's Alerts by common problemID"); var grAlerts=new GlideRecord('em_alert'); grAlerts.addQuery('source', 'SGO-Dynatrace'); grAlerts.addEncodedQuery('sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()'); grAlerts.query(); grAlerts.orderBy('message_key'); gs.info('TOTAL SGO ALERTS FOR TODAY: ' + grAlerts.getRowCount()); var dupl_prbID_arr = []; var dupl_cmdbci_arr = []; while (grAlerts.next()){ var sAddInfo=JSON.parse(grAlerts.additional_info); var sProblemID=sAddInfo.ProblemID+""; //gs.info('message key=' + grAlerts.message_key + '; ProblemID=' + sProblemID); dupl_cmdbci_arr.push(grAlerts.cmdb_ci+""); dupl_prbID_arr.push(sProblemID); } dupl_prbID_arr.sort(); dupl_cmdbci_arr.sort(); count_duplicate(dupl_prbID_arr, 'sProblemID', 1, 'alerts'); gs.info('******************************************************************************'); count_duplicate(dupl_cmdbci_arr, 'configuration item', 1, 'alerts'); gs.info('******************************************************************************'); var grEvents=new GlideRecord('em_event'); grEvents.addQuery('source', 'SGO-Dynatrace'); grEvents.addNotNullQuery('alert'); grEvents.addEncodedQuery('sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()'); grEvents.query(); grEvents.orderBy('alert'); gs.info('TOTAL SGO EVENTS FOR TODAY: ' + grEvents.getRowCount()); var dupl_prbID_arr_2 = []; while (grEvents.next()){ var sAddInfo_event=JSON.parse(grEvents.additional_info); var sProblemID_event=sAddInfo_event.ProblemID+""; dupl_prbID_arr_2.push(sProblemID_event); } dupl_prbID_arr_2.sort(); count_duplicate(dupl_prbID_arr_2, 'sProblemID_event', 2, 'events'); function count_duplicate (a, fieldBeingChecked, iDuplicateThreshold, ticketType ) { var iCounter=0; var counts = {}; var bLog=true; //bDebug=false; var bBreak = false; for (ic = 0; ic < a.length; ic++) { if (counts[a[ic]]) { counts[a[ic]] += 1; } else { counts[a[ic]] = 1; } } for (prop in counts) { if (counts[prop] >iDuplicateThreshold) { if (bLog) { gs.info(fieldBeingChecked + ': ' + prop + " counted: " + counts[prop] + " times"); iCounter++; } if (bBreak) { gs.info('BREAK statement enabled', 'SIDTINCPRB:_count_duplicate'); break; } } } // gs.info(fieldBeingChecked+': DUPLICATE COUNTS::' + counts.length); gs.info(fieldBeingChecked+': DUPLICATE COUNTS::' + iCounter + ' groups of ' + ticketType + ' affected'); }

Comments

Popular posts from this blog

ServiceNow check for null or nil or empty (or not)

Haven't tested these all recently within global/local scopes, so feel free to have a play! option 1 use an encoded query embedded in the GlideRecord , e.g.  var grProf = new GlideRecord ( 'x_cls_clear_skye_i_profile' ); grProf . addQuery ( 'status=1^ owner=NULL ' ); grProf . query (); even better use the glideRecord  addNotNullQuery or addNullQuery option 2 JSUtil.nil / notNil (this might be the most powerful. See this link ) example: if ( current . operation () == 'insert' && JSUtil . notNil ( current . parent ) && ! current . work_effort . nil ())  option 3 there might be times when you need to get inside the GlideRecord and perform the check there, for example if the code goes down 2 optional routes depending on null / not null can use gs.nil : var grAppr = new GlideRecord ( 'sysapproval_approver' ); var grUser = new GlideRecord ( 'sys_user' ); if ( grUser . get ( 'sys_id' , current . approver )){...

Code a pause/wait - gs.sleep or gs.wait alternative, pause script for specified seconds (timer)

Code a pause/wait - gs.sleep / gs.wait alternative, pause script for specified seconds (timer)  e.g. 10 seconds: do_sleep ( 10000 ); function do_sleep ( milliseconds ) { var start = new Date (). getTime (); for ( var i = 0 ; i < 1e7 ; i ++) { if (( new Date (). getTime () - start ) > milliseconds ){ gs . print ( 'waking up!' ); break ; } } }