bash_go_service/backend-service/pkg/service/version.go

60 lines
1.3 KiB
Go

package service
import (
"backend-service/pkg/version"
"bash_go_service/shared/pkg/logger"
"context"
"time"
"github.com/spf13/viper"
)
// VersionCheckTask represents a task that checks for version updates.
type VersionCheckTask struct {
interval time.Duration
}
// NewVersionCheckTask creates a new VersionCheckTask.
func NewVersionCheckTask() *VersionCheckTask {
interval := viper.GetDuration("update_checker.interval")
if interval < 1*time.Hour {
interval = 1 * time.Hour // 默认值为1小时
}
logger.Debug("VersionCheckTask interval: %v", interval)
return &VersionCheckTask{
interval: interval,
}
}
// Execute runs the version check task periodically.
func (t *VersionCheckTask) Execute(ctx context.Context) {
ticker := time.NewTicker(t.interval)
defer ticker.Stop()
for {
select {
case <-ticker.C:
t.CheckUpdate()
case <-ctx.Done():
logger.Info("VersionCheckTask stopped")
return
}
}
}
// 检查更新,将文件下载到本地,在下次启动程序时执行更新
func (t *VersionCheckTask) CheckUpdate() {
needUpdate, err := version.CheckUpdate()
if err != nil {
logger.Error("Check Update error: %v", err)
return
}
logger.Info("Check Update result is: %v", needUpdate)
}
// Name returns the name of the task.
func (t *VersionCheckTask) Name() string {
return "VersionCheckTask"
}