import { request } from "./core"; /* ---------------------------------------------------------------------------- * 记忆整理**面板调优**(切片 MEMPANEL / M4)。真源: * internal/services/gateway/admin_memory_tuning.go(形状与错误码) * internal/services/gateway/admin_memory_tuning_file.go(取值规则 specs) * * GET /admin/memories/tidy/tuning 读:盘上 7 键值 + 取值规则 * PUT /admin/memories/tidy/tuning 写:三态补丁(键缺位 = 不改动 / 合法值 = 采用 / * 非法值 = 400 且盘上不动;`null` = 清掉该键) * * 两条都是 writeAuth(owner|admin)——与同族的 `/admin/memories` 同档:它是私有记忆面 * 的运行期旋钮,不是给 viewer 的监控投影。 * * ⚠️ 失败走 `error.code`,**绝不**回一份「已保存」的假成功: * - `invalid_payload` 400:值非法 / 未知键(**盘上一个字节都没动**) * - `tuning_corrupt` 409:盘上那份配置文件读不走 ⇒ 拒绝覆盖(要人工修/删) * - `tuning_unavailable` 500:数据目录未接线 * - `tuning_write_failed` 500:落盘失败(盘上内容未改动) * * 响应里的 `hot` 是**如实**的:true = 保存后当场生效;false = 已落盘,但运行期没接到 * 可热生效的实现(`hotError` 说明原因),此时界面必须写「重启后端后生效」。 * -------------------------------------------------------------------------- */ /** 调的落点(面板配置文件的**相对**路径,形如 `config/memory-tidy.json`)。 */ const TUNING_PATH = "/admin/memories/tidy/tuning"; /** 一个可写键的取值规则(后端下发,面板不另抄一份枚举/上下界)。 */ export interface AdminMemoryTidyTuningSpec { /** 键名,如 `intervalSec` / `ingestGate`。 */ key: string; /** `int` | `bool`(面板据此选控件类型)。 */ kind: string; /** `sec` | `hour`(仅 int 键;面板据此写单位)。 */ unit?: string; min?: number; max?: number; /** 缺位时生效值从哪来:`env:MEMORY_TIDY_*` / `panel:` / `code-default`。 */ fallback: string; } /** GET / PUT 的 data(PUT 的响应是**重新读盘**的结果,即真值回显)。 */ export interface AdminMemoryTidyTuningView { /** 面板配置文件相对 `$DATA_DIR` 的路径。 */ path: string; /** 文件是否已存在且有内容(false = 还没播种,后端下次启动会自动创建)。 */ present: boolean; /** 本次结果是否**当场生效**。false = 已落盘,要等后端重启(见 hotError)。 */ hot: boolean; /** `hot:false` 时的原因。 */ hotError?: string; specs: AdminMemoryTidyTuningSpec[]; /** **盘上**的值:键缺位 ⇒ 该键不出现(= 跟随兜底),不是 0。 */ values: Record; /** 缺位时**下一档(`.env`)**的进程生效值(与 /admin/config-facts 同源)。 */ envValues?: Record; } /** 写补丁:只放**真的要改**的键;`null` = 清掉该键(回到下一档兜底)。 */ export type AdminMemoryTidyTuningPatch = Record; /** GET /api/v1/admin/memories/tidy/tuning —— 读盘上的调优值 + 取值规则。 */ export function adminMemoryTidyTuning(): Promise { return request(TUNING_PATH); } /** PUT /api/v1/admin/memories/tidy/tuning —— 三态补丁写盘(并尽量热生效)。 */ export function adminMemoryTidyTuningSave( patch: AdminMemoryTidyTuningPatch ): Promise { return request(TUNING_PATH, { method: "PUT", body: JSON.stringify(patch), }); }