server.web.schemas.task_template ================================ .. py:module:: server.web.schemas.task_template Classes ------- .. autoapisummary:: server.web.schemas.task_template.TaskTemplateResourceUsageRequest server.web.schemas.task_template.TaskTemplateResourceAggregatesRequest server.web.schemas.task_template.ResourceClusterItem server.web.schemas.task_template.ResourceEfficiencyMetrics server.web.schemas.task_template.TaskTemplateResourceAggregatesResponse server.web.schemas.task_template.RequestedResourcesModel server.web.schemas.task_template.TaskResourceDetailItem server.web.schemas.task_template.TaskResourceVizItem server.web.schemas.task_template.FormattedStats server.web.schemas.task_template.TaskTemplateResourceUsageResponse server.web.schemas.task_template.TaskTemplateDetailsResponse server.web.schemas.task_template.TaskTemplateVersionItem server.web.schemas.task_template.TaskTemplateVersionResponse server.web.schemas.task_template.CoreInfoItem server.web.schemas.task_template.RequestedCoresResponse server.web.schemas.task_template.QueueInfoItem server.web.schemas.task_template.MostPopularQueueResponse server.web.schemas.task_template.WorkflowTaskTemplateStatusItem server.web.schemas.task_template.FatalErrorBreakdownResponse server.web.schemas.task_template.WorkflowResourceErrorCheckResponse server.web.schemas.task_template.ErrorLogItem server.web.schemas.task_template.ErrorLogResponse Module Contents --------------- .. py:class:: TaskTemplateResourceUsageRequest Bases: :py:obj:`pydantic.BaseModel` .. py:attribute:: task_template_version_id :type: int .. py:attribute:: workflows :type: Optional[List[int]] :value: None .. py:attribute:: node_args :type: Optional[Dict[str, List[str]]] :value: None .. py:attribute:: ci :type: Optional[str] :value: None .. py:attribute:: viz :type: bool :value: False .. py:attribute:: page :type: Optional[int] .. py:attribute:: page_size :type: Optional[int] .. py:class:: TaskTemplateResourceAggregatesRequest Bases: :py:obj:`pydantic.BaseModel` Request for the lightweight aggregates endpoint. .. py:attribute:: task_template_version_id :type: int .. py:attribute:: workflows :type: Optional[List[int]] :value: None .. py:attribute:: node_args :type: Optional[Dict[str, List[str]]] :value: None .. py:attribute:: latest_only :type: bool :value: True .. py:class:: ResourceClusterItem Bases: :py:obj:`pydantic.BaseModel` One requested-resource cluster summary. We ship only the numeric ``(runtime, memory)`` pair plus the count; the frontend derives the string cluster key itself using the same rounding/formatting it applies to scatter rows, so there's no cross-language string contract that can drift between Python and JS. Cluster → instance membership is also recomputed frontend-side from streaming scatter rows — shipping per-instance IDs here would dominate the aggregates payload on large templates. .. py:attribute:: runtime :type: float .. py:attribute:: memory :type: float .. py:attribute:: task_count :type: int .. py:class:: ResourceEfficiencyMetrics Bases: :py:obj:`pydantic.BaseModel` Aggregate resource efficiency metrics for a task template. .. py:attribute:: memory_utilization :type: float :value: 0.0 .. py:attribute:: runtime_utilization :type: float :value: 0.0 .. py:attribute:: over_allocated_memory :type: int :value: 0 .. py:attribute:: under_allocated_memory :type: int :value: 0 .. py:attribute:: over_allocated_runtime :type: int :value: 0 .. py:attribute:: under_allocated_runtime :type: int :value: 0 .. py:attribute:: p95_memory :type: Optional[float] :value: None .. py:attribute:: p95_runtime :type: Optional[float] :value: None .. py:attribute:: outlier_count :type: int :value: 0 .. py:class:: TaskTemplateResourceAggregatesResponse Bases: :py:obj:`pydantic.BaseModel` Compact server-computed aggregates for a task template. Memory and runtime stats are ``Optional[float]`` (not ``int``) so the client's per-field merge doesn't permanently overwrite more precise client-computed floats with a truncated integer. ``efficiency`` defaults to ``None`` when the template has no efficiency-relevant data (zero-TI workflow, or TIs without requested resources) so the frontend can distinguish "no server data" from "server says all zeros". .. py:attribute:: num_tasks :type: Optional[int] :value: None .. py:attribute:: min_mem :type: Optional[float] :value: None .. py:attribute:: max_mem :type: Optional[float] :value: None .. py:attribute:: mean_mem :type: Optional[float] :value: None .. py:attribute:: median_mem :type: Optional[float] :value: None .. py:attribute:: p95_mem :type: Optional[float] :value: None .. py:attribute:: min_runtime :type: Optional[float] :value: None .. py:attribute:: max_runtime :type: Optional[float] :value: None .. py:attribute:: mean_runtime :type: Optional[float] :value: None .. py:attribute:: median_runtime :type: Optional[float] :value: None .. py:attribute:: p95_runtime :type: Optional[float] :value: None .. py:attribute:: median_requested_runtime :type: Optional[float] :value: None .. py:attribute:: median_requested_memory :type: Optional[float] :value: None .. py:attribute:: resource_clusters :type: List[ResourceClusterItem] :value: [] .. py:attribute:: efficiency :type: Optional[ResourceEfficiencyMetrics] :value: None .. py:class:: RequestedResourcesModel Bases: :py:obj:`pydantic.BaseModel` .. py:attribute:: memory :type: Optional[float] :value: None .. py:attribute:: runtime :type: Optional[float] :value: None .. py:attribute:: cores :type: Optional[float] :value: None .. py:attribute:: queue :type: Optional[str] :value: None .. py:class:: TaskResourceDetailItem Bases: :py:obj:`pydantic.BaseModel` .. py:attribute:: r :type: Optional[float] .. py:attribute:: m :type: Optional[int] .. py:attribute:: node_id :type: int .. py:attribute:: task_id :type: int .. py:attribute:: task_instance_id :type: Optional[int] :value: None .. py:attribute:: task_name :type: Optional[str] :value: None .. py:attribute:: requested_resources :type: Optional[str] :value: None .. py:attribute:: task_resources_id :type: Optional[int] :value: None .. py:attribute:: attempt_number_of_instance :type: Optional[int] :value: None .. py:attribute:: status :type: Optional[str] :value: None .. py:attribute:: task_status_date :type: Optional[datetime.datetime] :value: None .. py:attribute:: task_command :type: Optional[str] :value: None .. py:attribute:: task_num_attempts :type: Optional[int] :value: None .. py:attribute:: task_max_attempts :type: Optional[int] :value: None .. py:attribute:: workflow_run_id :type: Optional[int] :value: None .. py:attribute:: model_config .. py:class:: TaskResourceVizItem Bases: :py:obj:`pydantic.BaseModel` .. py:attribute:: r :type: Optional[float] :value: None .. py:attribute:: m :type: Optional[int] :value: None .. py:attribute:: node_id :type: int .. py:attribute:: task_id :type: int .. py:attribute:: task_instance_id :type: Optional[int] :value: None .. py:attribute:: task_name :type: Optional[str] :value: None .. py:attribute:: requested_resources :type: Optional[str] :value: None .. py:attribute:: task_resources_id :type: Optional[int] :value: None .. py:attribute:: attempt_number_of_instance :type: Optional[int] :value: None .. py:attribute:: status :type: Optional[str] :value: None .. py:attribute:: task_status_date :type: Optional[datetime.datetime] :value: None .. py:attribute:: task_command :type: Optional[str] :value: None .. py:attribute:: task_num_attempts :type: Optional[int] :value: None .. py:attribute:: task_max_attempts :type: Optional[int] :value: None .. py:attribute:: workflow_run_id :type: Optional[int] :value: None .. py:class:: FormattedStats Bases: :py:obj:`pydantic.BaseModel` Formatted statistics for legacy client compatibility. .. py:attribute:: num_tasks :type: Optional[int] :value: None .. py:attribute:: min_mem :type: Optional[str] :value: None .. py:attribute:: max_mem :type: Optional[str] :value: None .. py:attribute:: mean_mem :type: Optional[str] :value: None .. py:attribute:: min_runtime :type: Optional[int] :value: None .. py:attribute:: max_runtime :type: Optional[int] :value: None .. py:attribute:: mean_runtime :type: Optional[float] :value: None .. py:attribute:: median_mem :type: Optional[str] :value: None .. py:attribute:: median_runtime :type: Optional[float] :value: None .. py:attribute:: ci_mem :type: Optional[List[Union[float, None]]] :value: None .. py:attribute:: ci_runtime :type: Optional[List[Union[float, None]]] :value: None .. py:class:: TaskTemplateResourceUsageResponse Bases: :py:obj:`pydantic.BaseModel` Unified response model for task template resource usage. .. py:attribute:: model_config .. py:attribute:: num_tasks :type: Optional[int] :value: None .. py:attribute:: min_mem :type: Optional[int] :value: None .. py:attribute:: max_mem :type: Optional[int] :value: None .. py:attribute:: mean_mem :type: Optional[float] :value: None .. py:attribute:: min_runtime :type: Optional[int] :value: None .. py:attribute:: max_runtime :type: Optional[int] :value: None .. py:attribute:: mean_runtime :type: Optional[float] :value: None .. py:attribute:: median_mem :type: Optional[float] :value: None .. py:attribute:: median_runtime :type: Optional[float] :value: None .. py:attribute:: ci_mem :type: Optional[List[Union[float, None]]] :value: None .. py:attribute:: ci_runtime :type: Optional[List[Union[float, None]]] :value: None .. py:attribute:: result_viz :type: Optional[List[TaskResourceVizItem]] :value: None .. py:attribute:: total_count :type: Optional[int] :value: None .. py:attribute:: page :type: Optional[int] :value: None .. py:attribute:: page_size :type: Optional[int] :value: None .. py:method:: formatted_stats() -> FormattedStats Provide formatted statistics similar to legacy client format. .. py:class:: TaskTemplateDetailsResponse Bases: :py:obj:`pydantic.BaseModel` .. py:attribute:: task_template_id :type: int .. py:attribute:: task_template_name :type: str .. py:attribute:: task_template_version_id :type: int .. py:class:: TaskTemplateVersionItem Bases: :py:obj:`pydantic.BaseModel` Individual task template version item. .. py:attribute:: id :type: int .. py:attribute:: name :type: str .. py:class:: TaskTemplateVersionResponse Bases: :py:obj:`pydantic.BaseModel` Response model for task template version queries. .. py:attribute:: task_template_version_ids :type: List[TaskTemplateVersionItem] .. py:class:: CoreInfoItem Bases: :py:obj:`pydantic.BaseModel` Individual core info item. .. py:attribute:: id :type: int .. py:attribute:: min :type: int .. py:attribute:: max :type: int .. py:attribute:: avg :type: int .. py:class:: RequestedCoresResponse Bases: :py:obj:`pydantic.BaseModel` Response model for requested cores queries. .. py:attribute:: core_info :type: List[CoreInfoItem] .. py:class:: QueueInfoItem Bases: :py:obj:`pydantic.BaseModel` Individual queue info item. .. py:attribute:: id :type: int .. py:attribute:: queue :type: str .. py:attribute:: queue_id :type: int .. py:class:: MostPopularQueueResponse Bases: :py:obj:`pydantic.BaseModel` Response model for most popular queue queries. .. py:attribute:: queue_info :type: List[QueueInfoItem] .. py:class:: WorkflowTaskTemplateStatusItem Bases: :py:obj:`pydantic.BaseModel` Individual workflow task template status item. .. py:attribute:: id :type: int .. py:attribute:: name :type: str .. py:attribute:: tasks :type: int .. py:attribute:: PENDING :type: int .. py:attribute:: SCHEDULED :type: int .. py:attribute:: RUNNING :type: int .. py:attribute:: DONE :type: int .. py:attribute:: FATAL :type: int .. py:attribute:: MAXC :type: Union[int, str] .. py:attribute:: num_attempts_min :type: Optional[float] .. py:attribute:: num_attempts_max :type: Optional[float] .. py:attribute:: num_attempts_avg :type: Optional[float] .. py:attribute:: task_template_version_id :type: int .. py:class:: FatalErrorBreakdownResponse Bases: :py:obj:`pydantic.BaseModel` Breakdown of fatal errors by type for a single template. .. py:attribute:: resource :type: int :value: 0 .. py:attribute:: app :type: int :value: 0 .. py:attribute:: infra :type: int :value: 0 .. py:attribute:: resource_error_total :type: int :value: 0 .. py:attribute:: resource_error_retried :type: int :value: 0 .. py:attribute:: resource_error_ti_ids :type: List[int] :value: [] .. py:class:: WorkflowResourceErrorCheckResponse Bases: :py:obj:`pydantic.BaseModel` Response for checking if a workflow has any resource errors. .. py:attribute:: has_resource_errors :type: bool .. py:class:: ErrorLogItem Bases: :py:obj:`pydantic.BaseModel` Error log item - can represent individual errors or clustered errors. .. py:attribute:: task_id :type: Optional[int] :value: None .. py:attribute:: task_instance_id :type: Optional[int] :value: None .. py:attribute:: task_instance_err_id :type: Optional[int] :value: None .. py:attribute:: error_time :type: Optional[datetime.datetime] :value: None .. py:attribute:: error :type: Optional[str] :value: None .. py:attribute:: task_instance_stderr_log :type: Optional[str] :value: None .. py:attribute:: workflow_run_id :type: int .. py:attribute:: workflow_id :type: int .. py:attribute:: error_score :type: Optional[float] :value: None .. py:attribute:: group_instance_count :type: Optional[int] :value: None .. py:attribute:: task_instance_ids :type: Optional[List[int]] :value: None .. py:attribute:: task_ids :type: Optional[List[int]] :value: None .. py:attribute:: sample_error :type: Optional[str] :value: None .. py:attribute:: first_error_time :type: Optional[datetime.datetime] :value: None .. py:attribute:: model_config .. py:class:: ErrorLogResponse Bases: :py:obj:`pydantic.BaseModel` Response model for error log queries. .. py:attribute:: error_logs :type: List[ErrorLogItem] .. py:attribute:: total_count :type: int .. py:attribute:: page :type: int .. py:attribute:: page_size :type: int