FailedInstances

Executes a test for all integration instances available and returns detailed information about succeeded and failed integration instances.

javascript · Common Scripts

Source

var INTERNAL_MODULES_BRANDS = ['Scripts', 'Builtin', 'testmodule'];

var failedInstances = [];
var all = getModules();
var countFailed = 0;
var countSuccess = 0;
var instances = [];

// Fetch the argument from the YAML input
var includesDefault = args.includeDefault === 'true'; // convert string to boolean

const brandConfig = {
    "ServiceNow v2": {
        command: "servicenow-oauth-test",
        message: "Test button cannot be used"
    },
    "ServiceNow CMDB": {
        command: "servicenow-cmdb-oauth-test",
        message: "Test button cannot be used"
    },
    "Microsoft Graph Mail Single User": {
        command: "msgraph-mail-test",
        message: "Please use !msgraph-mail-test instead"
    },
    "Microsoft Graph API": {
        command: "msgraph-api-test",
        message: "Use the !msgraph-api-test command instead"
    },
    "Microsoft Graph User": {
        command: "msgraph-user-test",
        message: "run the !msgraph-user-test command"
    },
    "Gmail Single User": {
        command: "gmail-auth-test",
        message: "Test is not supported."
    },
    "Microsoft 365 Defender": {
        command: "microsoft-365-defender-auth-test",
        message: "run the !microsoft-365-defender-auth-test"
    },
     "Jira V3": {
        command: "jira-oauth-test",
        message: "run the !jira-oauth-test"
    }
};

Object.keys(all).forEach(function(m) {
    // Include DNUBD instances only if includesDefault is true
    var isShouldBeTesting = (includesDefault || all[m].defaultIgnored !== 'true') &&
    INTERNAL_MODULES_BRANDS.indexOf(all[m].brand) === -1;
    if (all[m].state === 'active' && isShouldBeTesting) {
        var cmd = m.replace(/\s/g,'_') + '-test-module';
        var firstRest = executeCommand("addEntries", {"entries": JSON.stringify([{
            Type: entryTypes.note,
            Contents: 'testing **' + m + '**',
            HumanReadable: 'testing **' + m + '**',
            ContentsFormat: formats.markdown
        }])});

        var res =  executeCommand(cmd, {});
        var content = res[0].Contents
        var brand = all[m].brand;
        var config = brandConfig[brand];

        if (
            config &&
            content.includes(config.message)
        ) {
            logDebug("Enhanced test logic triggered for brand: \"{0}\", instance: \"{1}\".".format(brand, m));
            logDebug("Detected message: \"{0}\". Running command: \"{1}\".".format(config.message, config.command));
            cmd = config.command;
            res = executeCommand(cmd, { using: m });
            logDebug("Command \"{0}\" executed for instance: \"{1}\". Result: {2}".format(cmd, m, res[0].Contents));
        }
        executeCommand("addEntries", {"entries": JSON.stringify([{
            Type: entryTypes.note,
            Contents: 'done testing **' + m + '**:\n' + res[0].Contents,
            HumanReadable: 'done testing **' + m + '**:\n' + res[0].Contents,
            ContentsFormat: formats.markdown
        }])});
        if (res[0].Type === entryTypes.error) {
            countFailed++;
        }
        else {
            countSuccess++;
        }

        if (res[0].Type === entryTypes.error) {
            failedInstances.push({instance: m, brand: all[m].brand, category: all[m].category, information: res[0].Contents, status: 'failure' });
        }
        else {
            instances.push({instance: m, brand: all[m].brand, category: all[m].category, information: 'succeed', status: 'success' });
        }

    } else if (all[m].state === 'error' && isShouldBeTesting) {
            var errorMessage = 'The instance is in an error state, potentially due to an issue with the engine.';
            executeCommand("addEntries", {"entries": JSON.stringify([{
                Type: entryTypes.note,
                Contents: 'done testing **' + m + '**:\n' + errorMessage,
                HumanReadable: 'done testing **' + m + '**:\n' + errorMessage,
                ContentsFormat: formats.markdown
            }])});
            countFailed++;
            failedInstances.push({instance: m, brand: all[m].brand, category: all[m].category, information: errorMessage, status: 'failure' });
    }
});

var hr;
var success = countSuccess.toString();
var failed = countFailed.toString();
var total = (countSuccess + countFailed).toString();
// When no failed instances were found, the script returns a list with an empty dict because several scripts
// expect the output to be [{}].
if (countFailed === 0) {
    failedInstances.push({})
    hr = '### All active instances are available! ✅';
} else {
    hr = 'Total instances: ' + total +'\n';
    hr += 'Successed Instances: ' + success +'\n';
    hr += 'Failed Instances: ' + failed +'\n';
    hr += tableToMarkdown('Failed Instances:', failedInstances, ['instance', 'brand', 'category', 'information']);
}

return {
    Type: entryTypes.note,
    Contents: failedInstances,
    ContentsFormat: formats.markdown,
    HumanReadable: hr,
    EntryContext: {
        'FailedInstances': failedInstances,
        'SuccessInstances': instances,
        'InstancesCount':{
            'FailedCount': failed,
            'SuccessCount': success,
            'TotalCount': total
        }
    }
};

README

Executes a test for all integration instances available and returns a detailed table with information about any failed integration instances.
The script runs on all enabled instances, regardless of whether the “Do not use by default in CLI” checkbox is selected.

Script Data


Name Description
Script Type javascript
Tags -
Cortex XSOAR Version 4.0.0+

Inputs


There are no inputs for this script.

Outputs


Path Description Type
FailedInstances.instance The name of the failed integration instance. string
FailedInstances.brand The brand of the failed integration instance. string
FailedInstances.category The category of the failed integration instance. string
FailedInstances.information The error information of the failed integration instance. string
FailedInstances.status Status of the instance. string
InstancesCount.FailedCount The number of failed instances. string
InstancesCount.SuccessCount The number of working instances. string
InstancesCount.TotalCount The number of total enabled instances. string
SuccessInstances.brand Brand of succeeded integration instance. string
SuccessInstances.category Category of succeeded integration instance. string
SuccessInstances.information succeeded. string
SuccessInstances.instance Name of succeeded integration instance string
SuccessInstances.status Status of the instance. string