This commit is contained in:
parent
c8bae3a5a8
commit
07fccbcc29
9 changed files with 101 additions and 12 deletions
42
config.go
Normal file
42
config.go
Normal file
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
1
go.mod
1
go.mod
|
@ -6,6 +6,7 @@ require (
|
||||||
github.com/mackerelio/go-osstat v0.2.0
|
github.com/mackerelio/go-osstat v0.2.0
|
||||||
github.com/rs/zerolog v1.25.0
|
github.com/rs/zerolog v1.25.0
|
||||||
github.com/shirou/gopsutil v3.21.8+incompatible
|
github.com/shirou/gopsutil v3.21.8+incompatible
|
||||||
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
4
go.sum
4
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-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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/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=
|
||||||
|
|
|
@ -1,18 +1,26 @@
|
||||||
package checks
|
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 {
|
type HDD struct {
|
||||||
|
Config HDDConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h HDD) Execute() (ok bool, err error) {
|
func (h HDD) Execute() (ok bool, err error) {
|
||||||
parts, _ := disk.Partitions(true)
|
parts, _ := disk.Partitions(true)
|
||||||
|
log.Debug().Int("max_percent", h.Config.MaxPercent).Msg("Execute HDD Check")
|
||||||
|
|
||||||
for _, p := range parts {
|
for _, p := range parts {
|
||||||
device := p.Mountpoint
|
device := p.Mountpoint
|
||||||
s, _ := disk.Usage(device)
|
s, _ := disk.Usage(device)
|
||||||
if s.UsedPercent > 80 {
|
if s.UsedPercent > float64(h.Config.MaxPercent) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,21 +4,27 @@ import (
|
||||||
"github.com/mackerelio/go-osstat/loadavg"
|
"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) {
|
func (h Load) Execute() (ok bool, err error) {
|
||||||
load, err := loadavg.Get()
|
load, err := loadavg.Get()
|
||||||
if load.Loadavg1 > 10 {
|
if load.Loadavg1 > h.Config.MaxLoad1 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if load.Loadavg5 > 8 {
|
if load.Loadavg5 > h.Config.MaxLoad5 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if load.Loadavg1 > 5 {
|
if load.Loadavg15 > h.Config.MaxLoad15 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,18 @@ import (
|
||||||
"github.com/mackerelio/go-osstat/memory"
|
"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) {
|
func (h Memory) Execute() (ok bool, err error) {
|
||||||
memory, err := memory.Get()
|
memory, err := memory.Get()
|
||||||
p := float64(100) / float64(memory.Total) * float64(memory.Used)
|
p := float64(100) / float64(memory.Total) * float64(memory.Used)
|
||||||
if p > 80 {
|
if p > h.Config.Max {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
15
main.go
15
main.go
|
@ -11,19 +11,28 @@ import (
|
||||||
var checkList []checks.Check
|
var checkList []checks.Check
|
||||||
|
|
||||||
func init() {
|
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() {
|
func main() {
|
||||||
|
|
||||||
http.HandleFunc("/", handler)
|
http.HandleFunc("/", handler)
|
||||||
err := http.ListenAndServe(":3003", nil)
|
err := http.ListenAndServe(c.HTTP.Listen, nil)
|
||||||
log.Fatal().Err(err).Msg("Shutdown")
|
log.Fatal().Err(err).Msg("Shutdown")
|
||||||
}
|
}
|
||||||
|
|
||||||
func handler(w http.ResponseWriter, r *http.Request) {
|
func handler(w http.ResponseWriter, r *http.Request) {
|
||||||
res, gloableRes := checkSystem()
|
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 {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("Check Error")
|
log.Fatal().Err(err).Msg("Check Error")
|
||||||
}
|
}
|
||||||
|
|
12
test.yml
Normal file
12
test.yml
Normal file
|
@ -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
|
3
vendor/modules.txt
vendored
3
vendor/modules.txt
vendored
|
@ -24,3 +24,6 @@ github.com/shirou/gopsutil/internal/common
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
|
# gopkg.in/yaml.v2 v2.4.0
|
||||||
|
## explicit; go 1.15
|
||||||
|
gopkg.in/yaml.v2
|
||||||
|
|
Loading…
Reference in a new issue