From 688e0d90d2a5a9809bb32b668bbd0e99e1b53fca Mon Sep 17 00:00:00 2001 From: renaud Devers Date: Mon, 8 Mar 2021 15:50:59 +0100 Subject: [PATCH] fix #6 fix #5 --- CHANGELOG.md | 4 +++ go.sum | 2 -- main.go | 2 +- middleware/selectWorker.go | 53 +++++++++++++++++++++----------------- server.go | 8 +++--- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6a14af..33c4fb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ **ATTN**: This project uses [semantic versioning](http://semver.org/). +## 0.2.2 - 2021-03-08 +- Fix #5 select workers +- Fix #6 disable workers + ## 0.2.1 - 2019-10-22 - set tokenid to anonymous when no Authorization header found - Fix empty output, return 204 "no content" diff --git a/go.sum b/go.sum index 55f3f29..9f1feb1 100644 --- a/go.sum +++ b/go.sum @@ -9,8 +9,6 @@ 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/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/ezbastion/ezb_lib v0.0.0-20200222105408-548e481d950a h1:ZhkBBtW7LpqUNYCXRFTpoTfEIMenM5urBiLQNJxcLjk= -github.com/ezbastion/ezb_lib v0.0.0-20200222105408-548e481d950a/go.mod h1:ybKk609w7Gi4IRqUx9hDcNKIe/+DtfYuSHLgjYk2td8= github.com/ezbastion/ezb_lib v0.1.0 h1:eK0XuOXnAXOPXN/Xjn+HX4mKLgjJxY84Rf6w+5KaCkA= github.com/ezbastion/ezb_lib v0.1.0/go.mod h1:F6U708XN/ROG+xnFvOw6KcBR1RR5Ggvyr9YQGosdA9M= github.com/gin-contrib/location v0.0.1 h1:5ZtqDL5WA6YXNuT5nGp55K3QSqJMYIl+2d7Lnwh9SGA= diff --git a/main.go b/main.go index 343ef7d..36f63c1 100644 --- a/main.go +++ b/main.go @@ -54,7 +54,7 @@ func main() { } app := cli.NewApp() app.Name = "ezb_srv" - app.Version = "0.2.1" + app.Version = "0.2.2" app.Usage = "ezBastion frontend server." app.Commands = []cli.Command{ diff --git a/middleware/selectWorker.go b/middleware/selectWorker.go index def84e7..a95cac3 100644 --- a/middleware/selectWorker.go +++ b/middleware/selectWorker.go @@ -19,7 +19,6 @@ import ( "errors" "math/rand" "net/http" - "sort" "time" "github.com/ezbastion/ezb_srv/models" @@ -41,7 +40,7 @@ func SelectWorker(c *gin.Context) { logg.Debug("start") routeType, _ := c.MustGet("routeType").(string) - // routeType := rt.(string) + if routeType == "worker" { ac, _ := c.Get("action") action := ac.(models.EzbActions) @@ -61,19 +60,20 @@ func SelectWorker(c *gin.Context) { } logg.Debug("one worker found: ", worker.Name, " (", worker.Comment, ")") c.Set("worker", worker) - // c.Set("action", nil) trace.Worker = worker.Name c.Set("trace", trace) } if nbW > 1 { var enableWorkers []models.EzbWorkers - var keys []int + //var keys []int for _, w := range workers { if w.Enable { if checksumISok(w.Fqdn, action.Jobs.Path, action.Jobs.Checksum) { enableWorkers = append(enableWorkers, w) - keys = append(keys, len(enableWorkers)) + logg.Debug("append worker ", w.Name, " :", len(enableWorkers)) + + //keys = append(keys, len(enableWorkers)) } } } @@ -82,40 +82,45 @@ func SelectWorker(c *gin.Context) { c.AbortWithError(http.StatusServiceUnavailable, errors.New("#W0003")) return } + var worker models.EzbWorkers + if len(enableWorkers) == 1 { + worker = enableWorkers[0] + } else { + worker = enableWorkers[randomWorker(&enableWorkers)] + } // switch on config worker algo - worker := enableWorkers[randomWorker(&enableWorkers)] + logg.Debug("found ", len(enableWorkers), " worker, select ", worker.Name, " random") c.Set("worker", worker) - c.Set("action", nil) trace.Worker = worker.Name c.Set("trace", trace) - // tool.Trace(&trace, c) c.Next() } } c.Next() } -func orderBYjobs(keys *[]int, workers *[]models.EzbWorkers) { - var nbj []int - for _, _ = range *workers { - var j int // w.fqdn /healthcheck/jobs -> j int goroutine - nbj = append(nbj, j) - } - sort.Ints(nbj) - keys = &nbj - -} -func orderBYload(keys *[]int, workers *[]models.EzbWorkers) { - sort.Ints(*keys) -} +//func orderBYjobs(keys *[]int, workers *[]models.EzbWorkers) { +// var nbj []int +// for _, _ = range *workers { +// var j int // w.fqdn /healthcheck/jobs -> j int goroutine +// nbj = append(nbj, j) +// } +// sort.Ints(nbj) +// keys = &nbj +// +//} +//func orderBYload(keys *[]int, workers *[]models.EzbWorkers) { +// sort.Ints(*keys) +//} func randomWorker(workers *[]models.EzbWorkers) int { return rand.Intn(len(*workers) - 1) } -func orderBYroundrobin(keys *[]int, workers *[]models.EzbWorkers) { - sort.Ints(*keys) -} + +//func orderBYroundrobin(keys *[]int, workers *[]models.EzbWorkers) { +// sort.Ints(*keys) +//} func checksumISok(fqdn, path, checksum string) bool { /* diff --git a/server.go b/server.go index f58d79c..4d5826a 100644 --- a/server.go +++ b/server.go @@ -30,13 +30,11 @@ import ( "github.com/ezbastion/ezb_srv/setup" "github.com/gin-contrib/location" - "net/http" - "os" - "path" - "github.com/gin-gonic/contrib/ginrus" "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" + "net/http" + "os" ) var storage cache.Storage @@ -47,7 +45,7 @@ func mainGin(serverchan *chan bool) { if err != nil { panic(err) } - logmanager.SetLogLevel(conf.Logger.LogLevel, exPath, path.Join(exPath, "log/ezb_srv.log"), conf.Logger.MaxSize, conf.Logger.MaxBackups, conf.Logger.MaxAge, true, true, true) + logmanager.SetLogLevel(conf.Logger.LogLevel, exPath, "log/ezb_srv.log", conf.Logger.MaxSize, conf.Logger.MaxBackups, conf.Logger.MaxAge, true, true, true) storage = memory.NewStorage()