-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
SpanBytesEncoder.java
132 lines (111 loc) · 3.27 KB
/
SpanBytesEncoder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Copyright The OpenZipkin Authors
* SPDX-License-Identifier: Apache-2.0
*/
package zipkin2.codec;
import java.util.List;
import zipkin2.Span;
import zipkin2.internal.JsonCodec;
import zipkin2.internal.Proto3Codec;
import zipkin2.internal.V1JsonSpanWriter;
import zipkin2.internal.V1ThriftSpanWriter;
import zipkin2.internal.V2SpanWriter;
/** Limited interface needed by those writing span reporters */
@SuppressWarnings("ImmutableEnumChecker") // because span is immutable
public enum SpanBytesEncoder implements BytesEncoder<Span> {
/** Corresponds to the Zipkin v1 json format (with tags as binary annotations) */
JSON_V1 {
@Override
public Encoding encoding() {
return Encoding.JSON;
}
@Override
public int sizeInBytes(Span input) {
return new V1JsonSpanWriter().sizeInBytes(input);
}
@Override
public byte[] encode(Span span) {
return JsonCodec.write(new V1JsonSpanWriter(), span);
}
@Override
public byte[] encodeList(List<Span> spans) {
return JsonCodec.writeList(new V1JsonSpanWriter(), spans);
}
@Override
public int encodeList(List<Span> spans, byte[] out, int pos) {
return JsonCodec.writeList(new V1JsonSpanWriter(), spans, out, pos);
}
},
/** Corresponds to the Zipkin v1 thrift format */
THRIFT {
@Override
public Encoding encoding() {
return Encoding.THRIFT;
}
@Override
public int sizeInBytes(Span input) {
return new V1ThriftSpanWriter().sizeInBytes(input);
}
@Override
public byte[] encode(Span span) {
return new V1ThriftSpanWriter().write(span);
}
@Override
public byte[] encodeList(List<Span> spans) {
return new V1ThriftSpanWriter().writeList(spans);
}
@Override
public int encodeList(List<Span> spans, byte[] out, int pos) {
return new V1ThriftSpanWriter().writeList(spans, out, pos);
}
},
/** Corresponds to the Zipkin v2 json format */
JSON_V2 {
final V2SpanWriter writer = new V2SpanWriter();
@Override
public Encoding encoding() {
return Encoding.JSON;
}
@Override
public int sizeInBytes(Span input) {
return writer.sizeInBytes(input);
}
@Override
public byte[] encode(Span span) {
return JsonCodec.write(writer, span);
}
@Override
public byte[] encodeList(List<Span> spans) {
return JsonCodec.writeList(writer, spans);
}
@Override
public int encodeList(List<Span> spans, byte[] out, int pos) {
return JsonCodec.writeList(writer, spans, out, pos);
}
},
PROTO3 {
final Proto3Codec codec = new Proto3Codec();
@Override
public Encoding encoding() {
return Encoding.PROTO3;
}
@Override
public int sizeInBytes(Span input) {
return codec.sizeInBytes(input);
}
@Override
public byte[] encode(Span span) {
return codec.write(span);
}
@Override
public byte[] encodeList(List<Span> spans) {
return codec.writeList(spans);
}
@Override
public int encodeList(List<Span> spans, byte[] out, int pos) {
return codec.writeList(spans, out, pos);
}
};
/** Allows you to encode a list of spans onto a specific offset. For example, when nesting */
public abstract int encodeList(List<Span> spans, byte[] out, int pos);
}