From b10c0258606f06c14b8de126458f0f403d3526f9 Mon Sep 17 00:00:00 2001 From: laurentu Date: Thu, 17 Aug 2023 16:14:13 +0200 Subject: [PATCH] gofmt --- hostchecker.go | 230 ++++++++++++++++++++++++------------------------- 1 file changed, 114 insertions(+), 116 deletions(-) diff --git a/hostchecker.go b/hostchecker.go index 3f212fd..3ca8b24 100644 --- a/hostchecker.go +++ b/hostchecker.go @@ -1,17 +1,17 @@ /* - Copyright 2023 Laurent Ulrich (laurentu@gmail.com) +Copyright 2023 Laurent Ulrich (laurentu@gmail.com) - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ package main @@ -32,7 +32,7 @@ import "flag" type Check struct { Type string `yaml:"type"` - Host string `yaml:"host"` + Host string `yaml:"host"` Port int `yaml:"port"` Uri string `yaml:"uri"` Method string `yaml:"method"` @@ -47,12 +47,11 @@ type Group struct { Check Check `yaml:"check"` } - func main() { log.Println("Starting") - confFileName := flag.String("f", "/usr/local/etc/hostchecker.yaml", "YAML configuration file") - flag.Parse() + confFileName := flag.String("f", "/usr/local/etc/hostchecker.yaml", "YAML configuration file") + flag.Parse() var waitGroup sync.WaitGroup @@ -66,10 +65,10 @@ func main() { log.Fatalf("Configuration read error #%v", err) } - err = validateConfiguration(conf) - if err != nil { - log.Fatal("Configuration error #", err) - } + err = validateConfiguration(conf) + if err != nil { + log.Fatal("Configuration error #", err) + } stopChannel := make(chan bool) for name, group := range conf { log.Println("Checking group", name, group) @@ -112,7 +111,7 @@ func checkGroup(name string, group Group, waitGroup *sync.WaitGroup, stopChannel break case status := <-channel: log.Println("Status for ", host, "is", status, "in group", name) - updateTables( host, status, group.Tables ) + updateTables(host, status, group.Tables) default: time.Sleep(100 * time.Millisecond) } @@ -121,23 +120,23 @@ func checkGroup(name string, group Group, waitGroup *sync.WaitGroup, stopChannel } } -func updateTables( host string, status int, tables []string ) { - for _, table := range tables { - op := "add" - if status != 0 { - op = "del" - } - cmd := exec.Command("pfctl", "-t", table, "-T", op, host) - err := cmd.Run() - if err != nil { - log.Println("Unable to run command #", cmd) - } - } +func updateTables(host string, status int, tables []string) { + for _, table := range tables { + op := "add" + if status != 0 { + op = "del" + } + cmd := exec.Command("pfctl", "-t", table, "-T", op, host) + err := cmd.Run() + if err != nil { + log.Println("Unable to run command #", cmd) + } + } } func checkHost(status chan<- int, group string, host string, check Check, waitGroup *sync.WaitGroup, stopChannel chan bool) { - var lastCheck time.Time + var lastCheck time.Time for { select { @@ -147,58 +146,57 @@ func checkHost(status chan<- int, group string, host string, check Check, waitGr return default: var err error - if time.Since(lastCheck).Seconds() > float64(check.Interval) { - lastCheck = time.Now() - err = nil - switch check.Type { - case "http": - err = CheckHTTP(host, check) - case "tcp": - err = CheckTCP(host, check) - case "smtp": - err = CheckSMTP(host, check) - } - if err != nil { - status <- 1 - log.Println("checkHost", host, "group", group, "error", err) - } else { - status <- 0 - } - } - time.Sleep(300*time.Millisecond) + if time.Since(lastCheck).Seconds() > float64(check.Interval) { + lastCheck = time.Now() + err = nil + switch check.Type { + case "http": + err = CheckHTTP(host, check) + case "tcp": + err = CheckTCP(host, check) + case "smtp": + err = CheckSMTP(host, check) + } + if err != nil { + status <- 1 + log.Println("checkHost", host, "group", group, "error", err) + } else { + status <- 0 + } + } + time.Sleep(300 * time.Millisecond) } } } func CheckHTTP(host string, check Check) error { - client := &http.Client{ Timeout: time.Duration(check.Timeout) * time.Second, } req, err := http.NewRequest(check.Method, fmt.Sprintf("http://%s%s", host, check.Uri), nil) - if err != nil { - return err - } - if len(check.Host) > 0 { - req.Header.Set("Host", check.Host) - } + if err != nil { + return err + } + if len(check.Host) > 0 { + req.Header.Set("Host", check.Host) + } resp, err := client.Do(req) if err != nil { return err } - defer resp.Body.Close() + defer resp.Body.Close() _, _ = io.ReadAll(resp.Body) return nil } func CheckTCP(host string, check Check) error { - cnx, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, check.Port), time.Duration(check.Timeout) * time.Second) - if err != nil { - return err - } - cnx.Close() + cnx, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, check.Port), time.Duration(check.Timeout)*time.Second) + if err != nil { + return err + } + cnx.Close() return nil } @@ -207,57 +205,57 @@ func CheckSMTP(host string, check Check) error { } func validateConfiguration(conf map[string]Group) error { - for name, group := range conf { - log.Println("Validating configuration", name) - if len(group.Tables) == 0 { - return errors.New(fmt.Sprintf("No tables in group %s", name)) - } - log.Println("Hosts", group.Hosts) - if len(group.Hosts) == 0 { - return errors.New(fmt.Sprintf("No hosts in group %s", name)) - } - for _, host := range group.Hosts { - ip := net.ParseIP(host) - if ip == nil { - return errors.New(fmt.Sprintf("Host %v is not an IP in group %s", host, name)) - } - } - switch group.Check.Type { - case "http": - if len(group.Check.Method) == 0 { - group.Check.Method = "HEAD" - } - switch group.Check.Method { - case "HEAD": - case "GET": - default: - return errors.New(fmt.Sprintf("Check method shoud be HEAD or GET in group %s", name)) - } - if group.Check.Port == 0 { - group.Check.Port = 80 - } - if len(group.Check.Uri) == 0 { - group.Check.Uri = "/" - } - case "tcp": - if group.Check.Port == 0 { - return errors.New(fmt.Sprintf("Check port is undefined or 0 in group %s", name)) - } - case "smtp": - if group.Check.Port == 0 { - group.Check.Port = 25 - } + for name, group := range conf { + log.Println("Validating configuration", name) + if len(group.Tables) == 0 { + return errors.New(fmt.Sprintf("No tables in group %s", name)) + } + log.Println("Hosts", group.Hosts) + if len(group.Hosts) == 0 { + return errors.New(fmt.Sprintf("No hosts in group %s", name)) + } + for _, host := range group.Hosts { + ip := net.ParseIP(host) + if ip == nil { + return errors.New(fmt.Sprintf("Host %v is not an IP in group %s", host, name)) + } + } + switch group.Check.Type { + case "http": + if len(group.Check.Method) == 0 { + group.Check.Method = "HEAD" + } + switch group.Check.Method { + case "HEAD": + case "GET": + default: + return errors.New(fmt.Sprintf("Check method shoud be HEAD or GET in group %s", name)) + } + if group.Check.Port == 0 { + group.Check.Port = 80 + } + if len(group.Check.Uri) == 0 { + group.Check.Uri = "/" + } + case "tcp": + if group.Check.Port == 0 { + return errors.New(fmt.Sprintf("Check port is undefined or 0 in group %s", name)) + } + case "smtp": + if group.Check.Port == 0 { + group.Check.Port = 25 + } - default: - return errors.New(fmt.Sprintf("Check type should be http, smtp or tcp in group %s",name)) - } - if group.Check.Interval == 0 { - group.Check.Interval = 5 - } - if group.Check.Timeout == 0 { - group.Check.Timeout = 2 - } - conf[name] = group - } - return nil + default: + return errors.New(fmt.Sprintf("Check type should be http, smtp or tcp in group %s", name)) + } + if group.Check.Interval == 0 { + group.Check.Interval = 5 + } + if group.Check.Timeout == 0 { + group.Check.Timeout = 2 + } + conf[name] = group + } + return nil }