Files
crawlab/core/node/config/config_service.go
Marvin Zhang 3276083994 refactor: replace apex/log with structured logger across multiple services
- Replaced all instances of apex/log with a structured logger interface in various services, including Api, Server, Config, and others, to enhance logging consistency and context.
- Updated logging calls to utilize the new logger methods, improving error tracking and service monitoring.
- Added logger initialization in services and controllers to ensure proper logging setup.
- Improved error handling and logging messages for better clarity during service operations.
- Removed unused apex/log imports and cleaned up related code for better maintainability.
2024-12-24 19:11:19 +08:00

121 lines
2.6 KiB
Go

package config
import (
"encoding/json"
"github.com/crawlab-team/crawlab/core/entity"
"github.com/crawlab-team/crawlab/core/interfaces"
"github.com/crawlab-team/crawlab/core/utils"
"os"
"path/filepath"
"sync"
)
type Service struct {
cfg *entity.NodeInfo
interfaces.Logger
}
func (svc *Service) Init() (err error) {
metadataConfigPath := utils.GetMetadataConfigPath()
// check config directory path
configDirPath := filepath.Dir(metadataConfigPath)
if !utils.Exists(configDirPath) {
if err := os.MkdirAll(configDirPath, os.FileMode(0766)); err != nil {
svc.Errorf("create config directory error: %v", err)
return err
}
}
if !utils.Exists(metadataConfigPath) {
// not exists, set to default config, and create a config file for persistence
svc.cfg = newConfig()
data, err := json.Marshal(svc.cfg)
if err != nil {
svc.Errorf("marshal config error: %v", err)
return err
}
if err := os.WriteFile(metadataConfigPath, data, os.FileMode(0766)); err != nil {
svc.Errorf("write config file error: %v", err)
return err
}
} else {
// exists, read and set to config
data, err := os.ReadFile(metadataConfigPath)
if err != nil {
svc.Errorf("read config file error: %v", err)
return err
}
if err := json.Unmarshal(data, svc.cfg); err != nil {
svc.Errorf("unmarshal config error: %v", err)
return err
}
}
return nil
}
func (svc *Service) Reload() (err error) {
return svc.Init()
}
func (svc *Service) GetBasicNodeInfo() (res interfaces.Entity) {
res = &entity.NodeInfo{
Key: svc.GetNodeKey(),
Name: svc.GetNodeName(),
IsMaster: svc.IsMaster(),
AuthKey: svc.GetAuthKey(),
MaxRunners: svc.GetMaxRunners(),
}
return res
}
func (svc *Service) GetNodeKey() (res string) {
return svc.cfg.Key
}
func (svc *Service) GetNodeName() (res string) {
return svc.cfg.Name
}
func (svc *Service) IsMaster() (res bool) {
return svc.cfg.IsMaster
}
func (svc *Service) GetAuthKey() (res string) {
return svc.cfg.AuthKey
}
func (svc *Service) GetMaxRunners() (res int) {
return svc.cfg.MaxRunners
}
func newNodeConfigService() (svc2 interfaces.NodeConfigService, err error) {
// config service
svc := &Service{
cfg: newConfig(),
Logger: utils.NewLogger("NodeConfigService"),
}
// init
if err := svc.Init(); err != nil {
return nil, err
}
return svc, nil
}
var _service interfaces.NodeConfigService
var _serviceOnce sync.Once
func GetNodeConfigService() interfaces.NodeConfigService {
_serviceOnce.Do(func() {
var err error
_service, err = newNodeConfigService()
if err != nil {
panic(err)
}
})
return _service
}