PositiveDetectionsVSDetectionEngines

Shows a bar chart of the number of Positive Detections out of overall detections.

python · Common Scripts

Source

import demistomock as demisto
from CommonServerPython import *

from CommonServerUserPython import *


def extract_engines_data_from_indicator(indicator_data):
    if not indicator_data:
        raise DemistoException("No indicator found")
    cstm_fields = indicator_data.get("CustomFields")
    if not cstm_fields:
        # No content, so will display 0/0
        return create_pie(0, 0)
    if "detectionengines" not in cstm_fields:
        detection_engines = 0
    else:
        detection_engines = try_parse_int(cstm_fields["detectionengines"], '"Detection Engines" must be a number')
    if "positivedetections" not in cstm_fields:
        positive_detections = 0
    else:
        positive_detections = try_parse_int(cstm_fields["positivedetections"], '"Positive Detections" must be a number')
    unknown_detections = detection_engines - positive_detections
    if unknown_detections < 0:
        raise ValueError(
            f'"Detection Engines ({detection_engines})" must be greater or equal '
            f'to "Positive Detections ({positive_detections})"'
        )
    return create_pie(unknown_detections, positive_detections)


def create_pie(unknown_detections, positive_detections):
    data = {
        "Type": 17,
        "ContentsFormat": "pie",
        "Contents": {
            "stats": [
                {"data": [positive_detections], "groups": None, "name": "Positive Detections", "color": "rgb(255, 23, 68)"},
                {"data": [unknown_detections], "groups": None, "name": "Unknown", "color": "rgb(255, 144, 0)"},
            ],
            "params": {"layout": "vertical"},
        },
    }
    return data


def try_parse_int(num, err_msg):
    try:
        return int(num)
    except (ValueError, TypeError):
        raise ValueError(err_msg)


def main():
    try:
        indicator_data = demisto.args().get("indicator")
        demisto.results(extract_engines_data_from_indicator(indicator_data))
    except Exception as e:
        demisto.error(f"PostiveDetectionsVSDetectiongEngines failed with [{e}]")
        msg = f"Could not load widget:\n{e}"
        demisto.results(msg)


# python2 uses __builtin__ python3 uses builtins
if __name__ == "__builtin__" or __name__ == "builtins":
    main()

README

Shows a bar chart of the number of Positive Detections out of overall detections

Script Data


Name Description
Script Type python3
Tags dynamic-indicator-section
Cortex XSOAR Version 5.0.0

Inputs


Argument Name Description
indicator Indicator with detections custom fields

Outputs


There are no outputs for this script.