60 lines
1.3 KiB
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"
|
|
}
|