@@ -408,6 +408,7 @@ func RegisterAgent(args *RegisterAgentRequest, logger *zap.SugaredLogger) (*Regi
408408 return nil , fmt .Errorf ("zadig server vm %s agent is nil in db" , args .Token )
409409 }
410410 vm .Agent .AgentVersion = args .Parameters .AgentVersion
411+ updateAgentVersionStatus (vm .Agent , logger )
411412 }
412413 err = commonrepo .NewPrivateKeyColl ().Update (vm .ID .Hex (), vm )
413414 if err != nil {
@@ -483,6 +484,10 @@ func Heartbeat(args *HeartbeatRequest, logger *zap.SugaredLogger) (*HeartbeatRes
483484 return nil , fmt .Errorf ("zadig server vm %s agent is nil in db" , args .Token )
484485 }
485486 vm .Agent .LastHeartbeatTime = time .Now ().Unix ()
487+ if args .Parameters != nil && args .Parameters .AgentVersion != "" {
488+ vm .Agent .AgentVersion = args .Parameters .AgentVersion
489+ }
490+ updateAgentVersionStatus (vm .Agent , logger )
486491
487492 err = commonrepo .NewPrivateKeyColl ().Update (vm .ID .Hex (), vm )
488493 if err != nil {
@@ -492,8 +497,9 @@ func Heartbeat(args *HeartbeatRequest, logger *zap.SugaredLogger) (*HeartbeatRes
492497
493498 if vm .Agent .NeedUpdate {
494499 resp .NeedUpdateAgentVersion = true
495- resp .AgentVersion = vm .Agent .AgentVersion
500+ resp .AgentVersion = vm .Agent .ZadigVersion
496501 }
502+ resp .ZadigVersion = vm .Agent .ZadigVersion
497503
498504 resp .ScheduleWorkflow = vm .ScheduleWorkflow
499505 if vm .ScheduleWorkflow && vm .Agent .Workspace != "" {
@@ -506,6 +512,24 @@ func Heartbeat(args *HeartbeatRequest, logger *zap.SugaredLogger) (*HeartbeatRes
506512 return resp , nil
507513}
508514
515+ func updateAgentVersionStatus (agent * commonmodels.VMAgent , logger * zap.SugaredLogger ) {
516+ latestVersion , err := config .GetZadigAgentVersion ()
517+ if err != nil {
518+ logger .Warnf ("failed to get zadig-agent version while handling heartbeat: %v" , err )
519+ return
520+ }
521+ agent .ZadigVersion = latestVersion
522+
523+ normalizedLatestVersion := strings .TrimPrefix (latestVersion , "v" )
524+ if normalizedLatestVersion == "" {
525+ agent .NeedUpdate = false
526+ return
527+ }
528+
529+ normalizedCurrentVersion := strings .TrimPrefix (agent .AgentVersion , "v" )
530+ agent .NeedUpdate = normalizedCurrentVersion != normalizedLatestVersion
531+ }
532+
509533type VMJobGetterMap struct {
510534 M sync.Mutex
511535 GetterMap map [string ]struct {}
0 commit comments