feat: agent selfupdate check

This commit is contained in:
engigu
2026-01-01 15:14:56 +08:00
parent 433c586f2a
commit 8fbc60473c
2 changed files with 37 additions and 2 deletions
+2 -2
View File
@@ -182,7 +182,7 @@ func (c *AgentController) Heartbeat(ctx *gin.Context) {
// 检查是否需要更新
latestVersion := c.agentService.GetLatestVersion()
needUpdate := latestVersion != "" && req.Version != "" && req.Version != latestVersion
needUpdate := c.agentService.CheckNeedUpdate(req.Version, req.BuildTime)
forceUpdate := agent.ForceUpdate
// 如果强制更新已触发,重置标志
@@ -524,7 +524,7 @@ func (c *AgentController) handleHeartbeat(ac *services.AgentConnection, agent *m
// 检查是否需要更新
latestVersion := c.agentService.GetLatestVersion()
needUpdate := latestVersion != "" && req.Version != "" && req.Version != latestVersion
needUpdate := c.agentService.CheckNeedUpdate(req.Version, req.BuildTime)
forceUpdate := agent.ForceUpdate
if forceUpdate && needUpdate {
+35
View File
@@ -1,6 +1,7 @@
package services
import (
"baihu/internal/constant"
"baihu/internal/database"
"baihu/internal/logger"
"baihu/internal/models"
@@ -387,6 +388,40 @@ func (s *AgentService) GetLatestVersion() string {
return strings.TrimSpace(string(data))
}
// GetLatestBuildTime 获取最新 Agent 构建时间
func (s *AgentService) GetLatestBuildTime() string {
return constant.BuildTime
}
// CheckNeedUpdate 检查 Agent 是否需要更新
// 比较 version 和 build_time,任一不同则需要更新
func (s *AgentService) CheckNeedUpdate(agentVersion, agentBuildTime string) bool {
latestVersion := s.GetLatestVersion()
latestBuildTime := s.GetLatestBuildTime()
// 如果没有最新版本信息,不需要更新
if latestVersion == "" {
return false
}
// 如果 Agent 没有版本信息,需要更新
if agentVersion == "" {
return true
}
// 版本不同,需要更新
if agentVersion != latestVersion {
return true
}
// 版本相同但构建时间不同,也需要更新
if latestBuildTime != "" && latestBuildTime != "unknown" && agentBuildTime != "" && agentBuildTime != latestBuildTime {
return true
}
return false
}
// GetAvailablePlatforms 获取可用的平台列表
func (s *AgentService) GetAvailablePlatforms() []map[string]string {
platforms := []map[string]string{}