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

63 lines
1.3 KiB
Go

package service
import (
"context"
"time"
"bash_go_service/config-loader/pkg/manager"
"bash_go_service/shared/pkg/constants"
"bash_go_service/shared/pkg/logger"
"github.com/spf13/viper"
)
// ConfigManagerTask 配置管理器任务
type ConfigManagerTask struct {
manager *manager.ConfigManager
}
func NewConfigManagerTask() *ConfigManagerTask {
d := viper.GetDuration("bash_config.watch_interval")
if d < 1*time.Hour {
d = 1 * time.Hour // 默认值为1小时
}
logger.Info("ConfigManagerTask watch interval: %v", d)
return &ConfigManagerTask{
manager: manager.NewConfigManager(constants.RuleFile, d),
}
}
func (t *ConfigManagerTask) Execute(ctx context.Context) {
// 初始化配置管理器
ff, err := t.manager.Initialize()
if err != nil {
logger.Error("Failed to initialize config manager: %v", err)
return
}
if ff {
t.manager.StartWatching()
} else {
t.manager.StartSyncConfigTimer()
}
// 启动配置监控
// 等待上下文取消
<-ctx.Done()
// 停止配置管理器
t.manager.Stop()
// 清理共享内存
if err := t.manager.ClearSharedMemory(); err != nil {
logger.Error("Failed to clear shared memory: %v", err)
}
logger.Info("Config manager task stopped")
}
func (t *ConfigManagerTask) Name() string {
return "ConfigManagerTask"
}