GetOnCallHoursPerUser
Retrieves the number of on call hours per user.
- Type
- python
- Pack
- ShiftManagement
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.