import traceback
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
RED = "rgb(204, 57, 24)"
ORANGE = "rgb(201, 176, 48)"
GREEN = "rgb(148, 196, 143)"
GREY = "rgb(197, 197, 197)"
BLUE = "rgb(149, 188, 201)"
FORMATS = ["bar", "pie"]
LAYOUTS = ["horizontal", "vertical"]
def TaskWidget(tstat: dict) -> list:
group = []
g1 = {"name": "Completed", "data": [tstat["completed"]], "color": GREEN}
group.append(g1)
g2 = {"name": "Started", "data": [tstat["started"]], "color": ORANGE}
group.append(g2)
g3 = {"name": "Waiting", "data": [tstat["waiting"]], "color": BLUE}
group.append(g3)
g4 = {"name": "NotExecuted", "data": [tstat["notexecuted"]], "color": GREY}
group.append(g4)
g5 = {"name": "Error", "data": [tstat["error"]], "color": RED}
group.append(g5)
return group
def TaskWidgetGroup(wstats: list, name: str, stat: list) -> list:
w = NewWidgetStatGroup(name, stat)
wstats.append(w)
return wstats
def NewWidgetStatGroup(name: str, data: list) -> dict:
wstat = {"name": name, "groups": data, "data": [], "label": "", "color": ""}
return wstat
def NewWidget(format: str, layout: str, wstat: list) -> dict:
if format in FORMATS and layout in LAYOUTS:
widget = {"Type": 17, "ContentsFormat": format, "Contents": {"stats": wstat, "params": {"layout": layout}}}
else:
widget = {}
demisto.debug(f"{format=} and {layout=} don't match any condition. {widget=}")
return widget
def main():
try:
ctx = demisto.context()
if "PlaybookStatistics" not in ctx:
return
stats = json.loads(ctx["PlaybookStatistics"])
if len(stats) == 0:
return
wstats: list = []
for _key, val in stats.items():
tw = TaskWidget(val)
wstats = TaskWidgetGroup(wstats, val["name"], tw)
widget = NewWidget("bar", "vertical", wstats)
demisto.results(widget)
except Exception as ex:
demisto.error(traceback.format_exc())
return_error(f"UnitTestPBAStats: Exception failed to execute. Error: {ex!s}")
if __name__ in ("__main__", "__builtin__", "builtins"):
main()