summaryrefslogtreecommitdiffstats
path: root/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config.go')
-rw-r--r--config.go103
1 files changed, 78 insertions, 25 deletions
diff --git a/config.go b/config.go
index 3d1ae38..7809918 100644
--- a/config.go
+++ b/config.go
@@ -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"
+)