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
}