func runQuery()

in step1/src/loadgen/main.go [141:176]


func runQuery(s string) (int, error) {
	v := url.Values{}
	v.Set("q", s)
	reqURL.RawQuery = v.Encode()

	// step1. instrument trace
	ctx := context.Background()
	tr := otel.Tracer("loadgen")
	ctx, span := tr.Start(ctx, "query.request", trace.WithAttributes(
		semconv.TelemetrySDKLanguageGo,
		semconv.ServiceNameKey.String("loadgen.runQuery"),
		attribute.Key("query").String(s),
	))
	defer span.End()
	ctx = httptrace.WithClientTrace(ctx, otelhttptrace.NewClientTrace(ctx))
	req, err := http.NewRequestWithContext(ctx, "GET", reqURL.String(), nil)
	if err != nil {
		return -1, fmt.Errorf("error creating HTTP request object: %v", err)
	}
	resp, err := httpClient.Do(req)
	// step1. end instrumentation
	if err != nil {
		return -1, fmt.Errorf("error sending request to %v: %v", reqURL.String(), err)
	}
	data, err := io.ReadAll(resp.Body)
	if err != nil {
		return -1, fmt.Errorf("error reading response body: %v", err)
	}
	r := struct {
		Matched int `json:"match_count"`
	}{}
	if err = json.Unmarshal(data, &r); err != nil {
		return -1, err
	}
	return r.Matched, nil
}