diff options
author | Sean E. Russell <ser@ser1.net> | 2020-02-17 11:40:16 -0600 |
---|---|---|
committer | Sean E. Russell <ser@ser1.net> | 2020-02-17 11:40:16 -0600 |
commit | 2a533986815836ac65c2b03d1f9c4c508e5b98a9 (patch) | |
tree | 03d18ab237434820066eb82025f539ce1bfdbc56 /config.go | |
parent | 3fc3d1e18ed1f80444d037f34769841f4a7e37d9 (diff) | |
parent | 10e3b7afbc53fe68b3c9ec0dd8ddff4e15fba9e4 (diff) |
Adds log rotation, config file support, and refactoring. Colorschemes are self-registered. Merge remote-tracking branch 'jrswab/configFile111' into config_file; drastically refactored, and am not sure how much original code from the patch was used.
Diffstat (limited to 'config.go')
-rw-r--r-- | config.go | 91 |
1 files changed, 89 insertions, 2 deletions
@@ -1,7 +1,11 @@ package gotop import ( + "bufio" + "fmt" "io" + "strconv" + "strings" "time" "github.com/xxxserxxx/gotop/colorschemes" @@ -29,9 +33,92 @@ type Config struct { UpdateInterval time.Duration AverageLoad bool PercpuLoad bool - TempScale widgets.TempScale Statusbar bool + TempScale widgets.TempScale NetInterface string - Layout io.Reader + Layout string MaxLogSize int64 } + +func Parse(in io.Reader, conf *Config) error { + r := bufio.NewScanner(in) + var lineNo int + for r.Scan() { + l := strings.TrimSpace(r.Text()) + kv := strings.Split(l, "=") + if len(kv) != 2 { + return fmt.Errorf("bad config file syntax; should be KEY=VALUE, was %s", l) + } + key := strings.ToLower(kv[0]) + switch key { + default: + return fmt.Errorf("invalid config option %s", key) + case "configdir": + conf.ConfigDir = kv[1] + case "logdir": + conf.LogDir = kv[1] + case "logfile": + conf.LogFile = kv[1] + case "graphhorizontalscale": + iv, err := strconv.Atoi(kv[1]) + if err != nil { + return err + } + conf.GraphHorizontalScale = iv + case "helpvisible": + bv, err := strconv.ParseBool(kv[1]) + if err != nil { + return fmt.Errorf("line %d: %v", lineNo, err) + } + conf.HelpVisible = bv + 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": + iv, err := strconv.Atoi(kv[1]) + if err != nil { + return err + } + conf.UpdateInterval = time.Duration(iv) + case "averagecpu": + bv, err := strconv.ParseBool(kv[1]) + if err != nil { + return fmt.Errorf("line %d: %v", lineNo, err) + } + conf.AverageLoad = bv + case "percpuload": + bv, err := strconv.ParseBool(kv[1]) + if err != nil { + return fmt.Errorf("line %d: %v", lineNo, err) + } + conf.PercpuLoad = bv + case "tempscale": + iv, err := strconv.Atoi(kv[1]) + if err != nil { + return err + } + conf.TempScale = widgets.TempScale(iv) + case "statusbar": + bv, err := strconv.ParseBool(kv[1]) + if err != nil { + return fmt.Errorf("line %d: %v", lineNo, err) + } + conf.Statusbar = bv + case "netinterface": + conf.NetInterface = kv[1] + case "layout": + conf.Layout = kv[1] + case "maxlogsize": + iv, err := strconv.Atoi(kv[1]) + if err != nil { + return err + } + conf.MaxLogSize = int64(iv) + } + } + + return nil +} |