Notification not sending for all the case records.

AnandKumar1
Tera Expert

Hi Team,

below the scheduled job I created for notification to send in advanced for given interval time when the certificate is getting expired. Here, for example if i have 4 certificate to be expired in 15days and 30 days then for 1 record alone this is sending. I am not sure when i am missing the for loop. 


Below the script :

var ExpireDateTotal = [];
var gr = new GlideRecord('cmdb_ci_certificate');
gr.addEncodedQuery('valid_to!=empty');
gr.query();
gs.info('certificate query inner loop');
while (gr.next()) {
    var validTo = gr.valid_to;
    var commonname = gr.sys_id;
    var certName = gr.subject_common_name;

    var endDate = new GlideDateTime(gr.valid_to);
    var nowTime = new GlideDateTime();
    gs.info('certificate inner loop');

    var duration = GlideDateTime.subtract(nowTime, endDate);
    var days = parseInt(duration.getNumericValue() / 86400000);
    gs.info('print the days' + days);



    var serverIdsArr = [];

    var relationdata = new GlideRecord('cmdb_rel_ci');
    relationdata.addEncodedQuery("parent.sys_class_name=cmdb_ci_certificate^type=6afd799338a02000c18673032c71b87b");
    relationdata.addQuery('parent', commonname);
    relationdata.query();
    while (relationdata.next()) {
        serverIdsArr.push(relationdata.child.toString());
    }
    gs.info("server ID " + serverIdsArr);

    var serverIdsStr = serverIdsArr.join();
    var splitIds = serverIdsStr.split(',');
    gs.info("server ID join " + serverIdsStr);
    if (serverIdsStr) {
        for (var i = 0; i < splitIds.length; i++) {
            gs.info("Realtionshipinfos3 ------------>" + splitIds[i]);

            var app = new GlideRecord('u_m2m_servers_applications');
            //app.addQuery("u_server", splitIds[i]);
            app.addEncodedQuery('u_server.sys_id=' + splitIds[i]);
            app.query();
         

            while (app.next()) {
                var certificateList = [];
                var applicationSysId = app.u_application.toString();
                gs.info('Application sysID' + applicationSysId);
                var ownedBy = getOwnedByForApplication(applicationSysId);
                var managedByGroup = getManagedByGroupForApplication(applicationSysId);
                gs.info('ownedby Value from while ----->  ' + ownedBy);
                gs.info('managedby Value from while ----->  ' + managedByGroup);

                if (days == 59) {
                    //gs.info("excluding today + 3days and result will be 5th day " + validTo);
                    gs.info("Certificate expires 60 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.60days', gr, managedByGroup, ownedBy);

                } else if (days == 45) {
                    gs.info("Certificate expires 45 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.45days', gr, managedByGroup, ownedBy);

                } else if (days == 30) {

                    gs.info("Certificate expires 30 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.30days', gr, managedByGroup, ownedBy);

                } else if (days == 15) {

                    gs.info("Certificate expires 15 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.15days', gr, managedByGroup, ownedBy);
                } else if (days == 7) {

                    gs.info("Certificate expires 7 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.7days', gr, managedByGroup, ownedBy);
                } else if (days == 1) {

                    gs.info("Certificate expires 1 days from today: " + managedByGroup + "owned by - " + ownedBy + "certificate ID -" + commonname);
                    gs.eventQueue('sn_disco_certmgmt.1day', gr, managedByGroup, ownedBy);
                }
         

            }

         
        }
    }
}

function getOwnedByForApplication(applicationSysId) {
    var ownedBy = '';
    var applicationGR = new GlideRecord('cmdb_ci_service_discovered');
    applicationGR.addQuery('sys_id', applicationSysId);
    applicationGR.query();

    if (applicationGR.next()) {
        ownedBy = applicationGR.owned_by;
        gs.info('ownedby Value ----->  ' + ownedBy);
    }

    return ownedBy;
}

function getManagedByGroupForApplication(applicationSysId) {
    var managedByGroup = '';
    var applicationGR = new GlideRecord('cmdb_ci_service_discovered');
    applicationGR.addQuery('sys_id', applicationSysId);
    applicationGR.query();

    if (applicationGR.next()) {
        managedByGroup = applicationGR.u_managed_by_group;
        gs.info('managedby Value ----->  ' + managedByGroup);
    }

    return managedByGroup;
}
 
Thanks.
1 REPLY 1

Lkharat
Tera Expert

It appears that the script is only sending the notification for one record because the gs.eventQueue function is called within the while (app.next()) loop, which is inside the server IDs loop (the for (var i = 0; i < splitIds.length; i++) loop). If you want to send a notification for each certificate, you should call the gs.eventQueue function after the server IDs loop.