调整部分前端布局和后端增删改逻辑
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from collections.abc import Iterable
|
||||
from dataclasses import dataclass
|
||||
from typing import Protocol
|
||||
|
||||
|
||||
class StatusCarrier(Protocol):
|
||||
"""
|
||||
状态载体协议。
|
||||
|
||||
该协议用于描述首页面板、详情分区和浏览记录这类具备 `status`
|
||||
属性的摘要统计对象。
|
||||
"""
|
||||
|
||||
status: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class StatusSummary:
|
||||
"""
|
||||
状态摘要统计结果。
|
||||
|
||||
:param total_count: 总数量
|
||||
:param ok_count: 正常数量
|
||||
:param warn_count: 警告数量
|
||||
:param fail_count: 失败数量
|
||||
"""
|
||||
|
||||
total_count: int
|
||||
ok_count: int
|
||||
warn_count: int
|
||||
fail_count: int
|
||||
|
||||
|
||||
class StatusSummaryBuilder:
|
||||
"""
|
||||
状态摘要构建器。
|
||||
|
||||
该对象负责对带 `status` 属性的集合做统一计数,供 dashboard、
|
||||
detail、browser 三类 screen support 复用。
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def build(items: Iterable[StatusCarrier]) -> StatusSummary:
|
||||
"""
|
||||
统计状态摘要。
|
||||
|
||||
:param items: 待统计对象集合
|
||||
:return: 状态摘要
|
||||
"""
|
||||
materialized = list(items)
|
||||
return StatusSummary(
|
||||
total_count=len(materialized),
|
||||
ok_count=sum(1 for item in materialized if item.status == 'ok'),
|
||||
warn_count=sum(1 for item in materialized if item.status == 'warn'),
|
||||
fail_count=sum(1 for item in materialized if item.status == 'fail'),
|
||||
)
|
||||
|
||||
|
||||
STATUS_SUMMARY_BUILDER = StatusSummaryBuilder()
|
||||
Reference in New Issue
Block a user