Source
import operator from functools import reduce import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 from CommonServerUserPython import * def count_hours_in_shift(shift: dict) -> int: from_day = shift.get("fromDay", 0) to_day = shift.get("toDay", 0) from_hour = shift.get("fromHour", 0) to_hour = shift.get("toHour", 0) hours_in_shift = 0 for day in range(from_day, to_day + 1): if day == from_day: if day == to_day: hours_in_shift += to_hour - from_hour else: hours_in_shift += 24 - from_hour elif day == to_day: hours_in_shift += to_hour else: hours_in_shift += 24 return hours_in_shift def main(): get_roles_response: list = demisto.executeCommand("getRoles", {}) if is_error(get_roles_response): demisto.error(f"Failed to get roles: {get_error(get_roles_response)!s}") else: hours_per_user: dict[str, int] = {} get_users_response: list = demisto.executeCommand("getUsers", {}) if is_error(get_users_response): demisto.error(f"Failed to get users: {get_error(get_users_response)!s}") else: users = get_users_response[0]["Contents"] roles = get_roles_response[0]["Contents"] for role in roles: role_on_call_hours = 0 shifts = role.get("shifts") or [] for shift in shifts: role_on_call_hours += count_hours_in_shift(shift) role_users = map( # noqa: C417 lambda role_user: role_user.get("name", ""), filter(lambda u: role.get("name") in reduce(operator.add, u.get("roles", {}).values()), users), ) for username in role_users: if username in hours_per_user: hours_per_user[username] += role_on_call_hours else: hours_per_user[username] = role_on_call_hours bar_widget = BarColumnPieWidget() for user, number_of_hours in hours_per_user.items(): bar_widget.add_category(name=user, number=number_of_hours) return_results(bar_widget) if __name__ in ("__builtin__", "builtins", "__main__"): main()
README
Retrieves the number of on-call hours per user.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | Shift Management, widget |
| Cortex XSOAR Version | 5.5.0 |
Inputs
There are no inputs for this script.
Outputs
There are no outputs for this script.