bash_go_service/config-loader/internal/utils/config_loader.go

104 lines
2.4 KiB
Go

package utils
import (
"encoding/json"
"os"
"bash_go_service/config-loader/internal/models"
"bash_go_service/shared/pkg/client"
"bash_go_service/shared/pkg/constants"
"bash_go_service/shared/pkg/logger"
)
func LoadConfigFromFile(filename string) (*models.JSONConfig, error) {
logger.Debug("Loading config from file: %s", filename)
data, err := os.ReadFile(filename)
if err != nil {
logger.Error("Failed to read config file: %v", err)
return nil, err
}
var config models.JSONConfig
err = json.Unmarshal(data, &config)
if err != nil {
logger.Error("Failed to unmarshal config: %v", err)
return nil, err
}
// 添加跳过规则
// skipRules := []models.JSONRule{
// {
// Cmd: "dirname",
// Type: "skip",
// },
// {
// Cmd: "lesspipe",
// Type: "skip",
// },
// {
// Cmd: "command-not-found",
// Type: "skip",
// },
// {
// Cmd: "dircolors",
// Type: "skip",
// },
// {
// Cmd: "basename",
// Type: "skip",
// },
// }
// 将规则添加到配置中
// config.Rules = append(config.Rules, skipRules...)
logger.Info("Configuration successfully loaded from file with skip rules added")
return &config, nil
}
func LoadConfigFromServer() (*models.JSONConfig, error) {
var config models.JSONConfig
cli := client.NewClient()
err := cli.Get(constants.GetConfigApi, nil, &config)
if err != nil {
logger.Error("Failed to read config file: %v", err)
return nil, err
}
logger.Info("Configuration successfully loaded from file with skip rules added")
return &config, nil
}
func ConvertToCConfig(jsonConfig *models.JSONConfig) *models.ConfigData {
logger.Debug("Converting JSON config to C config")
cConfig := &models.ConfigData{
Enabled: jsonConfig.Enabled,
RuleCount: int32(len(jsonConfig.Rules)),
}
for i, rule := range jsonConfig.Rules {
if i >= constants.MaxRules {
logger.Warn("Exceeded maximum rules limit (%d)", constants.MaxRules)
break
}
copy(cConfig.Rules[i].Cmd[:], rule.Cmd)
copy(cConfig.Rules[i].Type[:], rule.Type)
copy(cConfig.Rules[i].Msg[:], rule.Msg)
cConfig.Rules[i].ArgCount = int32(len(rule.Args))
for j, arg := range rule.Args {
if j >= constants.MaxArgs {
logger.Warn("Exceeded maximum arguments limit (%d) for rule %d", constants.MaxArgs, i)
break
}
copy(cConfig.Rules[i].Args[j][:], arg)
}
}
logger.Info("Successfully converted JSON config to C config")
return cConfig
}