From 07fccbcc29d9209ef97513f4c0731f53e5bccb17 Mon Sep 17 00:00:00 2001 From: kekskurse Date: Mon, 20 Sep 2021 12:38:41 +0200 Subject: [PATCH] Add Config --- config.go | 42 +++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 4 ++++ internal/pkg/checks/hdd.go | 14 +++++++++--- internal/pkg/checks/load.go | 14 ++++++++---- internal/pkg/checks/memory.go | 8 +++++-- main.go | 15 ++++++++++--- test.yml | 12 ++++++++++ vendor/modules.txt | 3 +++ 9 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 config.go create mode 100644 test.yml diff --git a/config.go b/config.go new file mode 100644 index 0000000..dd3f081 --- /dev/null +++ b/config.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "github.com/rs/zerolog/log" + "gopkg.in/yaml.v2" + "http-server-status/internal/pkg/checks" + "io/ioutil" + "os" +) + +var c Config + +type Config struct { + HTTP struct{ + Listen string `yaml:"listen"` + } `yaml:"http"` + Checks struct{ + HDD checks.HDDConfig `yaml:"hdd"` + Load checks.LoadConfig `yaml:"load"` + Memory checks.MemmoryConfig `yaml:"memory"` + } `yaml:"checks"` +} + +func readConfig() { + fmt.Println(os.Args) + filename := "/etc/http-server-status/config.yml" + if len(os.Args) > 1 { + filename = os.Args[1] + } + + log.Debug().Str("filename", filename).Msg("Load Config") + yamlFile, err := ioutil.ReadFile(filename) + if err != nil { + log.Fatal().Err(err).Msg("Cant get config file") + } + + err = yaml.Unmarshal(yamlFile, &c) + if err != nil { + log.Fatal().Err(err).Msg("Cant parse yaml file") + } +} \ No newline at end of file diff --git a/go.mod b/go.mod index fb4f8f8..1791183 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/mackerelio/go-osstat v0.2.0 github.com/rs/zerolog v1.25.0 github.com/shirou/gopsutil v3.21.8+incompatible + gopkg.in/yaml.v2 v2.4.0 ) require ( diff --git a/go.sum b/go.sum index 5bf0a94..c555a92 100644 --- a/go.sum +++ b/go.sum @@ -39,3 +39,7 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/internal/pkg/checks/hdd.go b/internal/pkg/checks/hdd.go index d963d5e..e7169d9 100644 --- a/internal/pkg/checks/hdd.go +++ b/internal/pkg/checks/hdd.go @@ -1,18 +1,26 @@ package checks -import "github.com/shirou/gopsutil/disk" +import ( + "github.com/rs/zerolog/log" + "github.com/shirou/gopsutil/disk" +) + +type HDDConfig struct { + MaxPercent int `yaml:"max_percent"` +} type HDD struct { - + Config HDDConfig } func (h HDD) Execute() (ok bool, err error) { parts, _ := disk.Partitions(true) + log.Debug().Int("max_percent", h.Config.MaxPercent).Msg("Execute HDD Check") for _, p := range parts { device := p.Mountpoint s, _ := disk.Usage(device) - if s.UsedPercent > 80 { + if s.UsedPercent > float64(h.Config.MaxPercent) { return false, nil } } diff --git a/internal/pkg/checks/load.go b/internal/pkg/checks/load.go index 8123245..f85ff31 100644 --- a/internal/pkg/checks/load.go +++ b/internal/pkg/checks/load.go @@ -4,21 +4,27 @@ import ( "github.com/mackerelio/go-osstat/loadavg" ) -type Load struct { +type LoadConfig struct { + MaxLoad1 float64 `yaml:"max_load_1"` + MaxLoad5 float64 `yaml:"max_load_5"` + MaxLoad15 float64 `yaml:"max_load_15"` +} +type Load struct { + Config LoadConfig } func (h Load) Execute() (ok bool, err error) { load, err := loadavg.Get() - if load.Loadavg1 > 10 { + if load.Loadavg1 > h.Config.MaxLoad1 { return false, nil } - if load.Loadavg5 > 8 { + if load.Loadavg5 > h.Config.MaxLoad5 { return false, nil } - if load.Loadavg1 > 5 { + if load.Loadavg15 > h.Config.MaxLoad15 { return false, nil } diff --git a/internal/pkg/checks/memory.go b/internal/pkg/checks/memory.go index 73d35bc..a259f72 100644 --- a/internal/pkg/checks/memory.go +++ b/internal/pkg/checks/memory.go @@ -4,14 +4,18 @@ import ( "github.com/mackerelio/go-osstat/memory" ) -type Memory struct { +type MemmoryConfig struct { + Max float64 `yaml:"max"` +} +type Memory struct { + Config MemmoryConfig } func (h Memory) Execute() (ok bool, err error) { memory, err := memory.Get() p := float64(100) / float64(memory.Total) * float64(memory.Used) - if p > 80 { + if p > h.Config.Max { return false, nil } diff --git a/main.go b/main.go index 092a98c..faffd2e 100644 --- a/main.go +++ b/main.go @@ -11,19 +11,28 @@ import ( var checkList []checks.Check func init() { - checkList = append(checkList, checks.HDD{}, checks.Memory{}, checks.Load{}) + readConfig() + log.Debug().Int("max_percent", c.Checks.HDD.MaxPercent).Msg("HDD CHECK") + checkList = append(checkList, checks.HDD{c.Checks.HDD}, checks.Memory{Config: c.Checks.Memory}, checks.Load{Config: c.Checks.Load}) } func main() { http.HandleFunc("/", handler) - err := http.ListenAndServe(":3003", nil) + err := http.ListenAndServe(c.HTTP.Listen, nil) log.Fatal().Err(err).Msg("Shutdown") } func handler(w http.ResponseWriter, r *http.Request) { res, gloableRes := checkSystem() - resJson, err := json.Marshal(res) + + + httpResposne := struct { + Checks map[string]bool + Config Config + }{Checks: res, Config: c} + + resJson, err := json.Marshal(httpResposne) if err != nil { log.Fatal().Err(err).Msg("Check Error") } diff --git a/test.yml b/test.yml new file mode 100644 index 0000000..a808d58 --- /dev/null +++ b/test.yml @@ -0,0 +1,12 @@ +http: + listen: ":3003" + +checks: + hdd: + max_percent: 100 + load: + max_load_1: 10 + max_load_5: 8 + max_load_15: 5 + memory: + max: 70 diff --git a/vendor/modules.txt b/vendor/modules.txt index c901feb..3daf6d4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -24,3 +24,6 @@ github.com/shirou/gopsutil/internal/common golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix golang.org/x/sys/windows +# gopkg.in/yaml.v2 v2.4.0 +## explicit; go 1.15 +gopkg.in/yaml.v2