From bd16c97a05f394bc0ef6d692c70919a1771dc2d6 Mon Sep 17 00:00:00 2001 From: Alejandro Dominguez Date: Fri, 18 Mar 2022 10:52:35 +0100 Subject: [PATCH 1/2] fix: consider maxSessions in Selenium Grid Scaler Signed-off-by: Alejandro Dominguez --- pkg/scalers/selenium_grid_scaler.go | 13 ++++++++- pkg/scalers/selenium_grid_scaler_test.go | 35 ++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/pkg/scalers/selenium_grid_scaler.go b/pkg/scalers/selenium_grid_scaler.go index be3d0d58b55..ae11d702a7b 100644 --- a/pkg/scalers/selenium_grid_scaler.go +++ b/pkg/scalers/selenium_grid_scaler.go @@ -40,9 +40,14 @@ type seleniumResponse struct { } type data struct { + Grid grid `json:"grid"` SessionsInfo sessionsInfo `json:"sessionsInfo"` } +type grid struct { + MaxSession int `json:"maxSession"` +} + type sessionsInfo struct { SessionQueueRequests []string `json:"sessionQueueRequests"` Sessions []seleniumSession `json:"sessions"` @@ -164,7 +169,7 @@ func (s *seleniumGridScaler) IsActive(ctx context.Context) (bool, error) { func (s *seleniumGridScaler) getSessionsCount(ctx context.Context) (*resource.Quantity, error) { body, err := json.Marshal(map[string]string{ - "query": "{ sessionsInfo { sessionQueueRequests, sessions { id, capabilities, nodeId } } }", + "query": "{ grid { maxSession }, sessionsInfo { sessionQueueRequests, sessions { id, capabilities, nodeId } } }", }) if err != nil { @@ -238,5 +243,11 @@ func getCountFromSeleniumResponse(b []byte, browserName string, browserVersion s } } + var gridMaxSession = int64(seleniumResponse.Data.Grid.MaxSession) + + if gridMaxSession > 0 { + count = (count + gridMaxSession - 1) / gridMaxSession + } + return resource.NewQuantity(count, resource.DecimalSI), nil } diff --git a/pkg/scalers/selenium_grid_scaler_test.go b/pkg/scalers/selenium_grid_scaler_test.go index 9fb4c8d9114..6a7ada1632b 100644 --- a/pkg/scalers/selenium_grid_scaler_test.go +++ b/pkg/scalers/selenium_grid_scaler_test.go @@ -42,6 +42,9 @@ func Test_getCountFromSeleniumResponse(t *testing.T) { args: args{ b: []byte(`{ "data": { + "grid":{ + "maxSession": 1 + }, "sessionsInfo": { "sessionQueueRequests": [], "sessions": [] @@ -58,6 +61,9 @@ func Test_getCountFromSeleniumResponse(t *testing.T) { args: args{ b: []byte(`{ "data": { + "grid":{ + "maxSession": 1 + }, "sessionsInfo": { "sessionQueueRequests": ["{\n \"browserName\": \"chrome\"\n}","{\n \"browserName\": \"chrome\"\n}"], "sessions": [ @@ -81,6 +87,9 @@ func Test_getCountFromSeleniumResponse(t *testing.T) { args: args{ b: []byte(`{ "data": { + "grid":{ + "maxSession": 1 + }, "sessionsInfo": { "sessionQueueRequests": ["{\n \"browserName\": \"chrome\"\n}","{\n \"browserName\": \"chrome\"\n}"], "sessions": [] @@ -93,12 +102,35 @@ func Test_getCountFromSeleniumResponse(t *testing.T) { want: resource.NewQuantity(2, resource.DecimalSI), wantErr: false, }, + { + name: "active sessions with matching browsername and maxSession=2 should return count as 1", + args: args{ + b: []byte(`{ + "data": { + "grid":{ + "maxSession": 2 + }, + "sessionsInfo": { + "sessionQueueRequests": ["{\n \"browserName\": \"chrome\",\n \"browserVersion\": \"91.0\"\n}","{\n \"browserName\": \"chrome\"\n}"], + "sessions": [] + } + } + }`), + browserName: "chrome", + browserVersion: "latest", + }, + want: resource.NewQuantity(1, resource.DecimalSI), + wantErr: false, + }, { name: "active sessions with matching browsername should return count as 3", args: args{ b: []byte(`{ "data": { "sessionsInfo": { + "grid":{ + "maxSession": 1 + }, "sessionQueueRequests": ["{\n \"browserName\": \"chrome\"\n}","{\n \"browserName\": \"chrome\"\n}"], "sessions": [ { @@ -121,6 +153,9 @@ func Test_getCountFromSeleniumResponse(t *testing.T) { args: args{ b: []byte(`{ "data": { + "grid":{ + "maxSession": 1 + }, "sessionsInfo": { "sessionQueueRequests": ["{\n \"browserName\": \"chrome\",\n \"browserVersion\": \"91.0\"\n}","{\n \"browserName\": \"chrome\"\n}"], "sessions": [ From d8ef733232bb4b709e5354a06388c6a1499d6933 Mon Sep 17 00:00:00 2001 From: Alejandro Dominguez Date: Fri, 18 Mar 2022 12:25:25 +0100 Subject: [PATCH 2/2] update changelog Signed-off-by: Alejandro Dominguez --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be5c819caba..3582b022473 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ - **GCP Pubsub Scaler** Adding e2e test for GCP PubSub scaler ([#1528](https://github.com/kedacore/keda/issues/1528)) - **Kafka Scaler** Make "disable" a valid value for tls auth parameter ([#2608](https://github.com/kedacore/keda/issues/2608)) - **RabbitMQ Scaler:** Include `vhost` for RabbitMQ when retrieving queue info with `useRegex` ([#2498](https://github.com/kedacore/keda/issues/2498)) +- **Selenium Grid Scaler** Consider `maxSession` grid info when scaling. ([#2618](https://github.com/kedacore/keda/issues/2618)) ### Breaking Changes