|
7 | 7 | require "net/http" |
8 | 8 | require "uri" |
9 | 9 |
|
| 10 | +# Helper to get env var with default, |
| 11 | +# treating empty string and "0" as unset since they can come from the benchmark workflow. |
| 12 | +def env_or_default(key, default) |
| 13 | + value = ENV[key].to_s |
| 14 | + value.empty? || value == "0" ? default : value |
| 15 | +end |
| 16 | + |
10 | 17 | # Benchmark parameters |
11 | 18 | PRO = ENV.fetch("PRO", "false") == "true" |
12 | 19 | APP_DIR = PRO ? "react_on_rails_pro/spec/dummy" : "spec/dummy" |
13 | | -ROUTES = ENV.fetch("ROUTES", nil) |
14 | | -BASE_URL = ENV.fetch("BASE_URL", "localhost:3001") |
| 20 | +ROUTES = env_or_default("ROUTES", nil) |
| 21 | +BASE_URL = env_or_default("BASE_URL", "localhost:3001") |
15 | 22 | # requests per second; if "max" will get maximum number of queries instead of a fixed rate |
16 | | -RATE = ENV.fetch("RATE", "50") |
| 23 | +RATE = env_or_default("RATE", "50") |
17 | 24 | # concurrent connections/virtual users |
18 | | -CONNECTIONS = ENV.fetch("CONNECTIONS", "10").to_i |
| 25 | +CONNECTIONS = env_or_default("CONNECTIONS", 10).to_i |
19 | 26 | # maximum connections/virtual users |
20 | | -MAX_CONNECTIONS = ENV.fetch("MAX_CONNECTIONS", CONNECTIONS).to_i |
| 27 | +MAX_CONNECTIONS = env_or_default("MAX_CONNECTIONS", CONNECTIONS).to_i |
21 | 28 | # benchmark duration (duration string like "30s", "1m", "90s") |
22 | | -DURATION = ENV.fetch("DURATION", "30s") |
| 29 | +DURATION = env_or_default("DURATION", "30s") |
23 | 30 | # request timeout (duration string as above) |
24 | | -REQUEST_TIMEOUT = ENV.fetch("REQUEST_TIMEOUT", "60s") |
| 31 | +REQUEST_TIMEOUT = env_or_default("REQUEST_TIMEOUT", "60s") |
25 | 32 | # Tools to run (comma-separated) |
26 | | -TOOLS = ENV.fetch("TOOLS", "fortio,vegeta,k6").split(",") |
| 33 | +TOOLS = env_or_default("TOOLS", "fortio,vegeta,k6").split(",") |
27 | 34 |
|
28 | 35 | OUTDIR = "bench_results" |
29 | 36 | SUMMARY_TXT = "#{OUTDIR}/summary.txt".freeze |
@@ -93,11 +100,13 @@ def get_benchmark_routes(app_dir) |
93 | 100 | # Get all routes to benchmark |
94 | 101 | routes = |
95 | 102 | if ROUTES |
96 | | - ROUTES.split(",").map(&:strip) |
| 103 | + ROUTES.split(",").map(&:strip).reject(&:empty?) |
97 | 104 | else |
98 | 105 | get_benchmark_routes(APP_DIR) |
99 | 106 | end |
100 | 107 |
|
| 108 | +raise "No routes to benchmark" if routes.empty? |
| 109 | + |
101 | 110 | validate_rate(RATE) |
102 | 111 | validate_positive_integer(CONNECTIONS, "CONNECTIONS") |
103 | 112 | validate_positive_integer(MAX_CONNECTIONS, "MAX_CONNECTIONS") |
|
0 commit comments