condition for scheduled job is not working.

AnandKumar1
Tera Expert

Hi,
i have created a scheduled job for cmdb_ci_certificate table. The main objective is based on the valid to date i have to send notification to application PO and managed by group. 

In the certificate records based on the relationship server, the related application details will be visible in related list (Application tab). which that alone customized using sys_relationship. 

When i try in background script the days which i am calculating for the notification is not working. Until that i am able to execute the logs. 


 

AnandKumar1_0-1707230454780.png

 

 

var gr = new GlideRecord('cmdb_ci_certificate');
gr.addEncodedQuery('valid_to!=empty');
gr.query();
gs.log('certificate query inner loop');
while (gr.next()) {
    var validTo = gr.valid_to;
    var commonname = gr.sys_id;

    var endDate = new GlideDateTime(gr.valid_to);
    var nowTime = new GlideDateTime();
    gs.log('certificate inner loop');
    var duration = GlideDateTime.subtract(nowTime, endDate);
    var days = parseInt(duration.getNumericValue() / 86400000);
    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.next();
while (relationdata.next()) {
        serverIdsArr.push(relationdata.child.toString());
    }
    var serverIdsStr = serverIdsArr.join();
    var splitIds = serverIdsStr.split(',');
    if (serverIdsStr) {
        for (var i = 0; i < splitIds.length; i++) {
            gs.info("Realtionshiplogs3 ------------>" + splitIds[i]);
           
            var app = new GlideRecord('u_m2m_servers_applications');
            app.addQuery("u_server", splitIds[i]);
            app.query();
            var applicationsArr = [];

            while (app.next()) {
                var applicationSysId = app.u_application.toString();
                var ownedBy = getOwnedByForApplication(applicationSysId);
                var managedByGroup = getManagedByGroupForApplication(applicationSysId);

                applicationsArr.push({
                    u_application: applicationSysId,
                    ownedBy: ownedBy,
                    managedByGroup: managedByGroup
                });
            }
            for (var k = 0; k < applicationsArr.length; k++) {
                var applicationObj = applicationsArr[k];
               
                gs.print("  Application Sys ID: " + applicationObj.u_application);
                gs.print("  Owned By: " + applicationObj.ownedBy);
                gs.print("  Managed By Group: " + applicationObj.managedByGroup);
            }
             // ***************Able to execute the code till here ****************** //
            if (days == 59) {
                gs.print("excluding today + 3days and result will be 5th day " + validTo);
                gs.eventQueue('sn_disco_certmgmt.60 Days', managedByGroup, ownedBy, applicationsArr);
            }
            if (days == 45) {
                gs.print("Certificate expires 45 days from today: " + validTo);
                gs.eventQueue('sn_disco_certmgmt.45 Days', managedByGroup, ownedBy, applicationsArr);

            }
            if (days == 30) {

                gs.print("Certificate expires 30 days from today: " + validTo);
                gs.eventQueue('sn_disco_certmgmt.30 Days', managedByGroup, ownedBy, applicationsArr);

            }
            if (days == 15) {

                gs.print("Certificate expires 15 days from today: " + validTo);
                gs.eventQueue('sn_disco_certmgmt.15 Days', managedByGroup, ownedBy, applicationsArr);
            }
            if (days == 7) {

                gs.print("Certificate expires 7 days from today: " + validTo);
                gs.eventQueue('sn_disco_certmgmt.7 Days', managedByGroup, ownedBy, applicationsArr);
            }
            if (days == 1) {

                gs.print("Certificate expires 1 days from today: " + validTo);
                gs.eventQueue('sn_disco_certmgmt.1 Day', managedByGroup, ownedBy, applicationsArr);
            }

            for (var j = 0; j < applicationsArr.length; j++) {
                var ownedBy = applicationsArr[j].ownedBy;
                var managedByGroup = applicationsArr[j].managedByGroup;
                gs.info('Owned By for Application ' + applicationsArr[j].u_application + ': ' + 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.toString();
    }

    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.toString();
    }

    return managedByGroup;
}
 
Thanks.
2 REPLIES 2

Mark Manders
Mega Patron

Which value is your variable 'days' returning? add gs.log('Days: ' + days);

 

parseInt will truncate to the nearest lower integer, after you make days from the milliseconds. This could cause mismatches. Maybe use 'Math.round()' so you get the nearest whole number.

 


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

Hi Mark,

Thanks for your email. Without my script lines, from line number 14 to 52.. arrays which i am using for getting the PO and managed by group. Excluding those if i try then its working.. Do i missing logic from which i used betwee 14 to 52?