func getHandlerParams()

in internal/soaktest/runner.go [177:257]


func getHandlerParams(runnerConfig *RunnerConfig, config ScenarioConfig) (loadgen.EventHandlerParams, error) {
	// if AgentName is not specified, using all the APM agents,
	// but shares the allowed events numbers sent for given duration(e.g. 4 agents send 10000/s in total)
	if config.AgentName == "" {
		config.AgentName = "apm-"
	}
	path := config.AgentName + "*.ndjson"

	var params loadgen.EventHandlerParams

	headers := make(map[string]string)
	for k, v := range config.Headers {
		headers[k] = v
	}
	for k, v := range runnerConfig.Headers {
		headers[k] = v
	}
	for k, v := range headers {
		headers[k] = strings.Replace(v, "<project_id>", config.ProjectID, 1)
	}
	headers["X-Elastic-Project-Id"] = config.ProjectID

	if config.ServerURL == "" {
		config.ServerURL = runnerConfig.ServerURL
	}
	// if <project_id> is specified in the url, replace it
	serverURL, err := url.Parse(strings.Replace(config.ServerURL, "<project_id>", config.ProjectID, 1))
	if err != nil {
		return params, err
	}
	if config.APIKey == "" {
		config.APIKey = runnerConfig.APIKeys[config.ProjectID]
	}

	burst, interval, err := loadgen.ParseEventRate(config.EventRate)
	if err != nil {
		return params, err
	}

	protocol := "apm/http"
	if strings.HasPrefix(config.AgentName, "otlp-") {
		protocol = "otlp/http"
	}

	datatype := "any"
	if protocol == "otlp/http" {
		if strings.HasPrefix(config.AgentName, "otlp-logs") {
			datatype = "logs"
		} else if strings.HasPrefix(config.AgentName, "otlp-metrics") {
			datatype = "metrics"
		} else if strings.HasPrefix(config.AgentName, "otlp-traces") {
			datatype = "traces"
		}
	}

	params = loadgen.EventHandlerParams{
		Path:                      path,
		URL:                       serverURL.String(),
		APIKey:                    config.APIKey,
		Token:                     runnerConfig.SecretToken,
		IgnoreErrors:              runnerConfig.IgnoreErrors,
		RunForever:                runnerConfig.RunForever,
		Limiter:                   loadgen.GetNewLimiter(burst, interval),
		RewriteIDs:                config.RewriteIDs,
		RewriteServiceNames:       config.RewriteServiceNames,
		RewriteServiceNodeNames:   config.RewriteServiceNodeNames,
		RewriteServiceTargetNames: config.RewriteServiceTargetNames,
		RewriteSpanNames:          config.RewriteSpanNames,
		RewriteTransactionNames:   config.RewriteTransactionNames,
		RewriteTransactionTypes:   config.RewriteTransactionTypes,
		RewriteTimestamps:         config.RewriteTimestamps,
		Headers:                   headers,

		Protocol: protocol,
		Datatype: datatype,

		TargetStackVersion: targetStackVer(config),
	}

	return params, nil
}