diff options
Diffstat (limited to 'config.go')
-rw-r--r-- | config.go | 103 |
1 files changed, 78 insertions, 25 deletions
@@ -2,10 +2,10 @@ package gotop import ( "bufio" + "bytes" "fmt" - "io" "log" - "os" + "path/filepath" "strconv" "strings" "time" @@ -15,7 +15,6 @@ import ( "github.com/xxxserxxx/gotop/v3/widgets" ) -// TODO: test, build, release [#119] [#120] [#121] type Config struct { ConfigDir configdir.ConfigDir @@ -32,30 +31,31 @@ type Config struct { Layout string MaxLogSize int64 ExportPort string - Extensions []string Mbps bool + Temps []string Test bool } func (conf *Config) Load() error { - var in io.Reader + var in []byte + var err error cfn := "gotop.conf" folder := conf.ConfigDir.QueryFolderContainsFile(cfn) if folder != nil { - // FIXME: Shouldn't this be looking in folder?? - if cf, err := os.Open(cfn); err == nil { - defer cf.Close() - } else { + if in, err = folder.ReadFile(cfn); err != nil { return err } } else { return nil } - r := bufio.NewScanner(in) + r := bufio.NewScanner(bytes.NewReader(in)) var lineNo int for r.Scan() { l := strings.TrimSpace(r.Text()) + if l[0] == '#' { + continue + } kv := strings.Split(l, "=") if len(kv) != 2 { return fmt.Errorf("bad config file syntax; should be KEY=VALUE, was %s", l) @@ -70,72 +70,125 @@ func (conf *Config) Load() error { log.Printf("logdir is deprecated. Ignored logdir=%s", kv[1]) case "logfile": log.Printf("logfile is deprecated. Ignored logfile=%s", kv[1]) - case "graphhorizontalscale": + case graphhorizontalscale: iv, err := strconv.Atoi(kv[1]) if err != nil { return err } conf.GraphHorizontalScale = iv - case "helpvisible": + case helpvisible: bv, err := strconv.ParseBool(kv[1]) if err != nil { return fmt.Errorf("line %d: %v", lineNo, err) } conf.HelpVisible = bv - case "colorscheme": + case colorscheme: cs, err := colorschemes.FromName(conf.ConfigDir, kv[1]) if err != nil { return fmt.Errorf("line %d: %v", lineNo, err) } conf.Colorscheme = cs - case "updateinterval": + case updateinterval: iv, err := strconv.Atoi(kv[1]) if err != nil { return err } conf.UpdateInterval = time.Duration(iv) - case "averagecpu": + case averagecpu: bv, err := strconv.ParseBool(kv[1]) if err != nil { return fmt.Errorf("line %d: %v", lineNo, err) } conf.AverageLoad = bv - case "percpuload": + case percpuload: bv, err := strconv.ParseBool(kv[1]) if err != nil { return fmt.Errorf("line %d: %v", lineNo, err) } conf.PercpuLoad = bv - case "tempscale": + case tempscale: iv, err := strconv.Atoi(kv[1]) if err != nil { return err } conf.TempScale = widgets.TempScale(iv) - case "statusbar": + case statusbar: bv, err := strconv.ParseBool(kv[1]) if err != nil { return fmt.Errorf("line %d: %v", lineNo, err) } conf.Statusbar = bv - case "netinterface": + case netinterface: conf.NetInterface = kv[1] - case "layout": + case layout: conf.Layout = kv[1] - case "maxlogsize": + case maxlogsize: iv, err := strconv.Atoi(kv[1]) if err != nil { return err } conf.MaxLogSize = int64(iv) - case "export": + case export: conf.ExportPort = kv[1] - case "extensions": - conf.Extensions = strings.Split(kv[1], ",") - case "mbps": + case mbps: conf.Mbps = true + case temperatures: + conf.Temps = strings.Split(kv[1], ",") } } return nil } + +func (c *Config) Write() (string, error) { + cfn := "gotop.conf" + ds := c.ConfigDir.QueryFolders(configdir.Global) + if len(ds) == 0 { + ds = c.ConfigDir.QueryFolders(configdir.Local) + if len(ds) == 0 { + return "", fmt.Errorf("error locating config folders") + } + } + marshalled := marshal(c) + err := ds[0].WriteFile(cfn, marshalled) + if err != nil { + return "", err + } + return filepath.Join(ds[0].Path, cfn), nil +} + +func marshal(c *Config) []byte { + buff := bytes.NewBuffer(nil) + fmt.Fprintf(buff, "%s=%d\n", graphhorizontalscale, c.GraphHorizontalScale) + fmt.Fprintf(buff, "%s=%t\n", helpvisible, c.HelpVisible) + fmt.Fprintf(buff, "%s=%s\n", colorscheme, c.Colorscheme.Name) + fmt.Fprintf(buff, "%s=%d\n", updateinterval, c.UpdateInterval) + fmt.Fprintf(buff, "%s=%t\n", averagecpu, c.AverageLoad) + fmt.Fprintf(buff, "%s=%t\n", percpuload, c.PercpuLoad) + fmt.Fprintf(buff, "%s=%d\n", tempscale, c.TempScale) + fmt.Fprintf(buff, "%s=%t\n", statusbar, c.Statusbar) + fmt.Fprintf(buff, "%s=%s\n", netinterface, c.NetInterface) + fmt.Fprintf(buff, "%s=%s\n", layout, c.Layout) + fmt.Fprintf(buff, "%s=%d\n", maxlogsize, c.MaxLogSize) + fmt.Fprintf(buff, "%s=%s\n", export, c.ExportPort) + fmt.Fprintf(buff, "%s=%t\n", mbps, c.Mbps) + fmt.Fprintf(buff, "%s=%s\n", temperatures, strings.Join(c.Temps, ",")) + return buff.Bytes() +} + +const ( + graphhorizontalscale = "graphhorizontalscale" + helpvisible = "helpvisible" + colorscheme = "colorscheme" + updateinterval = "updateinterval" + averagecpu = "averagecpu" + percpuload = "percpuload" + tempscale = "tempscale" + statusbar = "statusbar" + netinterface = "netinterface" + layout = "layout" + maxlogsize = "maxlogsize" + export = "metricsexportport" + mbps = "mbps" + temperatures = "temperatures" +) |