Skip to main content

ServiceNow GlideAggregate: using arrays to identify duplicate strings: Identify duplicate values in events/alerts

 in this case, we want to identify when a duplicate occurs more than 2 times: (as a create event followed by a clear event is expected) - checking on additional_info.problem_id:


var sQuery = 'sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()'; duplEvents(sQuery); //--uncomment to run on events //duplAlerts(sQuery); //--uncomment to run on alerts function duplEvents(sQuery) { var grEvents = new GlideAggregate('em_event'); grEvents.addQuery('source', 'DYNATRACE'); if (sQuery != "") { grEvents.addQuery(sQuery); } grEvents.query(); var eventArr = []; while (grEvents.next()) { var sAddInfo = JSON.parse(grEvents.additional_info); var sPrbID = sAddInfo.problem_id; //gs.print(grEvents.message_key); //gs.print(sPrbID); eventArr.push(sPrbID + ""); } eventArr.sort(); gs.print("*************DUPLICATE EVENTS ON PROBLEM ID:"); count_duplicate(eventArr); } function duplAlerts(sQuery) { var grEvents = new GlideAggregate('em_alert'); grEvents.addQuery('source', 'DYNATRACE'); if (sQuery != "") { grEvents.addQuery(sQuery); } grEvents.query(); var eventArr = []; while (grEvents.next()) { var sAddInfo = JSON.parse(grEvents.additional_info); var sPrbID = sAddInfo.problem_id; //gs.print(grEvents.message_key); //gs.print(sPrbID); eventArr.push(sPrbID + ""); } eventArr.sort(); gs.print("*************DUPLICATE ALERTS ON PROBLEM ID:"); count_duplicate(eventArr); } function count_duplicate(a) { var counts = {}; 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] > 2) { gs.print(prop + " counted: " + counts[prop] + " times."); } } gs.print(counts); }
 
 



(ServiceNow ) 

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 )){

Get URL Parameter - server side script (portal or classic UI)

Classic UI : var sURL_editparam = gs . action . getGlideURI (). getMap (). get ( ' sysparm_aparameter ' ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); } Portal : var sURL_editparam = $sp . getParameter ( " sysparm_aparameter " ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); }