diff options
Diffstat (limited to 'config.go')
-rw-r--r-- | config.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/config.go b/config.go new file mode 100644 index 0000000..6d8786f --- /dev/null +++ b/config.go @@ -0,0 +1,112 @@ +package main + +import ( + "bytes" + "fmt" + "github.com/go-yaml/yaml" + "io" + "io/ioutil" + "log" + "os" +) + +type SCORSHWorker_cfg struct { + Name string `yaml:"w_name"` + Repos []string `yaml:"w_repos"` + Folder string `yaml:"w_folder"` + Logfile string `yaml:"w_logfile"` + Tagfile string `yaml:"w_tagfile"` + Keyrings []string `yaml:"w_keyrings"` +} + +type SCORSHcfg struct { + Spooldir string `yaml:"s_spooldir"` + Logfile string `yaml:"s_logfile"` + LogPrefix string `yaml:"s_logprefix"` + Workers []SCORSHWorker_cfg `yaml:"s_workers"` +} + +// Read a configuration from fname or die + +func ReadConfig(fname string) *SCORSHcfg { + + data, err := ioutil.ReadFile(fname) + if err != nil { + log.Fatal("Error while reading file: ", err) + } + + var cfg *SCORSHcfg + cfg = new(SCORSHcfg) + + // Unmarshal the YAML configuration file into a SCORSHcfg structure + err = yaml.Unmarshal(data, cfg) + if err != nil { + log.Fatal("Error while reading configuration: ", err) + } + + fmt.Printf("%s", cfg) + + // If the user has not set a spooldir, crash loudly + if cfg.Spooldir == "" { + log.Fatal("No spooldir defined in ", fname, ". Exiting\n") + } + + // Check if the user has set a custom logprefix + if cfg.LogPrefix != "" { + log.SetPrefix(cfg.LogPrefix) + } + + // Check if the user wants to redirect the logs to a file + if cfg.Logfile != "" { + f, err := os.Open(cfg.Logfile) + if err != nil { + log.SetOutput(io.Writer(f)) + } else { + log.Printf("Error opening logfile: \n", err) + } + } + + // If we got so far, then there is some sort of config in cfg + log.Printf("Successfully read config from %s\n", fname) + + return cfg + +} + +func (cfg *SCORSHcfg) String() string { + + var buff bytes.Buffer + + buff.WriteString("spooldir: ") + buff.WriteString(cfg.Spooldir) + buff.WriteString("\nlogfile: ") + buff.WriteString(cfg.Logfile) + buff.WriteString("\nlogprefix: ") + buff.WriteString(cfg.LogPrefix) + buff.WriteString("\nWorkers: \n") + + for _, w := range cfg.Workers { + buff.WriteString("---\n name: ") + buff.WriteString(w.Name) + buff.WriteString("\n repos: ") + for _, r := range w.Repos { + buff.WriteString("\n ") + buff.WriteString(r) + } + buff.WriteString("\n folder: ") + buff.WriteString(w.Folder) + buff.WriteString("\n logfile: ") + buff.WriteString(w.Logfile) + buff.WriteString("\n tagfile: ") + buff.WriteString(w.Tagfile) + buff.WriteString("\n keyrings: ") + for _, k := range w.Keyrings { + buff.WriteString("\n ") + buff.WriteString(k) + } + buff.WriteString("\n...\n") + + } + + return buff.String() +} |