监控、OSD
This commit is contained in:
+19
-28
@@ -44,7 +44,7 @@ export interface MonitorStatus {
|
||||
restartCount: number
|
||||
/** 是否为提权模式(通过 UAC 以管理员权限启动) */
|
||||
elevated: boolean
|
||||
/** Thing 自身是否以管理员权限运行(永久提权模式) */
|
||||
/** Thing 自身是否以管理员权限运行(提权模式) */
|
||||
thingElevated: boolean
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
/** 是否已完成首次加载(避免初始 null/false 导致 UI 闪烁误导状态) */
|
||||
const initialized = ref(false)
|
||||
|
||||
/** 永久提权标志是否已启用(后续启动自动触发 UAC) */
|
||||
/** 提权标志是否已启用(后续启动自动触发 UAC) */
|
||||
const elevateOnLaunch = ref(false)
|
||||
|
||||
/** 硬件监控配置(可用硬件 + 传感器类型清单 + 当前启用状态) */
|
||||
@@ -138,8 +138,8 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
if (!status.value) return 'idle'
|
||||
if (!status.value.running) return 'idle'
|
||||
if (!status.value.ready) return 'loading'
|
||||
if (eventCount.value === 0) return 'loading'
|
||||
if (Date.now() - lastEventTime.value > STALE_TIMEOUT_MS) return 'disconnected'
|
||||
// Kernel 已 ready 即视为已连接(避免 SSE 首事件延迟导致一直显示"启动中")
|
||||
if (Date.now() - lastEventTime.value > STALE_TIMEOUT_MS && eventCount.value > 0) return 'disconnected'
|
||||
return 'connected'
|
||||
})
|
||||
|
||||
@@ -197,6 +197,14 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
try {
|
||||
await invoke('monitor_start')
|
||||
await refreshStatus()
|
||||
// 进程拉起可能存在竞态(spawn 后状态未立即更新),短暂重试确保 running=true
|
||||
if (!status.value?.running) {
|
||||
for (let i = 0; i < 6; i++) {
|
||||
await new Promise(r => setTimeout(r, 500))
|
||||
await refreshStatus()
|
||||
if (status.value?.running) break
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
errorMsg.value = String(e)
|
||||
logger.error('启动失败: ' + e)
|
||||
@@ -222,26 +230,8 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
}
|
||||
}
|
||||
|
||||
/** 以管理员权限重启 Kernel(弹 UAC)。
|
||||
* 停止当前 Kernel → ShellExecute "runas" → 等待 ready → 重新订阅 SSE。
|
||||
* 提权后进程不归 ProcessManager 管,停止走 /shutdown 接口。
|
||||
*/
|
||||
async function startElevated() {
|
||||
if (starting.value) return
|
||||
starting.value = true
|
||||
errorMsg.value = null
|
||||
try {
|
||||
await invoke('monitor_start_elevated')
|
||||
await refreshStatus()
|
||||
} catch (e) {
|
||||
errorMsg.value = String(e)
|
||||
logger.error('提权启动失败: ' + e)
|
||||
} finally {
|
||||
starting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 永久提权:以管理员权限重启 Thing 自身,ThingHK 子进程会继承管理员权限。
|
||||
/** 提权:以管理员权限重启 Thing 自身,ThingHK 子进程会继承管理员权限。
|
||||
* Thing 以管理员权限运行时,ProcessManager 可直接管控 ThingHK,崩溃自动重启。
|
||||
* 非管理员时进程退出;已是管理员时仅设置标志并返回。 */
|
||||
async function elevateSelf() {
|
||||
if (starting.value) return
|
||||
@@ -253,13 +243,13 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
await refreshElevateOnLaunch()
|
||||
} catch (e) {
|
||||
errorMsg.value = String(e)
|
||||
logger.error('永久提权失败: ' + e)
|
||||
logger.error('提权失败: ' + e)
|
||||
} finally {
|
||||
starting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 刷新永久提权标志状态 */
|
||||
/** 刷新提权标志状态 */
|
||||
async function refreshElevateOnLaunch() {
|
||||
try {
|
||||
elevateOnLaunch.value = await invoke<boolean>('monitor_get_elevate_on_launch')
|
||||
@@ -269,7 +259,7 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
return elevateOnLaunch.value
|
||||
}
|
||||
|
||||
/** 取消永久提权:清除标志,下次启动不再触发 UAC(当前会话权限不变) */
|
||||
/** 取消提权:清除标志,下次启动不再触发 UAC(当前会话权限不变) */
|
||||
async function cancelElevation() {
|
||||
try {
|
||||
await invoke('monitor_set_elevate_on_launch', { enabled: false })
|
||||
@@ -337,6 +327,8 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
}))
|
||||
unlistenFns.push(await listen('monitor-ready', () => {
|
||||
refreshStatus()
|
||||
// Kernel 就绪后主动拉取一次快照,避免等待 SSE 首事件导致 UI 空白
|
||||
fetchSnapshot()
|
||||
}))
|
||||
unlistenFns.push(await listen('monitor-loading', () => {
|
||||
// 后端正在等待 Kernel ready,刷新状态以反映 running=true
|
||||
@@ -416,7 +408,6 @@ export const useMonitorStore = defineStore('monitor', () => {
|
||||
refreshKernelInfo,
|
||||
refreshElevateOnLaunch,
|
||||
start,
|
||||
startElevated,
|
||||
elevateSelf,
|
||||
cancelElevation,
|
||||
fetchHardwareConfig,
|
||||
|
||||
Reference in New Issue
Block a user