fork of https://github.com/sourcegraph/zoekt
1package web
2
3import (
4 "context"
5
6 "github.com/opentracing/opentracing-go"
7
8 "github.com/sourcegraph/zoekt"
9 "github.com/sourcegraph/zoekt/internal/trace"
10 "github.com/sourcegraph/zoekt/query"
11)
12
13func NewTraceAwareSearcher(s zoekt.Streamer) zoekt.Streamer {
14 return traceAwareSearcher{Searcher: s}
15}
16
17// traceAwareSearcher wraps a zoekt.Searcher instance so that the tracing context item is set in the
18// context. This context item toggles on trace collection via the
19// github.com/sourcegraph/zoekt/internal/trace/ot package.
20type traceAwareSearcher struct {
21 Searcher zoekt.Streamer
22}
23
24func (s traceAwareSearcher) Search(
25 ctx context.Context,
26 q query.Q,
27 opts *zoekt.SearchOptions,
28) (*zoekt.SearchResult, error) {
29 ctx = trace.WithOpenTracingEnabled(ctx, opts.Trace)
30 spanContext := trace.SpanContextFromContext(ctx)
31 if opts.Trace && spanContext != nil {
32 var span opentracing.Span
33 span, ctx = opentracing.StartSpanFromContext(ctx, "zoekt.traceAwareSearcher.Search", opentracing.ChildOf(spanContext))
34 defer span.Finish()
35 }
36 return s.Searcher.Search(ctx, q, opts)
37}
38
39func (s traceAwareSearcher) StreamSearch(
40 ctx context.Context,
41 q query.Q,
42 opts *zoekt.SearchOptions,
43 sender zoekt.Sender,
44) error {
45 ctx = trace.WithOpenTracingEnabled(ctx, opts.Trace)
46 spanContext := trace.SpanContextFromContext(ctx)
47 if opts.Trace && spanContext != nil {
48 var span opentracing.Span
49 span, ctx = opentracing.StartSpanFromContext(ctx, "zoekt.traceAwareSearcher.StreamSearch", opentracing.ChildOf(spanContext))
50 defer span.Finish()
51 }
52 return s.Searcher.StreamSearch(ctx, q, opts, sender)
53}
54
55func (s traceAwareSearcher) List(ctx context.Context, q query.Q, opts *zoekt.ListOptions) (*zoekt.RepoList, error) {
56 return s.Searcher.List(ctx, q, opts)
57}
58func (s traceAwareSearcher) Close() { s.Searcher.Close() }
59func (s traceAwareSearcher) String() string { return s.Searcher.String() }