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
Post a Comment