in config/config.go [196:258]
func Get(cc *CLIConfig, ec *Extended, logger *log.Logger) (*AppConfig, error) {
data, err := ioutil.ReadFile(*cc.ConfigFile)
if err != nil {
return nil, err
}
b, err := unmarshalBasicConfig(data, *cc.ConfigFile)
if err != nil {
return nil, err
}
mc, err := ec.Metrics.UnmarshalConfig(data, *cc.ConfigFile, logger.Logger)
if err != nil {
return nil, err
}
output := []string{"stderr"}
if b.Logging.StdOut || *cc.Foreground {
output = []string{"stdout"}
}
if b.Logging.LogSink != "" {
logger.Info("Log file path provided", zap.String("path", b.Logging.LogSink))
output = append(output, b.Logging.LogSink)
}
osHostname, _ := GetHostname(logger)
initialFields := map[string]interface{}{
"service_name": defines.ArachneService,
"hostname": osHostname,
"PID": os.Getpid(),
}
var level zapcore.Level
if err := level.Set(b.Logging.Level); err != nil {
logger.Error("Log level provided", zap.Error(err))
}
zc := zap.Config{
Level: zap.NewAtomicLevelAt(level),
Development: false,
DisableCaller: true,
EncoderConfig: zap.NewProductionEncoderConfig(),
Encoding: "json",
ErrorOutputPaths: []string{"stdout"},
OutputPaths: output,
InitialFields: initialFields,
}
cfg := AppConfig{
Logging: &zc,
PIDPath: b.Arachne.PIDPath,
Orchestrator: b.Arachne.Orchestrator,
StandaloneTargetConfig: b.Arachne.StandaloneTargetConfig,
Metrics: mc,
}
if !cfg.Orchestrator.Enabled && cfg.StandaloneTargetConfig == "" {
return nil, errors.New("the standalone-mode target configuration file has not been specified")
}
return &cfg, nil
}