GetOnCallHoursPerUser

Retrieves the number of on call hours per user.

python · Shift Management

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.