96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProdCheckRenderingSupport:
|
|
"""
|
|
`wizard prod-check` 文本渲染支持对象。
|
|
|
|
该对象负责构建 runtime、doctor、config 分区文本行,
|
|
避免 presenter 本体继续维护全部分区细节。
|
|
"""
|
|
|
|
@staticmethod
|
|
def build_runtime_lines(runtime: dict[str, Any]) -> list[str]:
|
|
"""
|
|
构建 runtime 分区文本行。
|
|
|
|
:param runtime: runtime 结果片段
|
|
:return: 文本行列表
|
|
"""
|
|
return [
|
|
'runtime:',
|
|
f' cli_env: {runtime.get("cliEnv", "-")}',
|
|
f' config_env: {runtime.get("configEnv", "-")}',
|
|
f' env_file: {runtime.get("envFile", "-")}',
|
|
f' env_file_exists: {str(runtime.get("envFileExists", False)).lower()}',
|
|
]
|
|
|
|
@staticmethod
|
|
def build_doctor_lines(doctor: dict[str, Any]) -> list[str]:
|
|
"""
|
|
构建 doctor 分区文本行。
|
|
|
|
:param doctor: doctor 结果片段
|
|
:return: 文本行列表
|
|
"""
|
|
return [
|
|
'doctor:',
|
|
f' ok: {str(doctor.get("ok", False)).lower()}',
|
|
f' message: {doctor.get("message", "-")}',
|
|
]
|
|
|
|
@staticmethod
|
|
def build_config_lines(config: dict[str, Any]) -> list[str]:
|
|
"""
|
|
构建 config 分区文本行。
|
|
|
|
:param config: config 结果片段
|
|
:return: 文本行列表
|
|
"""
|
|
return [
|
|
'config:',
|
|
f' name: {config.get("name", "-")}',
|
|
f' host: {config.get("host", "-")}:{config.get("port", "-")}',
|
|
f' db_type: {config.get("dbType", "-")}',
|
|
f' redis_host: {config.get("redisHost", "-")}:{config.get("redisPort", "-")}',
|
|
]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProdCheckPresenter:
|
|
"""
|
|
`wizard prod-check` 结果展示器。
|
|
|
|
该对象负责将聚合结果转换为文本摘要,
|
|
避免在 flow 内继续维护文本渲染细节。
|
|
|
|
:param rendering_support: 文本渲染支持对象
|
|
"""
|
|
|
|
rendering_support: ProdCheckRenderingSupport = ProdCheckRenderingSupport()
|
|
|
|
def build_text(self, payload: dict[str, Any]) -> str:
|
|
"""
|
|
将生产巡检聚合结果渲染为文本摘要。
|
|
|
|
:param payload: 聚合结果字典
|
|
:return: 文本摘要
|
|
"""
|
|
lines = [
|
|
f'ok: {str(payload.get("ok", False)).lower()}',
|
|
f'env: {payload.get("env", "-")}',
|
|
f'message: {payload.get("message", "-")}',
|
|
]
|
|
runtime = payload.get('runtime')
|
|
if isinstance(runtime, dict):
|
|
lines.extend(self.rendering_support.build_runtime_lines(runtime))
|
|
doctor = payload.get('doctor')
|
|
if isinstance(doctor, dict):
|
|
lines.extend(self.rendering_support.build_doctor_lines(doctor))
|
|
config = payload.get('config')
|
|
if isinstance(config, dict):
|
|
lines.extend(self.rendering_support.build_config_lines(config))
|
|
return '\n'.join(lines)
|