Files
PrivateCaptcha/cmd/loadtest/main.go
2025-07-05 14:59:41 +03:00

66 lines
1.7 KiB
Go

package main
import (
"flag"
"fmt"
"log/slog"
"os"
"strings"
"github.com/PrivateCaptcha/PrivateCaptcha/pkg/billing"
"github.com/PrivateCaptcha/PrivateCaptcha/pkg/common"
"github.com/PrivateCaptcha/PrivateCaptcha/pkg/config"
)
const (
modeSeed = "seed"
modeTest = "test"
)
var (
envFileFlag = flag.String("env", "", "Path to .env file, 'stdin' or empty")
flagMode = flag.String("mode", "", strings.Join([]string{modeSeed, modeTest}, " | "))
flagUsersCount = flag.Int("user-count", 100, "number of users to seed")
flagOrgsCount = flag.Int("org-count", 10, "number of orgs to seed")
flagPropertiesCount = flag.Int("property-count", 100, "number of properties to seed")
flagRatePerSecond = flag.Int("rps", 100, "Requests per second")
flagDuration = flag.Int("duration", 10, "Duration of the load test (seconds)")
flagSitekeyPercent = flag.Int("sitekey-percent", 100, "Percent of valid sitekey requests")
env *common.EnvMap
)
func main() {
flag.Parse()
var err error
env, err = common.NewEnvMap(*envFileFlag)
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
}
opts := &slog.HandlerOptions{
Level: slog.LevelInfo,
}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
slog.SetDefault(logger)
cfg := config.NewEnvConfig(env.Get)
switch *flagMode {
case modeSeed:
svc := billing.NewPlanService(nil)
err = seed(*flagUsersCount, *flagOrgsCount, *flagPropertiesCount, svc, cfg)
case modeTest:
err = load((*flagUsersCount)*(*flagOrgsCount)*(*flagPropertiesCount), cfg, *flagRatePerSecond, *flagDuration,
*flagSitekeyPercent)
default:
err = fmt.Errorf("unknown mode: '%s'", *flagMode)
}
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}