Models

from typing import Any, Dict, List, Literal, Optional, Union

TaskStatus = Literal["failure", "in_progress", "success"]


class ReportTaskProcessStepInfo:
    """
    The detail status for each step of report generating task
    """

    # Report file is generated or not
    file_generated: bool
    # Report data query success or not
    report_data_query: bool
    # Email sent or not, if sending report via email is enabled
    email_sent: Optional[bool]
    # Report file is all replicated or not when vManage is a cluster deployment
    file_replicated: Optional[bool]


class ReportTaskUiInfo:
    """
    Report Task list for specific report ID
    """

    # Report Template UUID
    report_id: str
    # Report name for task
    report_name: str
    # Report schedule information
    schedule: str
    # Report task start timestamp
    start_time: int
    # Task UUID
    task_id: str
    # Report Task status
    task_status: TaskStatus
    # The detail status for each step of report generating task
    task_step_detail: ReportTaskProcessStepInfo
    # Report time frame (7 Days or 30 Days)
    time_frame: str
    # Email address to receive the report files
    email_recipient: Optional[List[str]]
    # Report task end timestamp
    end_time: Optional[int]
    # Report file type
    file_type: Optional[str]
    # In Cluster deployment, the follower vManage IP address which needs to replicate the report file from source vManage which generated the report file.
    follower_vmanages: Optional[List[str]]
    # IP address of the source vManage which is scheduled to generate report file. Default value is "localhost" for single node vManage deployment.
    on_vmanage: Optional[str]
    # Report file download URL
    report_download_url: Optional[str]


class ReportTaskQueryResponse:
    """
    Report task query response
    """

    # Report Task list for specific report ID
    task_list: List[ReportTaskUiInfo]
    header: Optional[Dict[str, Any]]


class TaskIdResponse:
    # Task ID
    task_id: str