From 0c7bd1c210bffe9a47a24a33b3478e30985da46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Samin?= Date: Wed, 11 Jul 2018 14:42:27 +0200 Subject: [PATCH 1/2] fix(api): load workers per hatcheries --- engine/api/api_routes.go | 2 +- engine/api/hatchery/hatchery.go | 6 +++--- engine/api/worker.go | 7 ++++++- engine/api/worker/worker.go | 13 ++++++++++--- engine/api/worker/worker_test.go | 8 ++++---- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/engine/api/api_routes.go b/engine/api/api_routes.go index 449175f5c0..b6b578a19b 100644 --- a/engine/api/api_routes.go +++ b/engine/api/api_routes.go @@ -395,7 +395,7 @@ func (api *API) InitRouter() { r.Handle("/auth/mode", r.GET(api.authModeHandler, Auth(false))) // Workers - r.Handle("/worker", r.GET(api.getWorkersHandler, Auth(false)), r.POST(api.registerWorkerHandler, Auth(false))) + r.Handle("/worker", r.GET(api.getWorkersHandler), r.POST(api.registerWorkerHandler, Auth(false))) r.Handle("/worker/refresh", r.POST(api.refreshWorkerHandler)) r.Handle("/worker/checking", r.POST(api.workerCheckingHandler)) r.Handle("/worker/waiting", r.POST(api.workerWaitingHandler)) diff --git a/engine/api/hatchery/hatchery.go b/engine/api/hatchery/hatchery.go index acf9f6c974..09e5fd5875 100644 --- a/engine/api/hatchery/hatchery.go +++ b/engine/api/hatchery/hatchery.go @@ -126,9 +126,9 @@ func LoadDeadHatcheries(db gorp.SqlExecutor, timeout float64) ([]sdk.Hatchery, e // LoadHatchery fetch hatchery info from database given UID func LoadHatchery(db gorp.SqlExecutor, uid, name string) (*sdk.Hatchery, error) { query := `SELECT id, uid, name, last_beat, group_id, worker_model_id - FROM hatchery - LEFT JOIN hatchery_model ON hatchery_model.hatchery_id = hatchery.id - WHERE uid = $1 AND name = $2` + FROM hatchery + LEFT JOIN hatchery_model ON hatchery_model.hatchery_id = hatchery.id + WHERE uid = $1 AND name = $2` var h sdk.Hatchery var wmID sql.NullInt64 diff --git a/engine/api/worker.go b/engine/api/worker.go index 7a079f1203..82c9a753f0 100644 --- a/engine/api/worker.go +++ b/engine/api/worker.go @@ -53,7 +53,12 @@ func (api *API) getWorkersHandler() Handler { return sdk.WrapError(err, "getWorkerModels> cannot parse form") } - workers, errl := worker.LoadWorkers(api.mustDB()) + var hatcheryName string + h := getHatchery(ctx) + if h != nil { + hatcheryName = h.Name + } + workers, errl := worker.LoadWorkers(api.mustDB(), hatcheryName) if errl != nil { return sdk.WrapError(errl, "getWorkerModels> cannot load workers") } diff --git a/engine/api/worker/worker.go b/engine/api/worker/worker.go index defab94c9c..5432b2a3d6 100644 --- a/engine/api/worker/worker.go +++ b/engine/api/worker/worker.go @@ -144,12 +144,19 @@ func LoadWorker(db gorp.SqlExecutor, id string) (*sdk.Worker, error) { } // LoadWorkers load all workers in db -func LoadWorkers(db gorp.SqlExecutor) ([]sdk.Worker, error) { +func LoadWorkers(db gorp.SqlExecutor, hatcheryName string) ([]sdk.Worker, error) { w := []sdk.Worker{} var statusS string - query := `SELECT id, name, last_beat, group_id, model, status, hatchery_id, hatchery_name FROM worker WHERE 1 = 1 ORDER BY name ASC` + query := `SELECT id, name, last_beat, group_id, model, status, hatchery_id, hatchery_name FROM worker ORDER BY name ASC` + args := []interface{}{} - rows, err := db.Query(query) + if hatcheryName != "" { + // TODO: remove the hatchery name from worker worker table ! + query = `SELECT id, name, last_beat, group_id, model, status, hatchery_id, hatchery_name FROM worker WHERE hatchery_name = $1 ORDER BY name ASC` + args = []interface{}{hatcheryName} + } + + rows, err := db.Query(query, args...) if err != nil { return nil, err } diff --git a/engine/api/worker/worker_test.go b/engine/api/worker/worker_test.go index 54bb40e750..6845d227c4 100644 --- a/engine/api/worker/worker_test.go +++ b/engine/api/worker/worker_test.go @@ -11,7 +11,7 @@ import ( func TestInsertWorker(t *testing.T) { db, _ := test.SetupPG(t, bootstrap.InitiliazeDB) - workers, err := LoadWorkers(db) + workers, err := LoadWorkers(db, "") test.NoError(t, err) for _, w := range workers { DeleteWorker(db, w.ID) @@ -31,7 +31,7 @@ func TestInsertWorker(t *testing.T) { func TestDeletetWorker(t *testing.T) { db, _ := test.SetupPG(t, bootstrap.InitiliazeDB) - workers, errl := LoadWorkers(db) + workers, errl := LoadWorkers(db, "") test.NoError(t, errl) for _, w := range workers { DeleteWorker(db, w.ID) @@ -54,7 +54,7 @@ func TestDeletetWorker(t *testing.T) { func TestLoadWorkers(t *testing.T) { db, _ := test.SetupPG(t, bootstrap.InitiliazeDB) - workers, errl := LoadWorkers(db) + workers, errl := LoadWorkers(db, "") test.NoError(t, errl) for _, w := range workers { DeleteWorker(db, w.ID) @@ -78,7 +78,7 @@ func TestLoadWorkers(t *testing.T) { } var errlw error - workers, errlw = LoadWorkers(db) + workers, errlw = LoadWorkers(db, "") if errlw != nil { t.Fatalf("Cannot load workers: %s", errlw) } From e6fa0c9df01e4bbd14d85aab6c83231d5d82de9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Samin?= Date: Wed, 11 Jul 2018 14:50:59 +0200 Subject: [PATCH 2/2] fix unit tests --- engine/api/worker_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engine/api/worker_test.go b/engine/api/worker_test.go index 53c4201198..210447d62c 100644 --- a/engine/api/worker_test.go +++ b/engine/api/worker_test.go @@ -20,7 +20,7 @@ func Test_workerCheckingHandler(t *testing.T) { api, _, router := newTestAPI(t, bootstrap.InitiliazeDB) //1. Load all workers and hatcheries - workers, err := worker.LoadWorkers(api.mustDB()) + workers, err := worker.LoadWorkers(api.mustDB(), "") if err != nil { t.Fatal(err) } @@ -101,7 +101,7 @@ func Test_workerCheckingHandler(t *testing.T) { assert.Equal(t, 204, w.Code) - workers, err = worker.LoadWorkers(api.mustDB()) + workers, err = worker.LoadWorkers(api.mustDB(), "") if err != nil { t.Fatal(err) } @@ -115,7 +115,7 @@ func Test_workerWaitingHandler(t *testing.T) { api, _, router := newTestAPI(t, bootstrap.InitiliazeDB) //1. Load all workers and hatcheries - workers, errlw := worker.LoadWorkers(api.mustDB()) + workers, errlw := worker.LoadWorkers(api.mustDB(), "") if errlw != nil { t.Fatal(errlw) } @@ -197,7 +197,7 @@ func Test_workerWaitingHandler(t *testing.T) { assert.Equal(t, 204, w.Code) - workers, err = worker.LoadWorkers(api.mustDB()) + workers, err = worker.LoadWorkers(api.mustDB(), "") if err != nil { t.Fatal(err) }