From a792ae367a2a7e312439f0568c3cd53cd23370ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20M=C3=BCnch?= Date: Tue, 4 Feb 2020 19:32:54 +0100 Subject: [PATCH] A little bit refactoring by fionera --- .gitignore | 2 ++ go.mod | 9 ++++++ go.sum | 47 ++++++++++++++++++++++++++++ httppoll.go | 89 +++++++++++++++++++++++++++++++---------------------- setup.go | 2 +- types.go | 8 +---- 6 files changed, 113 insertions(+), 44 deletions(-) create mode 100644 .gitignore create mode 100644 go.mod create mode 100644 go.sum diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a60582 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.iml +.idea diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5d38084 --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module repos.ctdo.de/mamu/spacepanel_aggregator + +go 1.13 + +require ( + github.com/gin-gonic/gin v1.5.0 + github.com/valyala/fastjson v1.4.5 + gopkg.in/yaml.v2 v2.2.8 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..aced6c8 --- /dev/null +++ b/go.sum @@ -0,0 +1,47 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= +github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= +github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc= +github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= +github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM= +github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/leodido/go-urn v1.1.0 h1:Sm1gr51B1kKyfD2BlRcLSiEkffoG96g6TPv6eRoEiB8= +github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= +github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/valyala/fastjson v1.4.5 h1:uSuLfXk2LzRtzwd3Fy5zGRBe0Vs7zhs11vjdko32xb4= +github.com/valyala/fastjson v1.4.5/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc= +gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/httppoll.go b/httppoll.go index dc121ca..c5573bc 100644 --- a/httppoll.go +++ b/httppoll.go @@ -1,55 +1,72 @@ package spacepanel_aggregator import ( - "encoding/json" + "crypto/tls" + "errors" "fmt" "io/ioutil" "net/http" "time" + + "github.com/valyala/fastjson" ) -func Poll(url string, led int) { - for true { - resp, err := http.Get(url) +func PollWorker(url string, led int) { + for { + err := Worker(url) if err != nil { - err.Error() - ErrorPoll(url, err, led) - } else { - data, err := ioutil.ReadAll(resp.Body) - if err != nil { - ErrorPoll(url, err, led) - _ = resp.Body.Close() - } else { - _ = resp.Body.Close() - - var parsed dooronly - err = json.Unmarshal(data, &parsed) - if err != nil { - ErrorPoll(url, err, led) - } else { - if parsed.State.Open != nil { - open := parsed.State.Open.(bool) - if open { - SetSpaceState(url, Open) - } else { - SetSpaceState(url, Close) - } - } else { - SetSpaceState(url, Unknown) - } - - } - } + SetSpaceState(url, Unknown) + fmt.Println("LED", led, "URL:", url, err.Error()) } time.Sleep(sleeptime) } } -func ErrorPoll(url string, err error, led int) { - if spacestates[url] != Unknown { - SetSpaceState(url, Outdated) +var ( + insecureTransport = &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } - fmt.Println("LED", led, "URL:", url, err.Error()) + + client = &http.Client{ + Transport: insecureTransport, + } +) + +func Worker(url string) error { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return err + } + + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + + value, err := fastjson.ParseBytes(data) + if err != nil { + return err + } + + if !value.Exists("state", "open") { + return errors.New("no space state existing") + } + + state := value.GetBool("state", "open") + + if state { + SetSpaceState(url, Open) + } else { + SetSpaceState(url, Close) + } + + return nil } func SetSpaceState(url string, s State) { diff --git a/setup.go b/setup.go index 87420b5..867ffea 100644 --- a/setup.go +++ b/setup.go @@ -43,7 +43,7 @@ func Start() { for i := 0; i < len(leds); i++ { for j := 0; j < len(leds[i]); j++ { spacestates[leds[i][j]] = Unknown - go Poll(leds[i][j], i) + go PollWorker(leds[i][j], i) } } fmt.Println("Loaded", len(leds), "LED-configs and", len(spacestates), "spaces.") diff --git a/types.go b/types.go index 807807b..0a19d37 100644 --- a/types.go +++ b/types.go @@ -236,10 +236,4 @@ type V13 struct { Ustream string `json:"ustream"` } `json:"stream"` URL string `json:"url"` -} - -type dooronly struct { - State struct { - Open interface{} `json:"open"` - } `json:"state"` -} +} \ No newline at end of file