Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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.