DBotGroupXDRIncidents

Train clustering model on Cortex XDR incident type.

python · Cortex XDR by Palo Alto Networks

Source

from CommonServerPython import *

""" STANDALONE FUNCTION """


def get_group_incidents(args: dict) -> dict:
    model_name = "xdr_clustering"
    field_for_grouping = "xdralerts"
    field_for_name = "xdralerts.causalityactorprocessimagename"

    return_type = args["returnWidgetType"]
    demisto.debug(f"DBotGroupXDRIncidents: {return_type=}")

    if return_type == "incidents":
        res = demisto.executeCommand(
            "DBotShowClusteringModelInfo",
            {
                "searchQuery": demisto.args().get("searchQuery"),
                "modelName": model_name,
                "returnType": "incidents",
                "fieldsToDisplay": demisto.args().get("fieldsToDisplay"),
            },
        )
        return res
    elif return_type == "summary":
        res = demisto.executeCommand("DBotShowClusteringModelInfo", {"modelName": model_name})
        return res
    else:
        res = demisto.executeCommand(
            "DBotTrainClustering",
            {
                "modelName": model_name,
                "type": args.get("incidentType"),
                "fromDate": args.get("fromDate"),
                "limit": args.get("limit"),
                "fieldsForClustering": field_for_grouping,
                "fieldForClusterName": field_for_name,
                "storeModel": "True",
                "searchQuery": args.get("searchQuery"),
                "forceRetrain": args.get("forceRetrain"),
                "numberOfFeaturesPerField": 500,
            },
        )
        if not res[-1].get("EntryContext", {}):
            demisto.debug(
                f"DBotGroupXDRIncidents: there are 0 incidents fetched. {res[-1].get('Contents', '')=} "
                f"{res[-1].get('EntryContext', {})=}"
            )
            res[-1]["Contents"] = {"data": []}
        # we need only the last entry because it's a widget script, and only the widget info should be return
        return res[-1]


""" MAIN FUNCTION """


def main():
    try:
        args = demisto.args()
        return_results(get_group_incidents(args))
    except Exception as ex:
        return_error(f"Failed to execute DBotGroupXDRIncidents. Error: {ex!s}")


""" ENTRY POINT """

if __name__ in ("__main__", "__builtin__", "builtins"):
    main()

README

Train clustering model on Cortex XDR incident type.

Script Data


Name Description
Script Type python3
Tags widget
Cortex XSOAR Version 6.2.0

Inputs


Argument Name Description
returnWidgetType The type of the widget to return.
fromDate The start date by which to filter incidents. Date format will be the same as in the incidents query page, for example: “3 days ago”, ““2019-01-01T00:00:00 +0200”).
limit The maximum number of incidents to fetch
incidentType The Cortex XDR incident type
searchQuery Input search query from the dashboard
modelExpiration Period of time (in hours) before retraining the model. Default is “24”.
forceRetrain Determines whether to force the model to re-train. Default is “False”.
fieldsToDisplay Comma-separated list of additional incident fields to display, but which will not be taken into account when computing similarity.

Outputs


There are no outputs for this script.