DSPMCheckAndSetErrorEntries

This script checks for error entries based on provided entry IDs and returns "yes" if any errors are found or "no" if no errors are present. If errors are detected, it sets the error messages in the XSOAR context.

python · DSPM

Source

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401

UNSUPPORTED_COMMAND_MSG = "Unsupported Command : getEntriesByIDs"


def get_errors(entries: List) -> List[str]:
    """Extracts error entry contents

    The entries argument should be a list of demisto entries

    Args:
        entries (List[List[Dict]]): multiples entries of results of demisto.executeCommand()

    Returns:
        (List[str]): Error messages extracted from error entries
    """
    error_messages = []
    for entry in entries:
        if isinstance(entry, list):
            assert len(entry) == 1
            entry_details = entry[0]
        else:
            entry_details = entry
        is_error_entry = isinstance(entry_details, dict) and entry_details["Type"] == entryTypes["error"]
        if is_error_entry:
            error_messages.append(entry_details["Contents"])

    return error_messages


def get_entries(entry_ids: list) -> list:
    entries = []

    if is_xsiam_or_xsoar_saas():
        entry_ids_str = ",".join(entry_ids)
        entries = demisto.executeCommand("getEntriesByIDs", {"entryIDs": entry_ids_str})
        if is_error(entries) and UNSUPPORTED_COMMAND_MSG in get_error(entries):
            entries = []  # unsupported, try again using getEntry

    if not entries:
        entries = [demisto.executeCommand("getEntry", {"id": entry_id}) for entry_id in entry_ids]
    return entries


def main():
    try:
        args = demisto.args()
        # the entry_id argument can be a list of entry ids or a single entry id
        entry_ids = args.get("entry_id", demisto.get(demisto.context(), "lastCompletedTaskEntries"))
        entry_ids = argToList(entry_ids)

        entries = get_entries(entry_ids)
        error_messages = get_errors(entries)

        # Set yes or no based on the presence of errors
        error_status = "yes" if error_messages else "no"

        # If errors found, set them in the context
        if error_messages:
            demisto.setContext("OnError.Message", error_messages)

        # Directly return yes or no
        return_results(error_status)

    except Exception as e:
        return_error(f"Failed to fetch errors for the given entry id(s). Problem: {str(e)}")


if __name__ in ("__main__", "__builtin__", "builtins"):  # pragma: no cover
    main()

README

This script checks for error entries based on provided entry IDs and returns “yes” if any errors are found or “no” if no errors are present. If errors are detected, it sets the error messages in the XSOAR context.

Script Data


Name Description
Script Type python3
Cortex XSOAR Version 6.10.0

Inputs


Argument Name Description
entry_id Entry to check.

Outputs


Path Description Type
yes If one or more entries is an error. Unknown
no If none of the entries is not an error. Unknown