причесываем лог

This commit is contained in:
2026-02-28 10:47:19 +03:00
parent 7e43830144
commit daa9f7be3a
5 changed files with 172 additions and 26 deletions

View File

@@ -33,22 +33,43 @@ async def test_get_dashboards_with_status():
]
# Mock tasks
mock_task = MagicMock()
mock_task.id = "task-123"
mock_task.status = "SUCCESS"
mock_task.params = {"resource_id": "dashboard-1"}
mock_task.created_at = datetime.now()
task_prod_old = MagicMock()
task_prod_old.id = "task-123"
task_prod_old.plugin_id = "llm_dashboard_validation"
task_prod_old.status = "SUCCESS"
task_prod_old.params = {"dashboard_id": "1", "environment_id": "prod"}
task_prod_old.started_at = datetime(2024, 1, 1, 10, 0, 0)
task_prod_new = MagicMock()
task_prod_new.id = "task-124"
task_prod_new.plugin_id = "llm_dashboard_validation"
task_prod_new.status = "TaskStatus.FAILED"
task_prod_new.params = {"dashboard_id": "1", "environment_id": "prod"}
task_prod_new.result = {"status": "FAIL"}
task_prod_new.started_at = datetime(2024, 1, 1, 12, 0, 0)
task_other_env = MagicMock()
task_other_env.id = "task-200"
task_other_env.plugin_id = "llm_dashboard_validation"
task_other_env.status = "SUCCESS"
task_other_env.params = {"dashboard_id": "1", "environment_id": "stage"}
task_other_env.started_at = datetime(2024, 1, 1, 13, 0, 0)
env = MagicMock()
env.id = "prod"
result = await service.get_dashboards_with_status(env, [mock_task])
result = await service.get_dashboards_with_status(
env,
[task_prod_old, task_prod_new, task_other_env],
)
assert len(result) == 2
assert result[0]["id"] == 1
assert "git_status" in result[0]
assert "last_task" in result[0]
assert result[0]["last_task"]["task_id"] == "task-123"
assert result[0]["last_task"]["task_id"] == "task-124"
assert result[0]["last_task"]["status"] == "FAILED"
assert result[0]["last_task"]["validation_status"] == "FAIL"
# [/DEF:test_get_dashboards_with_status:Function]
@@ -248,4 +269,4 @@ def test_get_last_task_for_resource_no_match():
# [/DEF:test_get_last_task_for_resource_no_match:Function]
# [/DEF:backend.src.services.__tests__.test_resource_service:Module]
# [/DEF:backend.src.services.__tests__.test_resource_service:Module]

View File

@@ -122,11 +122,48 @@ class ResourceService:
)
last_task = max(matched_tasks, key=_task_time)
raw_result = getattr(last_task, "result", None)
validation_status = None
if isinstance(raw_result, dict):
validation_status = self._normalize_validation_status(raw_result.get("status"))
return {
"task_id": str(getattr(last_task, "id", "")),
"status": str(getattr(last_task, "status", "")),
"status": self._normalize_task_status(getattr(last_task, "status", "")),
"validation_status": validation_status,
}
# [/DEF:_get_last_llm_task_for_dashboard:Function]
# [DEF:_normalize_task_status:Function]
# @PURPOSE: Normalize task status to stable uppercase values for UI/API projections
# @PRE: raw_status can be enum or string
# @POST: Returns uppercase status without enum class prefix
# @PARAM: raw_status (Any) - Raw task status object/value
# @RETURN: str - Normalized status token
def _normalize_task_status(self, raw_status: Any) -> str:
if raw_status is None:
return ""
value = getattr(raw_status, "value", raw_status)
status_text = str(value).strip()
if "." in status_text:
status_text = status_text.split(".")[-1]
return status_text.upper()
# [/DEF:_normalize_task_status:Function]
# [DEF:_normalize_validation_status:Function]
# @PURPOSE: Normalize LLM validation status to PASS/FAIL/WARN/UNKNOWN
# @PRE: raw_status can be any scalar type
# @POST: Returns normalized validation status token or None
# @PARAM: raw_status (Any) - Raw validation status from task result
# @RETURN: Optional[str] - PASS|FAIL|WARN|UNKNOWN
def _normalize_validation_status(self, raw_status: Any) -> Optional[str]:
if raw_status is None:
return None
status_text = str(raw_status).strip().upper()
if status_text in {"PASS", "FAIL", "WARN"}:
return status_text
return "UNKNOWN"
# [/DEF:_normalize_validation_status:Function]
# [DEF:get_datasets_with_status:Function]
# @PURPOSE: Fetch datasets from environment with mapping progress and last task status