From ce6b786c6e26c69f17d51b50858f4444708756ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKevin=E2=80=9D?= <“kburns2@ext.uber.com”> Date: Thu, 4 Sep 2025 12:28:50 -0700 Subject: [PATCH 1/4] Fix config file loading errors --- .../advanced/autoscaling-monitoring/main.go | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/cmd/samples/advanced/autoscaling-monitoring/main.go b/cmd/samples/advanced/autoscaling-monitoring/main.go index 5740477d..f274e205 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/main.go +++ b/cmd/samples/advanced/autoscaling-monitoring/main.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "os" + "path/filepath" "time" "github.com/pborman/uuid" @@ -20,6 +21,29 @@ const ( ApplicationName = "autoscaling-monitoring" ) +// findConfigFile finds the config file relative to the executable location +func findConfigFile() string { + // Get the directory where the executable is located + execPath, err := os.Executable() + if err != nil { + // Fallback to current working directory if we can't determine executable path + return "config/autoscaling.yaml" + } + execDir := filepath.Dir(execPath) + + // Try to find the config file relative to the executable + // The executable is in bin/, so we need to go up to the repo root and then to the config + configPath := filepath.Join(execDir, "..", "cmd", "samples", "advanced", "autoscaling-monitoring", "config", "autoscaling.yaml") + + // Check if the config file exists at this path + if _, err := os.Stat(configPath); err == nil { + return configPath + } + + // Fallback to the original relative path (for development when running with go run) + return "config/autoscaling.yaml" +} + func main() { // Parse command line arguments var mode string @@ -27,7 +51,7 @@ func main() { flag.Parse() // Load configuration - configFile := "config/autoscaling.yaml" + configFile := findConfigFile() config := loadConfiguration(configFile) // Setup common helper with our configuration From 5b4d8670887afc0075e7faf00e2be3dffab0fb67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKevin=E2=80=9D?= <“kburns2@ext.uber.com”> Date: Thu, 4 Sep 2025 12:29:58 -0700 Subject: [PATCH 2/4] Add a slightly higher load as the default to trigger worker autoscaling --- .../advanced/autoscaling-monitoring/README.md | 14 +++++++------- .../advanced/autoscaling-monitoring/config.go | 4 ++-- .../autoscaling-monitoring/config/autoscaling.yaml | 6 +++--- .../advanced/autoscaling-monitoring/config_test.go | 12 ++++++------ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cmd/samples/advanced/autoscaling-monitoring/README.md b/cmd/samples/advanced/autoscaling-monitoring/README.md index e2c82bbe..2eeb0e39 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/README.md +++ b/cmd/samples/advanced/autoscaling-monitoring/README.md @@ -82,11 +82,11 @@ autoscaling: # Load generation settings loadGeneration: # Workflow-level settings - workflows: 3 # Number of workflows to start + workflows: 10 # Number of workflows to start workflowDelay: 1000 # Delay between starting workflows (milliseconds) # Activity-level settings (per workflow) - activitiesPerWorkflow: 40 # Number of activities per workflow + activitiesPerWorkflow: 30 # Number of activities per workflow batchDelay: 2000 # Delay between activity batches within workflow (milliseconds) # Activity processing time range (milliseconds) @@ -126,9 +126,9 @@ autoscaling: pollerMaxCount: 8 pollerInitCount: 4 loadGeneration: - workflows: 3 + workflows: 10 workflowDelay: 1000 - activitiesPerWorkflow: 40 + activitiesPerWorkflow: 30 batchDelay: 2000 minProcessingTime: 1000 maxProcessingTime: 6000 @@ -141,11 +141,11 @@ The sample supports various load patterns for testing autoscaling behavior: #### **1. Gradual Ramp-up (Default)** ```yaml loadGeneration: - workflows: 3 + workflows: 10 workflowDelay: 1000 - activitiesPerWorkflow: 40 + activitiesPerWorkflow: 30 ``` -**Result**: 3 workflows starting 1 second apart, each with 40 activities (120 total activities) +**Result**: 10 workflows starting 1 second apart, each with 30 activities (300 total activities) #### **2. Burst Load** ```yaml diff --git a/cmd/samples/advanced/autoscaling-monitoring/config.go b/cmd/samples/advanced/autoscaling-monitoring/config.go index 1dd150cd..da810d37 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/config.go +++ b/cmd/samples/advanced/autoscaling-monitoring/config.go @@ -56,9 +56,9 @@ const ( DefaultPollerMaxCount = 8 DefaultPollerInitCount = 4 - DefaultWorkflows = 3 + DefaultWorkflows = 10 DefaultWorkflowDelay = 1000 - DefaultActivitiesPerWorkflow = 40 + DefaultActivitiesPerWorkflow = 30 DefaultBatchDelay = 2000 DefaultMinProcessingTime = 1000 DefaultMaxProcessingTime = 6000 diff --git a/cmd/samples/advanced/autoscaling-monitoring/config/autoscaling.yaml b/cmd/samples/advanced/autoscaling-monitoring/config/autoscaling.yaml index ceb2f0be..66438208 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/config/autoscaling.yaml +++ b/cmd/samples/advanced/autoscaling-monitoring/config/autoscaling.yaml @@ -18,11 +18,11 @@ autoscaling: # Worker load simulation settings loadGeneration: # Workflow-level settings - workflows: 3 # Number of workflows to start - workflowDelay: 400 # Delay between starting workflows (milliseconds) + workflows: 10 # Number of workflows to start + workflowDelay: 1000 # Delay between starting workflows (milliseconds) # Activity-level settings (per workflow) - activitiesPerWorkflow: 40 # Number of activities per workflow + activitiesPerWorkflow: 30 # Number of activities per workflow batchDelay: 750 # Delay between activity batches within workflow (milliseconds) # Activity processing time range (milliseconds) diff --git a/cmd/samples/advanced/autoscaling-monitoring/config_test.go b/cmd/samples/advanced/autoscaling-monitoring/config_test.go index a9207d9c..d98d1507 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/config_test.go +++ b/cmd/samples/advanced/autoscaling-monitoring/config_test.go @@ -22,9 +22,9 @@ autoscaling: pollerMaxCount: 10 pollerInitCount: 5 loadGeneration: - workflows: 5 - workflowDelay: 3 - activitiesPerWorkflow: 100 + workflows: 10 + workflowDelay: 1000 + activitiesPerWorkflow: 30 batchDelay: 5 minProcessingTime: 2000 maxProcessingTime: 8000 @@ -51,9 +51,9 @@ autoscaling: assert.Equal(t, 3, config.Autoscaling.PollerMinCount) assert.Equal(t, 10, config.Autoscaling.PollerMaxCount) assert.Equal(t, 5, config.Autoscaling.PollerInitCount) - assert.Equal(t, 5, config.Autoscaling.LoadGeneration.Workflows) - assert.Equal(t, 3, config.Autoscaling.LoadGeneration.WorkflowDelay) - assert.Equal(t, 100, config.Autoscaling.LoadGeneration.ActivitiesPerWorkflow) + assert.Equal(t, 10, config.Autoscaling.LoadGeneration.Workflows) + assert.Equal(t, 1000, config.Autoscaling.LoadGeneration.WorkflowDelay) + assert.Equal(t, 30, config.Autoscaling.LoadGeneration.ActivitiesPerWorkflow) assert.Equal(t, 5, config.Autoscaling.LoadGeneration.BatchDelay) assert.Equal(t, 2000, config.Autoscaling.LoadGeneration.MinProcessingTime) assert.Equal(t, 8000, config.Autoscaling.LoadGeneration.MaxProcessingTime) From 3f99b0117436609dac34a89494399c43ef56ece0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKevin=E2=80=9D?= <“kburns2@ext.uber.com”> Date: Thu, 4 Sep 2025 12:34:46 -0700 Subject: [PATCH 3/4] Change Burst and Sustained load suggestions --- .../advanced/autoscaling-monitoring/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/samples/advanced/autoscaling-monitoring/README.md b/cmd/samples/advanced/autoscaling-monitoring/README.md index 2eeb0e39..f8661ae5 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/README.md +++ b/cmd/samples/advanced/autoscaling-monitoring/README.md @@ -150,20 +150,20 @@ loadGeneration: #### **2. Burst Load** ```yaml loadGeneration: - workflows: 10 + workflows: 25 workflowDelay: 0 - activitiesPerWorkflow: 20 + activitiesPerWorkflow: 60 ``` -**Result**: 10 workflows all starting immediately (200 total activities) +**Result**: 25 workflows all starting immediately (1500 total activities) #### **3. Sustained Load** ```yaml loadGeneration: - workflows: 5 - workflowDelay: 5000 + workflows: 50 + workflowDelay: 2000 activitiesPerWorkflow: 100 ``` -**Result**: 5 long-running workflows with 5-second delays between starts (500 total activities) +**Result**: 5 long-running workflows with 2-second delays between starts (5000 total activities) #### **4. Light Load** ```yaml From b3abc2263cc79f473a5758da76a708349bdd11a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKevin=E2=80=9D?= <“kburns2@ext.uber.com”> Date: Thu, 4 Sep 2025 13:10:10 -0700 Subject: [PATCH 4/4] Add implementation to documented cmd line flag -config --- cmd/samples/advanced/autoscaling-monitoring/main.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/samples/advanced/autoscaling-monitoring/main.go b/cmd/samples/advanced/autoscaling-monitoring/main.go index f274e205..6e21c173 100644 --- a/cmd/samples/advanced/autoscaling-monitoring/main.go +++ b/cmd/samples/advanced/autoscaling-monitoring/main.go @@ -47,11 +47,15 @@ func findConfigFile() string { func main() { // Parse command line arguments var mode string + var configFile string flag.StringVar(&mode, "m", "worker", "Mode: worker or trigger") + flag.StringVar(&configFile, "config", "", "Path to configuration file") flag.Parse() // Load configuration - configFile := findConfigFile() + if configFile == "" { + configFile = findConfigFile() + } config := loadConfiguration(configFile) // Setup common helper with our configuration