仪表盘细节修整,内核卡片搬左列并加重启
- 曲线空态和图共用一个定高容器,数据到来不再挤下面的内容 - 路由行去掉行间分割线:它会吃掉 hover 高亮的圆角 - 每路走势线先合并成 28 桶再画。3 秒一个采样直接全画,在一条 百来像素宽的线上只剩噪声;没采集的桶画断口,不画假零 - 环形图两段加圆角,交界用底色描边让出间隙 - 内核卡片从右列搬到服务器和路由之间(左列本来就矮一截),加 「重启内核」:POST /restart 后内核自我 exec、PID 不变,恢复没有 任何通知,只能每 2 秒探一次,半分钟探不到交还给外壳心跳
This commit is contained in:
@@ -141,6 +141,25 @@ export async function selectProxy(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 让内核重启进程(POST /restart,内核源码 hub/route/restart.go:20-43)。
|
||||
*
|
||||
* 内核先回 {"status":"ok"} 再自我 exec。Linux 上用的是 syscall.Exec,PID 不变,
|
||||
* systemd 托管不受影响;策略组的选中靠 profile.store-selected 恢复。
|
||||
*/
|
||||
export async function restartKernel(env: Env): Promise<ValidateResult> {
|
||||
try {
|
||||
const res = await callApi(env, '/restart', {
|
||||
method: 'POST',
|
||||
signal: AbortSignal.timeout(10_000),
|
||||
})
|
||||
if (res.ok) return { ok: true, message: '' }
|
||||
return { ok: false, message: (await res.text()) || `管理接口返回 ${String(res.status)}` }
|
||||
} catch (error) {
|
||||
return { ok: false, message: `连不上管理接口:${String(error)}` }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 透传一个管理接口的 GET 请求。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user