Skip to content

Reports

ucmdb_rest.report.Reports(server)

Initialize the service with a reference to the main level UCMDB server

Source code in ucmdb_rest\report.py
def __init__(self, server):
    """
    Initialize the service with a reference to the main level UCMDB server
    """
    self.server = server

changeReportsAll(toTime, fromTime, view, type='ALL', attributes=['description', 'name'])

Retrieves change reports for all elements within a specified time range.

Parameters:

Name Type Description Default
toTime int

The end time of the report (Epoch time in milliseconds).

required
fromTime int

The start time of the report (Epoch time in milliseconds).

required
view str

The name of the UCMDB View to scope the report.

required
type str

Do we want to exclude, include attributes or show all of them. Default is ALL

'ALL'
attributes list of str

A list of CI attributes to monitor for changes. Default is ['description', 'name'].

['description', 'name']

Returns:

Type Description
Response

A Response object. If the API returns a 400 (Bad Request), this method returns a mocked 200 response with an empty JSON body to ensure automation scripts can continue gracefully.

Example Response Body:

{ "ciChanges": { "44c93b...": { "changes": { "name": [{"oldValue": "srv01", "newValue": "srv01-prod"}] } } } }

Source code in ucmdb_rest\report.py
def changeReportsAll(self, toTime, fromTime, view, type="ALL", attributes=['description', 'name']):  # noqa: E501
    """
    Retrieves change reports for all elements within a specified time range.

    Parameters
    ----------
    toTime : int
        The end time of the report (Epoch time in milliseconds).
    fromTime : int
        The start time of the report (Epoch time in milliseconds).
    view : str
        The name of the UCMDB View to scope the report.
    type : str
        Do we want to exclude, include attributes or show all of them.
        Default is ALL
    attributes : list of str, optional
        A list of CI attributes to monitor for changes. 
        Default is ['description', 'name'].

    Returns
    -------
    requests.Response
        A Response object. If the API returns a 400 (Bad Request), this 
        method returns a mocked 200 response with an empty JSON body 
        to ensure automation scripts can continue gracefully.

    Example Response Body:
    ----------------------
    {
        "ciChanges": {
            "44c93b...": {
                "changes": {
                    "name": [{"oldValue": "srv01", "newValue": "srv01-prod"}]
                }
            }
        }
    }
    """
    if type=="ALL":
        attributes = []
        filter_val = "type=ALL"
    elif type=="INCLUDE" or type=="EXCLUDE":
        attr_filter = "%2C".join([f"attributes={a}" for a in attributes])
        filter_val = f"type%3D{type}%26{attr_filter}"
    url = f'/report/change/ci/{view}/results?filter={filter_val}'
    params = {
        "dateFrom": fromTime,
        "dateTo": toTime,
        "start": 1,
        "pageSize": 100
    }
    return self.server._request("GET",url,params=params)

changeReportsBlacklist(toTime, fromTime, view, attributes=['description'])

Retrieves a blacklist report for CIs in a view.

This function makes a POST request to the UCMDB server to retrieve the information.

Parameters:

Name Type Description Default
toTime int

Time the report should end. Format is epoch time in milliseconds.

required
fromTime int

Time the report should start. Format is epoch time in milliseconds.

required
view str

Name of the view to retrieve the report from.

required
attributes list

A list of attributes to display on the report

['description']

Returns:

Type Description
Response

A dictionary object containing the details of which attribute changed, the date it was changed, and the old and new values. Example: { "changes": { "4278e81d3dd6640a835e419d2865905d": { "ciId": "4278e81d3dd6640a835e419d2865905d", "displayLabel": "create222", "className": "node", "properties": [ { "name": "Display Label", "value": "USER LABEL" }, { "name": "Create Time", "value": "Fri Jan 20 14:13:40 EET 2017" }, { "name": "Description", "value": "description" } ], "changes": { "name": [ { "attribute": "name", "oldValue": "create2", "newValue": "create22", "changer": "User:{UISysadmin###UCMDB}, LoggedInUser:{admin###UCMDB}", "changeDate": 1484741091500 } ] } } } }

Source code in ucmdb_rest\report.py
def changeReportsBlacklist(self, toTime, fromTime, view, attributes=['description']):
    """
    Retrieves a blacklist report for CIs in a view.

    This function makes a POST request to the UCMDB server to 
    retrieve the information.

    Parameters
    ----------
    toTime : int
        Time the report should end. Format is epoch time
        in milliseconds.
    fromTime : int
        Time the report should start. Format is epoch time
        in milliseconds.
    view : str
        Name of the view to retrieve the report from.
    attributes : list
        A list of attributes to display on the report

    Returns
    -------
    requests.Response
        A dictionary object containing the details of which attribute 
        changed, the date it was changed, and the old and new values. 
        Example:
        {
            "changes": {
                "4278e81d3dd6640a835e419d2865905d": {
                    "ciId": "4278e81d3dd6640a835e419d2865905d",
                    "displayLabel": "create222",
                    "className": "node",
                    "properties": [
                        {
                            "name": "Display Label",
                            "value": "USER LABEL"
                        },
                        {
                            "name": "Create Time",
                            "value": "Fri Jan 20 14:13:40 EET 2017"
                        },
                        {
                            "name": "Description",
                            "value": "description"
                        }
                    ],
                    "changes": {
                        "name": [
                            {
                                "attribute": "name",
                                "oldValue": "create2",
                                "newValue": "create22",
                                "changer": "User:{UISysadmin###UCMDB},
                                            LoggedInUser:{admin###UCMDB}",
                                "changeDate": 1484741091500
                            }
                        ]
                    }
                }
            }
        }
    """
    body_json = {
        'dateFrom': str(fromTime),
        'dateTo': str(toTime),
        'viewName': view,
        'attributes': attributes
    }
    url = '/changeReports/generate/blacklist'
    return self.server._request("POST",url,json=body_json)

changeReportsWhitelist(toTime, fromTime, view, attributes=['name', 'description'])

Retrieves a whitelist report for CIs in a view.

This function makes a POST request to the UCMDB server to retrieve the information.

Parameters:

Name Type Description Default
toTime int

Time the report should end, in the format: 1454364000000.

required
fromTime int

Time the report should start, in the format: 1485986400000.

required
view str

Name of the view to retrieve the report from.

required
attributes list

A list of attributes to display on the report

['name', 'description']

Returns:

Type Description
Response

A dictionary object containing the details of which attribute changed, the date it was changed, and the old and new values. Example: { "changes": { "4278e81d3dd6640a835e419d2865905d": { "ciId": "4278e81d3dd6640a835e419d2865905d", "displayLabel": "create222", "className": "node", "properties": [ { "name": "Display Label", "value": "USER LABEL" }, { "name": "Create Time", "value": "Fri Jan 20 14:13:40 EET 2017" }, { "name": "Description", "value": "description" } ], "changes": { "name": [ { "attribute": "name", "oldValue": "create2", "newValue": "create22", "changer": "User:{UISysadmin###UCMDB}, LoggedInUser:{admin###UCMDB}", "changeDate": 1484741091500 } ] } } } }

Source code in ucmdb_rest\report.py
def changeReportsWhitelist(self, toTime, fromTime, view, attributes=['name','description']): 
    """
    Retrieves a whitelist report for CIs in a view.

    This function makes a POST request to the UCMDB server to 
    retrieve the information.

    Parameters
    ----------
    toTime : int
        Time the report should end, in the format: 1454364000000.
    fromTime : int
        Time the report should start, in the format: 1485986400000.
    view : str
        Name of the view to retrieve the report from.
    attributes : list
        A list of attributes to display on the report

    Returns
    -------
    requests.Response
        A dictionary object containing the details of which 
        attribute changed, the date it was changed, and the old and 
        new values. Example:
        {
            "changes": {
                "4278e81d3dd6640a835e419d2865905d": {
                    "ciId": "4278e81d3dd6640a835e419d2865905d",
                    "displayLabel": "create222",
                    "className": "node",
                    "properties": [
                        {
                            "name": "Display Label",
                            "value": "USER LABEL"
                        },
                        {
                            "name": "Create Time",
                            "value": "Fri Jan 20 14:13:40 EET 2017"
                        },
                        {
                            "name": "Description",
                            "value": "description"
                        }
                    ],
                    "changes": {
                        "name": [
                            {
                                "attribute": "name",
                                "oldValue": "create2",
                                "newValue": "create22",
                                "changer": "User:{UISysadmin###UCMDB},
                                            LoggedInUser:{admin###UCMDB}",
                                "changeDate": 1484741091500
                            }
                        ]
                    }
                }
            }
        }
    """
    body_json = {
        'dateFrom': str(fromTime),
        'dateTo': str(toTime),
        'viewName': view,
        'attributes': attributes
    }
    url = '/changeReports/generate/whitelist'

    try:
        return self.server._request("POST", url, json=body_json)

    except requests.exceptions.HTTPError as e:
        if e.response.status_code == 400:
            from unittest.mock import MagicMock
            empty_res = MagicMock()
            empty_res.status_code = 200
            empty_res.json.return_value = {}
            empty_res.text = "{}"
            return empty_res

        raise e