104 lines
2.4 KiB
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
|
|
}
|