We're reclaiming inactive PDIs to keep them available for active builders. Learn what's changing, who's affected, and how to protect your work. Read More

Script to calculate numeric value

sukran
Mega Sage

Script query return 3 numeric value for one record size value

Requirement is that , we need to calculate (add) all these and update the total through BR

 

sukran_0-1721295477878.png

 

2 ACCEPTED SOLUTIONS

hi @sukran 

Please try the below code its working for me i have tried the same in PDI .

var arr = [];
var arr1 = [];
var totalSum=0;
var gr = new GlideRecord('cmdb_ci_computer');
gr.addQuery('sys_id', '79f66bd31b6dc8147fcc202a2d4bcbae');
gr.query();
while (gr.next()) {
    var compsys = gr.sys_id;
    var gr1 = new GlideRecord('cmdb_ci_disk');
    gr1.addQuery('computer', compsys);
    gr1.query();
    while (gr1.next()) {
        var siz = gr1.size;
        var fsiz = parseInt(siz);
        arr.push(fsiz);
        gs.info(arr);
    }
    var val = arr.split(",");
    for (i = 0; i < arr.length; i++){
        totalSum += arr[i];
       
    }
   gs.info(totalSum);
}

 

Please try to run it in background first.

 

Thank you!

Vishakha Yadav

View solution in original post

Thanks ,. this information helps and now i understand what you are struggling with.

Here is a script that will work

var totalSize = 0;
var gr = new GlideRecord("cmdb_ci_disk");
gr.addEncodedQuery("computer=5f9b83bfc0a8010e005a2b3212c9dc07"); //use sys_id of computer you want to add
gr.query();
while (gr.next()) {
   gs.print(gr.size);
   var s = parseFloat(gr.size.toString().replace(/GB/g, ""));
   totalSize = totalSize + s
}
gs.print(totalSize);
-Anurag

View solution in original post

12 REPLIES 12

@Anurag Tripathi   the table is cmdb_ci_disk and below screenshot Im query one computer record ( 138) and the size having 3 values (500 , 15, 150) gb

 

Those values needs to count total as( 500+15+150) 

 

sukran_0-1721301247604.png

 

hi @sukran 

Please try the below code its working for me i have tried the same in PDI .

var arr = [];
var arr1 = [];
var totalSum=0;
var gr = new GlideRecord('cmdb_ci_computer');
gr.addQuery('sys_id', '79f66bd31b6dc8147fcc202a2d4bcbae');
gr.query();
while (gr.next()) {
    var compsys = gr.sys_id;
    var gr1 = new GlideRecord('cmdb_ci_disk');
    gr1.addQuery('computer', compsys);
    gr1.query();
    while (gr1.next()) {
        var siz = gr1.size;
        var fsiz = parseInt(siz);
        arr.push(fsiz);
        gs.info(arr);
    }
    var val = arr.split(",");
    for (i = 0; i < arr.length; i++){
        totalSum += arr[i];
       
    }
   gs.info(totalSum);
}

 

Please try to run it in background first.

 

Thank you!

Vishakha Yadav

Thanks ,. this information helps and now i understand what you are struggling with.

Here is a script that will work

var totalSize = 0;
var gr = new GlideRecord("cmdb_ci_disk");
gr.addEncodedQuery("computer=5f9b83bfc0a8010e005a2b3212c9dc07"); //use sys_id of computer you want to add
gr.query();
while (gr.next()) {
   gs.print(gr.size);
   var s = parseFloat(gr.size.toString().replace(/GB/g, ""));
   totalSize = totalSize + s
}
gs.print(totalSize);
-Anurag

@Anurag Tripathi  Yes it works .. Handsoff 🙏

With the example screenshot you posted, what would you expect the value to be:

- 665, what you will get from the code above

- or 650.015

 

You will have a mix of MB, GB and TB in the individual drive sizes, which, I'm assuming, you need to account for.