// ===== observer 命令契约(shared——typed commands 词形)=====
// 词形对位 observer-ui FetchPort 视图模型(ProcessRow/MemorySummary——
// etop_proc_info 七字段谱键映射;ToJson/FromJson derive 契约化——
// frontend/backend 双端同形)
///|
/// 进程行(pid 标识+name+内存+消息队列长——五键简化路 v2)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct ProcessRow {
pid : String
name : String
memory_bytes : Int32
message_queue_len : Int32
reductions : Int32
}
///|
pub extend ProcessRow with ToJson::{to_json}
///|
pub extend ProcessRow with FromJson::{from_json}
///|
pub extend ProcessRow with Eq::{not_equal, equal}
///|
pub extend ProcessRow with Debug::{to_repr}
///|
/// 内存摘要(erlang:memory() 词对四键摘)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct MemorySummary {
total : Int32
processes : Int32
ets : Int32
atom : Int32
}
///|
pub extend MemorySummary with ToJson::{to_json}
///|
pub extend MemorySummary with FromJson::{from_json}
///|
pub extend MemorySummary with Eq::{not_equal, equal}
///|
pub extend MemorySummary with Debug::{to_repr}
///|
/// ETS 表行(表名+大小——骨架形)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct EtsRow {
name : String
size : Int32
}
///|
pub extend EtsRow with ToJson::{to_json}
///|
pub extend EtsRow with FromJson::{from_json}
///|
pub extend EtsRow with Eq::{not_equal, equal}
///|
pub extend EtsRow with Debug::{to_repr}
///|
/// 端口摘要(端口数+端口名清单——骨架形)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct PortSummary {
count : Int32
names : Array[String]
}
///|
pub extend PortSummary with ToJson::{to_json}
///|
pub extend PortSummary with FromJson::{from_json}
///|
pub extend PortSummary with Eq::{not_equal, equal}
///|
pub extend PortSummary with Debug::{to_repr}
///|
/// 观察器快照(五面拉全链载荷——refresh 编排对位)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct ObserverSnapshot {
process_rows : Array[ProcessRow]
memory : MemorySummary
ets_rows : Array[EtsRow]
ports : PortSummary
}
///|
pub extend ObserverSnapshot with ToJson::{to_json}
///|
pub extend ObserverSnapshot with FromJson::{from_json}
///|
pub extend ObserverSnapshot with Eq::{not_equal, equal}
///|
pub extend ObserverSnapshot with Debug::{to_repr}
///|
/// 命令请求形(观察器五词——node 指示+空载荷形)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) struct NodeRequest {
node : String
}
///|
pub extend NodeRequest with ToJson::{to_json}
///|
pub extend NodeRequest with FromJson::{from_json}
///|
pub extend NodeRequest with Eq::{not_equal, equal}
///|
pub extend NodeRequest with Debug::{to_repr}
///|
/// 命令描述符五词(proton_contract.Command[Request, Reply] 形——
/// 照 todo_contract list_todos 形;backend registrar.bind 对位)
pub let fetch_processes : @proton_contract.Command[
NodeRequest,
Array[ProcessRow],
] = @proton_contract.command("fetch_processes")
///|
pub let fetch_memory : @proton_contract.Command[NodeRequest, MemorySummary] = @proton_contract.command(
"fetch_memory",
)
///|
pub let fetch_ets : @proton_contract.Command[NodeRequest, Array[EtsRow]] = @proton_contract.command(
"fetch_ets",
)
///|
pub let fetch_ports : @proton_contract.Command[NodeRequest, PortSummary] = @proton_contract.command(
"fetch_ports",
)
///|
pub let fetch_snapshot : @proton_contract.Command[NodeRequest, ObserverSnapshot] = @proton_contract.command(
"fetch_snapshot",
)
///|
/// 视图错误(数据面诚实拒——ShapeMismatch 形;frontend/backend 双端同形)
#derive(ToJson, FromJson, Eq, Debug)
pub(all) suberror ViewError {
ShapeMismatch(String)
}
///|
pub extend ViewError with ToJson::{to_json}
///|
pub extend ViewError with Debug::{to_repr}
///|
pub extend ViewError with @moonbitlang/core/json.FromJson::{from_json}
///|
pub extend ViewError with Eq::{not_equal, equal}