GetUsersOnCall

Retrieves users who are currently on call.

python · Shift Management

Source

import demistomock as demisto
from CommonServerPython import *

from CommonServerUserPython import *


def filter_OOO_users(get_users_response, ooo_list_name):
    """
    Given the response with all OnCall users, remove the users that are Out Of Office, using the list `OOO List`.
    """
    all_users = get_users_response.get("Contents")
    if not all_users:
        return "No data returned"

    # get OOO users
    ooo_list = demisto.executeCommand("GetUsersOOO", {"listname": ooo_list_name})
    if isError(ooo_list[0]):
        return_error(f'Error occurred while trying to get OOO users: {ooo_list[0].get("Contents")}')

    # Get Away Users
    away_users_response = demisto.executeCommand("GetAwayUsers", {})
    if is_error(away_users_response) or not away_users_response:
        return_error(f"Failed to get away users: {get_error(away_users_response)!s}")
    away_users: list[Dict] = away_users_response[0].get("EntryContext", {}).get("AwayUsers", [])
    away_users = away_users if away_users else []

    list_info = ooo_list[0].get("EntryContext").get("ShiftManagment.OOOUsers")
    list_info = list_info + away_users
    OOO_usernames = [i["username"] for i in list_info]

    try:
        in_office_users = []
        for user in all_users:
            if user.get("username") in OOO_usernames:
                continue
            else:
                in_office_users.append(user)
        return "On-Call Team members\n" + tableToMarkdown("", in_office_users, ["username", "email", "name", "phone", "roles"])
    except Exception as e:
        demisto.error(f"Encountered the following exception: {e.args[0]}\n Returning all users without filtering.")
        return get_users_response.get("HumanReadable")


def main():
    include_out_of_office_users = demisto.args().get("include_OOO_users", "false") == "true"
    get_users_response: list = demisto.executeCommand("getUsers", {"onCall": True})
    list_name = demisto.getArg("listname")
    if is_error(get_users_response):
        demisto.error(f"Failed to get users on call: {get_error(get_users_response)!s}")
    else:
        if include_out_of_office_users:
            contents = get_users_response[0]["HumanReadable"].replace("## On-Call Users", "On-Call Team members")
        else:
            contents = filter_OOO_users(get_users_response[0], list_name)

        if contents == "No data returned":
            contents = "On-Call Team members\nNo team members were found on-call."
        demisto.results({"Type": entryTypes["note"], "ContentsFormat": formats["markdown"], "Contents": contents})


if __name__ in ("__builtin__", "builtins", "__main__"):
    main()

README

Retrieves users who are currently on call.

Script Data


Name Description
Script Type python3
Tags Shift Management, widget
Cortex XSOAR Version 5.5.0

Inputs


Argument Name Description
include_OOO_users Whether to retrieve all users, including users who are out of the office. If “true” will retrieve all users. If “false”, will only retrieve users who are not out of office. Default is “false”.
listname The name of the out-of-office XSOAR list. Default is “OOO List”.

Outputs


There are no outputs for this script.