mirror of
https://github.com/PrivateCaptcha/PrivateCaptcha.git
synced 2026-02-11 08:18:52 -06:00
66 lines
1.7 KiB
Go
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)
|
|
}
|
|
}
|