summaryrefslogtreecommitdiffstats
path: root/config.go
diff options
context:
space:
mode:
authorSean E. Russell <ser@ser1.net>2020-02-17 11:40:16 -0600
committerSean E. Russell <ser@ser1.net>2020-02-17 11:40:16 -0600
commit2a533986815836ac65c2b03d1f9c4c508e5b98a9 (patch)
tree03d18ab237434820066eb82025f539ce1bfdbc56 /config.go
parent3fc3d1e18ed1f80444d037f34769841f4a7e37d9 (diff)
parent10e3b7afbc53fe68b3c9ec0dd8ddff4e15fba9e4 (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.go91
1 files changed, 89 insertions, 2 deletions
diff --git a/config.go b/config.go
index c215fac..0cd9e58 100644
--- a/config.go
+++ b/config.go
@@ -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
+}