Skip to content

Commit d00b4d3

Browse files
committed
Add optinal time window in TraceGetParameters
Signed-off-by: rim99 <[email protected]>
1 parent 772d84c commit d00b4d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1151
-415
lines changed

Makefile.Protobuf.mk

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
# instead of the go_package's declared by the imported protof files.
1515
#
1616

17-
DOCKER_PROTOBUF_VERSION=0.5.0
18-
DOCKER_PROTOBUF=jaegertracing/protobuf:$(DOCKER_PROTOBUF_VERSION)
19-
PROTOC := docker run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${DOCKER_PROTOBUF} --proto_path=${PWD}
17+
CONTAINER=docker
18+
CONTAINER_PROTOBUF_VERSION=0.5.0
19+
CONTAINER_PROTOBUF=jaegertracing/protobuf:$(CONTAINER_PROTOBUF_VERSION)
20+
PROTOC := ${CONTAINER} run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${CONTAINER_PROTOBUF} --proto_path=${PWD}
2021

2122
PATCHED_OTEL_PROTO_DIR = proto-gen/.patched-otel-proto
2223

cmd/anonymizer/app/flags.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type Options struct {
1717
HashCustomTags bool
1818
HashLogs bool
1919
HashProcess bool
20+
StartTime int64
21+
EndTime int64
2022
}
2123

2224
const (
@@ -28,6 +30,8 @@ const (
2830
hashLogsFlag = "hash-logs"
2931
hashProcessFlag = "hash-process"
3032
maxSpansCount = "max-spans-count"
33+
startTime = "start-time"
34+
endTime = "end-time"
3135
)
3236

3337
// AddFlags adds flags for anonymizer main program
@@ -72,6 +76,16 @@ func (o *Options) AddFlags(command *cobra.Command) {
7276
maxSpansCount,
7377
-1,
7478
"The maximum number of spans to anonymize")
79+
command.Flags().Int64Var(
80+
&o.StartTime,
81+
startTime,
82+
-1,
83+
"The start time of time window for searching trace, timestampe in unix microseconds")
84+
command.Flags().Int64Var(
85+
&o.EndTime,
86+
endTime,
87+
-1,
88+
"The end time of time window for searching trace, timestampe in unix microseconds")
7589

7690
// mark traceid flag as mandatory
7791
command.MarkFlagRequired(traceIDFlag)

cmd/anonymizer/app/query/query.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"io"
1111
"strings"
12+
"time"
1213

1314
"google.golang.org/grpc"
1415
"google.golang.org/grpc/credentials/insecure"
@@ -49,15 +50,27 @@ func unwrapNotFoundErr(err error) error {
4950
}
5051

5152
// QueryTrace queries for a trace and returns all spans inside it
52-
func (q *Query) QueryTrace(traceID string) ([]model.Span, error) {
53+
func (q *Query) QueryTrace(traceID string, startTime int64, endTime int64) ([]model.Span, error) {
5354
mTraceID, err := model.TraceIDFromString(traceID)
5455
if err != nil {
5556
return nil, fmt.Errorf("failed to convert the provided trace id: %w", err)
5657
}
5758

58-
stream, err := q.client.GetTrace(context.Background(), &api_v2.GetTraceRequest{
59+
request := api_v2.GetTraceRequest{
5960
TraceID: mTraceID,
60-
})
61+
}
62+
63+
if startTime != -1 {
64+
t := time.UnixMicro(startTime)
65+
request.StartTime = &t
66+
}
67+
68+
if endTime != -1 {
69+
t := time.UnixMicro(endTime)
70+
request.EndTime = &t
71+
}
72+
73+
stream, err := q.client.GetTrace(context.Background(), &request)
6174
if err != nil {
6275
return nil, unwrapNotFoundErr(err)
6376
}

cmd/anonymizer/app/query/query_test.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"net"
88
"sync"
99
"testing"
10+
"time"
1011

1112
"github.com/stretchr/testify/assert"
1213
"github.com/stretchr/testify/mock"
@@ -24,8 +25,8 @@ import (
2425
)
2526

2627
var (
27-
matchContext = mock.AnythingOfType("*context.valueCtx")
28-
matchTraceID = mock.AnythingOfType("model.TraceID")
28+
matchContext = mock.AnythingOfType("*context.valueCtx")
29+
matchTraceGetParameters = mock.AnythingOfType("spanstore.TraceGetParameters")
2930

3031
mockInvalidTraceID = "xyz"
3132
mockTraceID = model.NewTraceID(0, 123456)
@@ -106,24 +107,31 @@ func TestQueryTrace(t *testing.T) {
106107
defer q.Close()
107108

108109
t.Run("No error", func(t *testing.T) {
109-
s.spanReader.On("GetTrace", matchContext, matchTraceID).Return(
110+
startTime := time.Date(1970, time.January, 1, 0, 0, 0, 1000, time.UTC)
111+
endTime := time.Date(1970, time.January, 1, 0, 0, 0, 2000, time.UTC)
112+
expectedTraceGetParameters := spanstore.TraceGetParameters{
113+
TraceID: mockTraceID,
114+
StartTime: &startTime,
115+
EndTime: &endTime,
116+
}
117+
s.spanReader.On("GetTrace", matchContext, expectedTraceGetParameters).Return(
110118
mockTraceGRPC, nil).Once()
111119

112-
spans, err := q.QueryTrace(mockTraceID.String())
120+
spans, err := q.QueryTrace(mockTraceID.String(), 1, 2)
113121
require.NoError(t, err)
114122
assert.Equal(t, len(spans), len(mockTraceGRPC.Spans))
115123
})
116124

117125
t.Run("Invalid TraceID", func(t *testing.T) {
118-
_, err := q.QueryTrace(mockInvalidTraceID)
126+
_, err := q.QueryTrace(mockInvalidTraceID, -1, -1)
119127
assert.ErrorContains(t, err, "failed to convert the provided trace id")
120128
})
121129

122130
t.Run("Trace not found", func(t *testing.T) {
123-
s.spanReader.On("GetTrace", matchContext, matchTraceID).Return(
131+
s.spanReader.On("GetTrace", matchContext, matchTraceGetParameters).Return(
124132
nil, spanstore.ErrTraceNotFound).Once()
125133

126-
spans, err := q.QueryTrace(mockTraceID.String())
134+
spans, err := q.QueryTrace(mockTraceID.String(), -1, -1)
127135
assert.Nil(t, spans)
128136
assert.ErrorIs(t, err, spanstore.ErrTraceNotFound)
129137
})

cmd/anonymizer/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func main() {
5353
logger.Fatal("error while creating query object", zap.Error(err))
5454
}
5555

56-
spans, err := query.QueryTrace(options.TraceID)
56+
spans, err := query.QueryTrace(options.TraceID, options.StartTime, options.EndTime)
5757
if err != nil {
5858
logger.Fatal("error while querying for trace", zap.Error(err))
5959
}

cmd/jaeger/internal/exporters/storageexporter/exporter_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/jaegertracing/jaeger/plugin/storage/memory"
2828
"github.com/jaegertracing/jaeger/storage"
2929
factoryMocks "github.com/jaegertracing/jaeger/storage/mocks"
30+
"github.com/jaegertracing/jaeger/storage/spanstore"
3031
)
3132

3233
type mockStorageExt struct {
@@ -154,7 +155,7 @@ func TestExporter(t *testing.T) {
154155
spanReader, err := storageFactory.CreateSpanReader()
155156
require.NoError(t, err)
156157
requiredTraceID := model.NewTraceID(0, 1) // 00000000000000000000000000000001
157-
requiredTrace, err := spanReader.GetTrace(ctx, requiredTraceID)
158+
requiredTrace, err := spanReader.GetTrace(ctx, spanstore.TraceGetParameters{TraceID: requiredTraceID})
158159
require.NoError(t, err)
159160
assert.Equal(t, spanID.String(), requiredTrace.Spans[0].SpanID.String())
160161

cmd/jaeger/internal/extension/jaegerstorage/factoryadapter/writer_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616

1717
"github.com/jaegertracing/jaeger/model"
1818
"github.com/jaegertracing/jaeger/plugin/storage/memory"
19+
"github.com/jaegertracing/jaeger/storage/spanstore"
1920
spanstoreMocks "github.com/jaegertracing/jaeger/storage/spanstore/mocks"
2021
)
2122

@@ -32,7 +33,8 @@ func TestWriteTraces(t *testing.T) {
3233
tdID := td.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).TraceID()
3334
traceID, err := model.TraceIDFromBytes(tdID[:])
3435
require.NoError(t, err)
35-
trace, err := memstore.GetTrace(context.Background(), traceID)
36+
query := spanstore.TraceGetParameters{TraceID: traceID}
37+
trace, err := memstore.GetTrace(context.Background(), query)
3638
require.NoError(t, err)
3739
require.NotNil(t, trace)
3840
assert.Len(t, trace.Spans, 1)

cmd/jaeger/internal/integration/span_reader.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,11 @@ func unwrapNotFoundErr(err error) error {
6666
return err
6767
}
6868

69-
func (r *spanReader) GetTrace(ctx context.Context, traceID model.TraceID) (*model.Trace, error) {
69+
func (r *spanReader) GetTrace(ctx context.Context, query spanstore.TraceGetParameters) (*model.Trace, error) {
7070
stream, err := r.client.GetTrace(ctx, &api_v2.GetTraceRequest{
71-
TraceID: traceID,
71+
TraceID: query.TraceID,
72+
StartTime: query.StartTime,
73+
EndTime: query.EndTime,
7274
})
7375
if err != nil {
7476
return nil, unwrapNotFoundErr(err)

cmd/query/app/apiv3/gateway_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ func parseResponse(t *testing.T, body []byte, obj gogoproto.Message) {
8080
require.NoError(t, gogojsonpb.Unmarshal(bytes.NewBuffer(body), obj))
8181
}
8282

83-
func makeTestTrace() (*model.Trace, model.TraceID) {
83+
func makeTestTrace() (*model.Trace, spanstore.TraceGetParameters) {
8484
traceID := model.NewTraceID(150, 160)
85+
query := spanstore.TraceGetParameters{TraceID: traceID}
8586
return &model.Trace{
8687
Spans: []*model.Span{
8788
{
@@ -94,7 +95,7 @@ func makeTestTrace() (*model.Trace, model.TraceID) {
9495
},
9596
},
9697
},
97-
}, traceID
98+
}, query
9899
}
99100

100101
func runGatewayTests(
@@ -140,18 +141,18 @@ func (gw *testGateway) runGatewayGetOperations(t *testing.T) {
140141
}
141142

142143
func (gw *testGateway) runGatewayGetTrace(t *testing.T) {
143-
trace, traceID := makeTestTrace()
144-
gw.reader.On("GetTrace", matchContext, traceID).Return(trace, nil).Once()
145-
gw.getTracesAndVerify(t, "/api/v3/traces/"+traceID.String(), traceID)
144+
trace, query := makeTestTrace()
145+
gw.reader.On("GetTrace", matchContext, query).Return(trace, nil).Once()
146+
gw.getTracesAndVerify(t, "/api/v3/traces/"+query.TraceID.String(), query.TraceID)
146147
}
147148

148149
func (gw *testGateway) runGatewayFindTraces(t *testing.T) {
149-
trace, traceID := makeTestTrace()
150+
trace, query := makeTestTrace()
150151
q, qp := mockFindQueries()
151152
gw.reader.
152153
On("FindTraces", matchContext, qp).
153154
Return([]*model.Trace{trace}, nil).Once()
154-
gw.getTracesAndVerify(t, "/api/v3/traces?"+q.Encode(), traceID)
155+
gw.getTracesAndVerify(t, "/api/v3/traces?"+q.Encode(), query.TraceID)
155156
}
156157

157158
func (gw *testGateway) getTracesAndVerify(t *testing.T, url string, expectedTraceID model.TraceID) {

cmd/query/app/apiv3/grpc_handler.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ func (h *Handler) GetTrace(request *api_v3.GetTraceRequest, stream api_v3.QueryS
3333
return fmt.Errorf("malform trace ID: %w", err)
3434
}
3535

36-
trace, err := h.QueryService.GetTrace(stream.Context(), traceID)
36+
query := spanstore.TraceGetParameters{
37+
TraceID: traceID,
38+
StartTime: request.GetStartTime(),
39+
EndTime: request.GetEndTime(),
40+
}
41+
trace, err := h.QueryService.GetTrace(stream.Context(), query)
3742
if err != nil {
3843
return fmt.Errorf("cannot retrieve trace: %w", err)
3944
}

0 commit comments

Comments
 (0)