Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adjust software startup logic #2321

Merged
merged 2 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
428 changes: 234 additions & 194 deletions app/main/handlers/upgradeUtil.js

Large diffs are not rendered by default.

58 changes: 39 additions & 19 deletions app/main/handlers/utils/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ async function getAvailableOSSDomain() {
}
}

/**获取校验url */
/** 获取校验url */
const getCheckTextUrl = async (version) => {
const domain = await getAvailableOSSDomain()
let system_mode = ""
Expand Down Expand Up @@ -136,6 +136,21 @@ const getCheckTextUrl = async (version) => {
}
return url
}
/** 获取指定版本号的引擎Hash值 */
const fetchSpecifiedYakVersionHash = async (version, requestConfig) => {
const url = await getCheckTextUrl(version)
if (url === "") {
throw new Error(`No Find ${version} Hash Url`)
}
return axios.get(url, {...(requestConfig || {}), httpsAgent: getHttpsAgentByDomain(url)}).then((response) => {
const versionData = Buffer.from(response.data).toString("utf8")
if (versionData.length > 0) {
return Buffer.from(response.data).toString("utf8")
} else {
throw new Error("校验值不存在")
}
})
}
/** 获取最新 yak 版本号 */
const fetchLatestYakEngineVersion = async () => {
const domain = await getAvailableOSSDomain()
Expand All @@ -150,30 +165,34 @@ const fetchLatestYakEngineVersion = async () => {
})
}
/** 获取最新 yakit 版本号 */
const fetchLatestYakitVersion = async () => {
const fetchLatestYakitVersion = async (requestConfig) => {
const domain = await getAvailableOSSDomain()
const versionUrl = `https://${domain}/yak/latest/yakit-version.txt`
return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then((response) => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
} else {
throw new Error("Failed to fetch version data")
}
})
return axios
.get(versionUrl, {...(requestConfig || {}), httpsAgent: getHttpsAgentByDomain(domain)})
.then((response) => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
} else {
throw new Error("Failed to fetch version data")
}
})
}
/** 获取最新 yakit EE 版本号 */
const fetchLatestYakitEEVersion = async () => {
const fetchLatestYakitEEVersion = async (requestConfig) => {
const domain = await getAvailableOSSDomain()
const versionUrl = `https://${domain}/vip/latest/yakit-version.txt`
return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then((response) => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
} else {
throw new Error("Failed to fetch version data")
}
})
return axios
.get(versionUrl, {...(requestConfig || {}), httpsAgent: getHttpsAgentByDomain(domain)})
.then((response) => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
} else {
throw new Error("Failed to fetch version data")
}
})
}
/** 引擎下载地址 */
const getYakEngineDownloadUrl = async (version) => {
Expand Down Expand Up @@ -295,6 +314,7 @@ const downloadYakitEE = async (version, destination, progressHandler, onFinished

module.exports = {
getCheckTextUrl,
fetchSpecifiedYakVersionHash,
fetchLatestYakEngineVersion,
fetchLatestYakitVersion,
fetchLatestYakitEEVersion,
Expand Down
2 changes: 1 addition & 1 deletion app/main/handlers/utils/requestWithProgress.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ function yakitCancelRequestWithProgress() {
return new Promise((resolve, reject) => {
if (writer) {
writer.on("close", () => {
reject(new Error("Write operation cancelled"))
reject(new Error("Write operation stoped"))
})
writer.destroy(new Error("Write operation cancelled"))
} else {
Expand Down
51 changes: 8 additions & 43 deletions app/main/uiOperate/yaklangAndYakit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const {
fetchLatestYakitEEVersion,
fetchLatestYakitVersion,
getAvailableOSSDomain,
fetchSpecifiedYakVersionHash
} = require("../handlers/utils/network")
const {getCheckTextUrl} = require("../handlers/utils/network")

Expand Down Expand Up @@ -41,10 +42,11 @@ module.exports = (win, getClient) => {
})

/** 获取Yakit最新版本号 */
const asyncFetchLatestYakitVersion = (isEnterprise) => {
const asyncFetchLatestYakitVersion = (params) => {
const {config, isEnterprise} = params
return new Promise((resolve, reject) => {
const fetchPromise = isEnterprise ? fetchLatestYakitEEVersion : fetchLatestYakitVersion
fetchPromise()
fetchPromise(config)
.then((version) => {
resolve(version)
})
Expand All @@ -54,8 +56,8 @@ module.exports = (win, getClient) => {
})
}
/** 获取Yakit最新版本号 */
ipcMain.handle("fetch-latest-yakit-version", async (e, isEnterprise) => {
return await asyncFetchLatestYakitVersion(isEnterprise)
ipcMain.handle("fetch-latest-yakit-version", async (e, params) => {
return await asyncFetchLatestYakitVersion(params)
})

/** 获取Yakit本地版本号 */
Expand All @@ -68,20 +70,6 @@ module.exports = (win, getClient) => {
win.webContents.send("kill-old-engine-process-callback", type)
})

/** 获取软件当前版本对应的引擎版本号 */
ipcMain.handle("fetch-built-in-engine-version", (e) => {
const versionPath = loadExtraFilePath(path.join("bins", "engine-version.txt"))
if (fs.existsSync(versionPath)) {
try {
return fs.readFileSync(versionPath).toString("utf8")
} catch (error) {
return ""
}
} else {
return ""
}
})

/** 获取Yaklang所有版本 */
const asyncFetchYaklangVersionList = async () => {
return new Promise(async (resolve, reject) => {
Expand All @@ -100,31 +88,8 @@ module.exports = (win, getClient) => {
return await asyncFetchYaklangVersionList()
})

const asyncFetchCheckYaklangSource = (version) => {
return new Promise(async (resolve, reject) => {
try {
const url = await getCheckTextUrl(version)
if (url === "") {
reject(`Unsupported platform: ${process.platform}`)
}
let rsp = https.get(url)
rsp.on("response", (rsp) => {
rsp.on("data", (data) => {
if (rsp.statusCode == 200) {
resolve(Buffer.from(data).toString("utf8"))
} else {
reject("校验值不存在")
}
}).on("error", (err) => reject(err))
})
rsp.on("error", reject)
} catch (error) {
reject(error)
}
})
}
/** 校验Yaklang来源是否正确 */
ipcMain.handle("fetch-check-yaklang-source", async (e, version) => {
return await asyncFetchCheckYaklangSource(version)
ipcMain.handle("fetch-check-yaklang-source", async (e, version, requestConfig) => {
return await fetchSpecifiedYakVersionHash(version, requestConfig)
})
}
7 changes: 4 additions & 3 deletions app/renderer/src/main/src/NewApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {useTemporaryProjectStore} from "./store/temporaryProject"
import {useRunNodeStore} from "./store/runNode"
import {LocalGVS} from "./enums/localGlobal"
import {handleFetchSystemInfo} from "./constants/hardware"
import { closeWebSocket, startWebSocket } from "./utils/webSocket/webSocket"
import {closeWebSocket, startWebSocket} from "./utils/webSocket/webSocket"

/** 部分页面懒加载 */
const Main = lazy(() => import("./pages/MainOperator"))
Expand Down Expand Up @@ -46,6 +46,7 @@ function NewApp() {
useEffect(() => {
// 解压命令执行引擎脚本压缩包
ipcRenderer.invoke("generate-start-engine")
// 获取系统信息
handleFetchSystemInfo()
// 告诉主进程软件的版本(CE|EE)
ipcRenderer.invoke("is-enpritrace-to-domain", !isCommunityEdition())
Expand Down Expand Up @@ -308,13 +309,13 @@ function NewApp() {
}, [userInfo.isLogin])

// 在页面打开时,执行一次,用于初始化WebSocket推送(DuplexConnection)
useEffect(()=>{
useEffect(() => {
startWebSocket()
return () => {
// 当组件销毁的时候,关闭WebSocket
closeWebSocket()
}
},[])
}, [])

if (!agreed) {
return (
Expand Down
76 changes: 62 additions & 14 deletions app/renderer/src/main/src/apiUtils/grpc.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
import {yakitNotify} from "@/utils/notification"
import {APINoRequestFunc} from "./type"
import {APIFunc, APINoRequestFunc, APIOptionalFunc} from "./type"
import {isCommunityEdition} from "@/utils/envfile"

const {ipcRenderer} = window.require("electron")

interface GrpcToHTTPRequestProps {
timeout?: number
}

/** @name 获取Yakit最新版本号 */
export const grpcFetchLatestYakitVersion: APINoRequestFunc<string> = (hiddenError) => {
export const grpcFetchLatestYakitVersion: APIOptionalFunc<GrpcToHTTPRequestProps, string> = (config, hiddenError) => {
return new Promise(async (resolve, reject) => {
ipcRenderer
.invoke("fetch-latest-yakit-version", !isCommunityEdition())
.invoke("fetch-latest-yakit-version", {
config: config,
isEnterprise: !isCommunityEdition()
})
.then(resolve)
.catch((e) => {
if (!hiddenError) yakitNotify("error", "获取最新软件版本失败:" + e)
Expand All @@ -17,19 +24,22 @@ export const grpcFetchLatestYakitVersion: APINoRequestFunc<string> = (hiddenErro
})
}

let ossDomain: string = "";
let ossDomain: string = ""

/** @name OSS域名 */
export const grpcFetchLatestOSSDomain: APINoRequestFunc<string> = (hiddenError) => {
return new Promise(async (resolve, reject) => {
if(ossDomain && ossDomain.length > 0){
if (ossDomain && ossDomain.length > 0) {
resolve(ossDomain)
return
}
ipcRenderer.invoke("get-available-oss-domain").then((domain)=>{
ossDomain = domain
resolve(domain)
}).catch(reject)
ipcRenderer
.invoke("get-available-oss-domain")
.then((domain) => {
ossDomain = domain
resolve(domain)
})
.catch(reject)
})
}

Expand All @@ -55,14 +65,14 @@ export const grpcFetchLocalYakitVersion: APINoRequestFunc<string> = (hiddenError
ipcRenderer
.invoke("fetch-yakit-version")
.then((version: string) => {
let newVersion=version
let newVersion = version
// 如果存在-ce,则软件是 CE 版本
if(version.endsWith("-ce")){
if (version.endsWith("-ce")) {
newVersion = version.replace("-ce", "")
}
}
// 如果存在-ee,则软件是 EE 版本
if(version.endsWith("-ee")){
newVersion = version.replace("-ee", "")
if (version.endsWith("-ee")) {
newVersion = version.replace("-ee", "")
}
resolve(newVersion)
})
Expand Down Expand Up @@ -98,3 +108,41 @@ export const grpcFetchYakInstallResult: APINoRequestFunc<boolean> = (hiddenError
})
})
}

/**
* @name 获取Yak内置引擎版本号
* 如果没有内置引擎压缩包,也算无法获取到内置引擎版本号
*/
export const grpcFetchBuildInYakVersion: APINoRequestFunc<string> = (hiddenError) => {
return new Promise(async (resolve, reject) => {
ipcRenderer
.invoke("GetBuildInEngineVersion")
.then((res) => {
// 考虑文件里的版本号可能有换行符,需要去掉
const version = (res || "").replace(/\r?\n/g, "")
resolve(version)
})
.catch((e) => {
if (!hiddenError) yakitNotify("error", "获取内置引擎版本失败:" + e)
reject(e)
})
})
}

/** @name 获取指定Yak引擎版本号的校验Hash值 */
export const grpcFetchSpecifiedYakVersionHash: APIFunc<{version: string; config: GrpcToHTTPRequestProps}, string> = (
request,
hiddenError
) => {
const {version, config} = request

return new Promise(async (resolve, reject) => {
ipcRenderer
.invoke("fetch-check-yaklang-source", version, config)
.then(resolve)
.catch((e) => {
if (!hiddenError) yakitNotify("error", "获取最新软件版本失败:" + e)
reject(e)
})
})
}

This file was deleted.

Loading
Loading