Skip to content

Commit

Permalink
1、修复测试小问题
Browse files Browse the repository at this point in the history
2、调整文件,增加启动进程报错信息的展示
3、修复插件调试里执行报错问题
  • Loading branch information
b1rdfree committed Apr 12, 2024
1 parent 5397974 commit 5dd5ec3
Show file tree
Hide file tree
Showing 11 changed files with 117 additions and 41 deletions.
3 changes: 2 additions & 1 deletion app/main/handlers/engineStatus.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const {getLocalYaklangEngine, engineLog, YakitProjectPath} = require("../filePat
const net = require("net")
const fs = require("fs")
const path = require("path")
const { getNowTime } = require("../toolsFunc")
const {getNowTime} = require("../toolsFunc")

/** 引擎错误日志 */
const logPath = path.join(engineLog, `engine-log-${getNowTime()}.txt`)
Expand Down Expand Up @@ -181,6 +181,7 @@ module.exports = (win, callback, getClient, newClient) => {
})
subprocess.on("error", (err) => {
toLog(`本地引擎遭遇错误,错误原因为:${err}`)
win.webContents.send("start-yaklang-engine-error", `本地引擎遭遇错误,错误原因为:${err}`)
reject(err)
})
subprocess.on("close", async (e) => {
Expand Down
6 changes: 6 additions & 0 deletions app/main/handlers/upgradeUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,12 @@ module.exports = {
let isFetchingVersion = false;
let latestVersionCache = null;

/** clear latestVersionCache value */
ipcMain.handle("clear-local-yaklang-version-cache", async (e) => {
latestVersionCache = null
return
})

// asyncQueryLatestYakEngineVersion wrapper
const asyncGetCurrentLatestYakVersion = (params) => {
return new Promise((resolve, reject) => {
Expand Down
14 changes: 8 additions & 6 deletions app/renderer/src/main/src/components/layout/FuncDomain.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1538,12 +1538,14 @@ const UIOpNotice: React.FC<UIOpNoticeProp> = React.memo((props) => {
if (yaklangVersion !== data) setYaklangLastVersion(data)
})
.catch((err) => {})
ipcRenderer
.invoke("get-current-yak")
.then((data: string) => {
!isRemoteMode && setYaklangLocalVersion(data)
})
.catch(() => {})
if (!isRemoteMode) {
ipcRenderer
.invoke("get-current-yak")
.then((data: string) => {
!isRemoteMode && setYaklangLocalVersion(data)
})
.catch(() => {})
}
/** 获取社区版yaklang更新内容 */
NetWorkApi<FetchUpdateContentProp, any>({
diyHome: "https://www.yaklang.com",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,24 +116,24 @@ export const LocalEngine: React.FC<LocalEngineProps> = memo(
const handleFetchYakitAndYaklangLatestVersion = useMemoizedFn(() => {
if (!isCommunityEdition()) return
getLocalValue(LocalGVS.NoAutobootLatestVersionCheck).then((val: boolean) => {
ipcRenderer
.invoke("fetch-latest-yakit-version")
.then((data: string) => {
if (!val) {
if (val) preventUpdateHint.current = true

if (!val) {
ipcRenderer
.invoke("fetch-latest-yakit-version")
.then((data: string) => {
if (preventUpdateHint.current) return
setLatestYakit(data || "")
}
})
.catch((err) => {})
ipcRenderer
.invoke("fetch-latest-yaklang-version")
.then((data: string) => {
if (!val) {
})
.catch((err) => {})
ipcRenderer
.invoke("fetch-latest-yaklang-version")
.then((data: string) => {
if (preventUpdateHint.current) return
setLatestYaklang(data || "")
}
})
.catch((err) => {})
})
.catch((err) => {})
}
})
})

Expand Down
66 changes: 59 additions & 7 deletions app/renderer/src/main/src/components/layout/UILayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@ import {FuncDomain} from "./FuncDomain"
import {TemporaryProjectPop, WinUIOp} from "./WinUIOp"
import {GlobalState} from "./GlobalState"
import {YakitGlobalHost} from "./YakitGlobalHost"
import {YakitSettingCallbackType, YakitStatusType, YakitSystem, YaklangEngineMode} from "@/yakitGVDefine"
import {
EngineWatchDogCallbackType,
YakitSettingCallbackType,
YakitStatusType,
YakitSystem,
YaklangEngineMode
} from "@/yakitGVDefine"
import {failed, info, warn, yakitFailed} from "@/utils/notification"
import {LocalGV, RemoteGV} from "@/yakitGV"
import {EngineModeVerbose, YakitLoading} from "../basics/YakitLoading"
Expand Down Expand Up @@ -138,6 +144,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
/** ---------- 引擎状态和连接相关逻辑 Start ---------- */
/** 插件漏洞信息库自检 */
const handleBuiltInCheck = useMemoizedFn(() => {
console.log("bug-cve")
ipcRenderer
.invoke("InitCVEDatabase")
.then(() => {
Expand All @@ -156,6 +163,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
* 4、引擎是否存在
*/
const handleFetchBaseInfo = useMemoizedFn(async (nextFunc?: () => any) => {
console.log("check-hardware")
try {
isDev.current = !!(await ipcRenderer.invoke("is-dev"))
} catch (error) {}
Expand All @@ -177,6 +185,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {

/** 获取上次连接引擎的模式 */
const handleLinkEngineMode = useMemoizedFn(() => {
console.log("init-link-mode")
setCheckLog(["获取上次连接引擎的模式..."])
getLocalValue(LocalGV.YaklangEngineMode).then((val: YaklangEngineMode) => {
switch (val) {
Expand Down Expand Up @@ -221,6 +230,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
})
// 切换本地模式
const handleLinkLocalMode = useMemoizedFn(() => {
console.log("check-local-install")
if (isEngineInstalled.current) {
if (!isInitLocalLink.current) {
setLinkLocalEngine()
Expand Down Expand Up @@ -267,7 +277,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
handleFetchBaseInfo(() => {
handleLinkEngineMode()
})
}, 2000)
}, 1000)
}, [])

/**
Expand Down Expand Up @@ -296,24 +306,31 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
if (isEngineInstalled.current === flag) return
isEngineInstalled.current = flag
isInitLocalLink.current = true
// 清空主进程yaklang版本缓存
ipcRenderer.invoke("clear-local-yaklang-version-cache")
})
}, waitTime)
return () => {
clearInterval(id)
}
} else {
// 清空主进程yaklang版本缓存
ipcRenderer.invoke("clear-local-yaklang-version-cache")
}
}, [engineLink])
/** ---------- 引擎状态和连接相关逻辑 End ---------- */

/** ---------- 软件状态与是否连接引擎相关方法 Start ---------- */
// 断开连接
const onDisconnect = useMemoizedFn(() => {
console.log("disconnect")
setCredential({...DefaultCredential})
setKeepalive(false)
onSetEngineLink(false)
})
// 开始连接引擎
const onStartLinkEngine = useMemoizedFn((isDynamicControl?: boolean) => {
console.log("start-link")
setTimeout(() => {
emiter.emit("startAndCreateEngineProcess", isDynamicControl)
}, 100)
Expand Down Expand Up @@ -416,6 +433,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
}, [engineLink])
// Loading页面切换引擎连接模式
const loadingClickCallback = useMemoizedFn((type: YaklangEngineMode | YakitStatusType) => {
console.log(`loading-callback-${type}`)
switch (type) {
case "checkError":
// 引擎权限错误-手动重启引擎
Expand Down Expand Up @@ -454,12 +472,13 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
})

const handleOperations = useMemoizedFn((type: YakitSettingCallbackType | YaklangEngineMode) => {
console.log(`operation-${type}`)
switch (type) {
case "break":
if (cacheYakitStatus.current === "link") {
onSetYakitStatus("break")
setTimeout(() => {
setCheckLog(["已主动断开引擎连接"])
setCheckLog(["已主动断开, 请点击手动连接引擎"])
onDisconnect()
}, 100)
}
Expand Down Expand Up @@ -545,6 +564,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
})
// kill完引擎进程后开始更新引擎
const killedEngineToUpdate = useMemoizedFn(() => {
console.log("killed-engine-to-update")
setYaklangKillPss(false)
if (!yaklangDownload) {
onSetEngineLink(false)
Expand All @@ -554,6 +574,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
})

const onDownloadedYaklang = useMemoizedFn(() => {
console.log(`updated-yaklang`)
setYaklangDownload(false)
setLinkLocalEngine()
})
Expand Down Expand Up @@ -935,7 +956,20 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
setTimeout(() => onSetEngineLink(true), 100)
})

/**
* 启动引擎进程的监听,用于显示启动进程错误时的报错信息
*/
useEffect(() => {
ipcRenderer.on("start-yaklang-engine-error", (_, error: string) => {
setCheckLog((arr) => arr.concat([`${error}`]))
})
return () => {
ipcRenderer.removeAllListeners("start-yaklang-engine-error")
}
}, [])

const onReady = useMemoizedFn(() => {
console.log("link-success")
if (!cacheEngineLink.current) {
isEnpriTraceAgent() ? SELinkedEngine() : onLinkedEngine()
}
Expand Down Expand Up @@ -981,7 +1015,9 @@ const UILayout: React.FC<UILayoutProp> = (props) => {

if (cacheYakitStatus.current === "error" && count === 20) {
// 连接断开后的20次尝试过后,不在进行尝试
setCheckLog(["连接超时, 请手动启动引擎"])
setCheckLog((arr) => {
return arr.slice(1).concat(["连接超时, 请手动启动引擎"])
})
return
}

Expand All @@ -993,14 +1029,31 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
onSetYakitStatus("")
}
if (cacheEngineMode.current === "local") {
setCheckLog(["引擎连接超时, 正在尝试重连"])
if (cacheYakitStatus.current === "link") setCheckLog(["引擎连接超时, 正在尝试重连"])
if (count > 8) {
onSetYakitStatus("error")
}
}
}
})

const onWatchDogCallback = useMemoizedFn((type: EngineWatchDogCallbackType) => {
switch (type) {
case "control-remote-connect-failed":
setCheckLog(["远程控制异常退出, 无法连接"])
onSetYakitStatus("control-remote-timeout")
return
case "remote-connect-failed":
setTimeout(() => {
setRemoteLinkLoading(false)
}, 300)
return

default:
return
}
})

return (
<div className={styles["ui-layout-wrapper"]}>
<div className={styles["ui-layout-container"]}>
Expand All @@ -1013,8 +1066,7 @@ const UILayout: React.FC<UILayoutProp> = (props) => {
onKeepaliveShouldChange={setKeepalive}
onReady={onReady}
onFailed={onFailed}
setLog={setCheckLog}
setYakitStatus={onSetYakitStatus}
failedCallback={onWatchDogCallback}
/>
<div id='yakit-header' className={styles["ui-layout-header"]}>
{system === "Darwin" ? (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, {useEffect, useRef, useState} from "react"
import {useDebounceEffect, useMemoizedFn} from "ahooks"
import {isEngineConnectionAlive, outputToWelcomeConsole} from "@/components/layout/WelcomeConsoleUtil"
import {YakitStatusType, YaklangEngineMode} from "@/yakitGVDefine"
import {EngineWatchDogCallbackType, YaklangEngineMode} from "@/yakitGVDefine"
import {EngineModeVerbose} from "@/components/basics/YakitLoading"
import {failed} from "@/utils/notification"
import {setRemoteValue} from "@/utils/kv"
Expand Down Expand Up @@ -35,8 +35,7 @@ export interface YaklangEngineWatchDogProps {
onFailed?: (failedCount: number) => any
onKeepaliveShouldChange?: (keepalive: boolean) => any

setLog: (arr: string[]) => any
setYakitStatus: (v: YakitStatusType) => any
failedCallback: (type: EngineWatchDogCallbackType) => any
}

export const YaklangEngineWatchDog: React.FC<YaklangEngineWatchDogProps> = React.memo(
Expand Down Expand Up @@ -95,8 +94,9 @@ export const YaklangEngineWatchDog: React.FC<YaklangEngineWatchDogProps> = React
case "remote":
outputToWelcomeConsole("远程模式不自动启动本地引擎")
if (isDynamicControl) {
props.setLog(["远程控制异常退出, 无法连接"])
props.setYakitStatus("control-remote-timeout")
props.failedCallback("control-remote-connect-failed")
} else {
props.failedCallback("remote-connect-failed")
}
failed(`${e}`)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ export const DownloadYaklang: React.FC<DownloadYaklangProps> = React.memo((props
// @ts-ignore
size: getDownloadProgress().size
})
// 清空主进程yaklang版本缓存
ipcRenderer.invoke("clear-local-yaklang-version-cache")
onUpdate()
})
.catch((e: any) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ export const InstallEngine: React.FC<InstallEngineProps> = React.memo((props) =>
size: getDownloadProgress().size
})
success("下载完毕")
// 清空主进程yaklang版本缓存
ipcRenderer.invoke("clear-local-yaklang-version-cache")
/** 安装yaklang引擎 */
ipcRenderer
.invoke("install-yak-engine", `${latestVersionRef.current}`)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ export const UpdateYakitAndYaklang: React.FC<UpdateYakitAndYaklangProps> = React
})

const yakitDownload = () => {
let version = ""
if (latestYakit.startsWith("v")) version = latestYakit.slice(1)
let version = latestYakit
if (version.startsWith("v")) version = version.slice(1)
isYakitBreak.current = false
setInstallYakit(true)
ipcRenderer
Expand Down Expand Up @@ -222,8 +222,8 @@ export const UpdateYakitAndYaklang: React.FC<UpdateYakitAndYaklangProps> = React
const yaklangDownload = useMemoizedFn(() => {
isYaklangBreak.current = false
setInstallYaklang(true)
let version = ""
if (latestYakit.startsWith("v")) version = latestYaklang.slice(1)
let version = latestYaklang
if (version.startsWith("v")) version = version.slice(1)
ipcRenderer
.invoke("download-latest-yak", version)
.then(() => {
Expand All @@ -241,6 +241,8 @@ export const UpdateYakitAndYaklang: React.FC<UpdateYakitAndYaklangProps> = React
// @ts-ignore
size: getYaklangProgress().size
})
// 清空主进程yaklang版本缓存
ipcRenderer.invoke("clear-local-yaklang-version-cache")
yaklangUpdate()
})
.catch((e: any) => {
Expand All @@ -261,8 +263,8 @@ export const UpdateYakitAndYaklang: React.FC<UpdateYakitAndYaklangProps> = React
}, 300)
})
const yaklangUpdate = useMemoizedFn(() => {
let version = ""
if (latestYakit.startsWith("v")) version = latestYaklang.slice(1)
let version = latestYaklang
if (version.startsWith("v")) version = version.slice(1)
ipcRenderer
.invoke("install-yak-engine", version)
.then(() => {
Expand Down
Loading

0 comments on commit 5dd5ec3

Please sign in to comment.