How to increase the speed of my code execution time?

Hari1
Mega Sage

Hi,

My code execution time on a average of 15-18 seconds. I need to decrease my code execution time to less than 5 seconds. Below is my code.

var usedByOrgVal = "All";

 var arrFinCount = [];

 var arr = [];

 if (usedByOrgVal == "All") {
     arr = ["operational_status!=6", "operational_status!=6^owned_by!=null", "operational_status!=6^u_in_coverage=Yes", "operational_status!=6^u_complete=Yes", "operational_status!=6^u_correct=Yes", "operational_status!=6^u_in_coverage=No", "operational_status!=6^u_complete=No", "operational_status!=6^u_correct=No", "nameISNOTEMPTY^operational_status!=6^u_resp_orgISNOTEMPTY^NQnameISNOTEMPTY^operational_status!=6^u_resp_orgISEMPTY^assetISEMPTY"];
     filterList(arr);
 }

 function filterList(arrVal) {
     for (var i = 0; i < arrVal.length; i++) {
         var cal = new GlideRecord("cmdb_ci_server");
         cal.addEncodedQuery(arrVal[i]);
         cal.query();
         arrFinCount.push(cal.getRowCount());
     }
 }

 gs.info("arrFinCount: " + JSON.stringify(arrFinCount));

 var obj = {
     Ownership: [{
         Value: arrFinCount[1],
         Percentage: isNaN(((arrFinCount[1] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[1] / arrFinCount[0]) * 100).toFixed(2),
     }],
     Coverage: [{
         InCoverage: arrFinCount[2],
         OutOfCoverage: arrFinCount[5],
         Percentage: isNaN(((arrFinCount[2] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[2] / arrFinCount[0]) * 100).toFixed(2),
     }],
     Completeness: [{
         Complete: arrFinCount[3],
         NotComplete: arrFinCount[6],
         Percentage: isNaN(((arrFinCount[3] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[3] / arrFinCount[0]) * 100).toFixed(2),
     }],
     Correctness: [{
         Correct: arrFinCount[4],
         NotCorrect: arrFinCount[7],
         Percentage: isNaN(((arrFinCount[4] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[4] / arrFinCount[0]) * 100).toFixed(2),
     }],
     ActiveServerCount: [{
         Count: arrFinCount[8]
     }],
 };

 gs.info("obj:" + JSON.stringify(obj));

 return obj;

Can anyone please provide any solution for the above code.

10 REPLIES 10

Ankur Bawiskar
Tera Patron
Tera Patron

@Hari1 

can you try this?

var usedByOrgVal = "All";
var arrFinCount = [];

if (usedByOrgVal == "All") {
    var arr = [
        "operational_status!=6",
        "operational_status!=6^owned_by!=null",
        "operational_status!=6^u_in_coverage=Yes",
        "operational_status!=6^u_complete=Yes",
        "operational_status!=6^u_correct=Yes",
        "operational_status!=6^u_in_coverage=No",
        "operational_status!=6^u_complete=No",
        "operational_status!=6^u_correct=No",
        "nameISNOTEMPTY^operational_status!=6^u_resp_orgISNOTEMPTY^NQnameISNOTEMPTY^operational_status!=6^u_resp_orgISEMPTY^assetISEMPTY"
    ];
    filterList(arr);
}

function filterList(arrVal) {
    var cal = new GlideRecord("cmdb_ci_server");
    var query = arrVal.join('^NQ');
    cal.addEncodedQuery(query);
    cal.query();

    var counts = {};
    while (cal.next()) {
        for (var i = 0; i < arrVal.length; i++) {
            if (cal.match(arrVal[i])) {
                counts[i] = (counts[i] || 0) + 1;
            }
        }
    }

    for (var i = 0; i < arrVal.length; i++) {
        arrFinCount.push(counts[i] || 0);
    }
}

gs.info("arrFinCount: " + JSON.stringify(arrFinCount));

var obj = {
    Ownership: [{
        Value: arrFinCount[1],
        Percentage: isNaN(((arrFinCount[1] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[1] / arrFinCount[0]) * 100).toFixed(2),
    }],
    Coverage: [{
        InCoverage: arrFinCount[2],
        OutOfCoverage: arrFinCount[5],
        Percentage: isNaN(((arrFinCount[2] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[2] / arrFinCount[0]) * 100).toFixed(2),
    }],
    Completeness: [{
        Complete: arrFinCount[3],
        NotComplete: arrFinCount[6],
        Percentage: isNaN(((arrFinCount[3] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[3] / arrFinCount[0]) * 100).toFixed(2),
    }],
    Correctness: [{
        Correct: arrFinCount[4],
        NotCorrect: arrFinCount[7],
        Percentage: isNaN(((arrFinCount[4] / arrFinCount[0]) * 100).toFixed(2)) ? "0.00" : ((arrFinCount[4] / arrFinCount[0]) * 100).toFixed(2),
    }],
    ActiveServerCount: [{
        Count: arrFinCount[8]
    }],
};

gs.info("obj:" + JSON.stringify(obj));

return obj;

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

@Ankur BawiskarThe above code is not working, I see all the queries return 0 and the execution time is 18 seconds. Below is the log.

 

Hari1_0-1737040081204.png

 

 

 

jcmings
Mega Sage

Try pasting this into ChatGPT and asking it to optimize

Bert_c1
Kilo Patron

Add DB index on your custom fields.