opentelemetry-exporters-jaeger 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +9 -0
- data/README.md +83 -0
- data/lib/opentelemetry-exporters-jaeger.rb +7 -0
- data/lib/opentelemetry/exporters/jaeger.rb +18 -0
- data/lib/opentelemetry/exporters/jaeger/exporter.rb +5 -94
- data/lib/opentelemetry/exporters/jaeger/exporter/span_encoder.rb +117 -0
- data/lib/opentelemetry/exporters/jaeger/version.rb +1 -1
- data/thrift/gen-rb/agent.rb +120 -0
- data/thrift/gen-rb/agent_constants.rb +17 -0
- data/thrift/gen-rb/agent_types.rb +19 -0
- data/thrift/gen-rb/collector.rb +86 -0
- data/thrift/gen-rb/jaeger_constants.rb +17 -0
- data/thrift/gen-rb/jaeger_types.rb +229 -0
- data/thrift/gen-rb/zipkin_collector.rb +88 -0
- data/thrift/gen-rb/zipkincore_constants.rb +51 -0
- data/thrift/gen-rb/zipkincore_types.rb +241 -0
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b8094122a7c87fb99806bea6e65ee9709d02eb72423beb628188aa48c6150cc
|
4
|
+
data.tar.gz: 8dd6169c58acdd219046376d7b587b9cdf0e288f07ecae968b60226e26b730fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc45983a382a8e7ff1b69bb9b9d97fd07e27c45fd87e336862d8dd4cd36f87f99d031bd7efd0aa81978809900e45944f784eef3b3c55a052774f3bca42a9512c
|
7
|
+
data.tar.gz: 1a54265581ea1bf68932cb4f03b770361d99ced6a6b161585eac9a2abf915bbf9d99ca34273d1a7662461137a1f437264d02bd54dc31da05f129336e968fca49
|
data/.yardopts
ADDED
data/README.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# opentelemetry-exporters-jaeger
|
2
|
+
|
3
|
+
The `opentelemetry-exporters-jaeger` gem provides a Jaeger exporter for OpenTelemetry for Ruby. Using `opentelemetry-exporters-jaeger`, an application can configure OpenTelemetry to export collected tracing data to [Jaeger][jaeger-home].
|
4
|
+
|
5
|
+
## What is OpenTelemetry?
|
6
|
+
|
7
|
+
[OpenTelemetry][opentelemetry-home] is an open source observability framework, providing a general-purpose API, SDK, and related tools required for the instrumentation of cloud-native software, frameworks, and libraries.
|
8
|
+
|
9
|
+
OpenTelemetry provides a single set of APIs, libraries, agents, and collector services to capture distributed traces and metrics from your application. You can analyze them using Prometheus, Jaeger, and other observability tools.
|
10
|
+
|
11
|
+
## How does this gem fit in?
|
12
|
+
|
13
|
+
The `opentelemetry-exporters-jaeger` gem is a plugin that provides Jaeger Tracing export. To export to Jaeger, an application can include this gem along with `opentelemetry-sdk`, and configure the `SDK` to use the provided Jaeger exporter as a span processor.
|
14
|
+
|
15
|
+
Generally, *libraries* that produce telemetry data should avoid depending directly on specific exporters, deferring that choice to the application developer.
|
16
|
+
|
17
|
+
## How do I get started?
|
18
|
+
|
19
|
+
Install the gem using:
|
20
|
+
|
21
|
+
```
|
22
|
+
gem install opentelemetry-sdk
|
23
|
+
gem install opentelemetry-exporters-jaeger
|
24
|
+
```
|
25
|
+
|
26
|
+
Or, if you use [bundler][bundler-home], include `opentelemetry-sdk` in your `Gemfile`.
|
27
|
+
|
28
|
+
Then, configure the SDK to use the Jaeger exporter as a span processor, and use the OpenTelemetry interfaces to produces traces and other information. Following is a basic example.
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
require 'opentelemetry/sdk'
|
32
|
+
require 'opentelemetry/exporters/jaeger'
|
33
|
+
|
34
|
+
# Configure the sdk with custom export
|
35
|
+
OpenTelemetry::SDK.configure do |c|
|
36
|
+
c.add_span_processor(
|
37
|
+
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
|
38
|
+
OpenTelemetry::Exporters::Jaeger::Exporter.new(
|
39
|
+
service_name: 'my-service', host: 'localhost', port: 6831
|
40
|
+
)
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
# To start a trace you need to get a Tracer from the TracerProvider
|
46
|
+
tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
|
47
|
+
|
48
|
+
# create a span
|
49
|
+
tracer.in_span('foo') do |span|
|
50
|
+
# set an attribute
|
51
|
+
span.set_attribute('platform', 'osx')
|
52
|
+
# add an event
|
53
|
+
span.add_event(name: 'event in bar')
|
54
|
+
# create bar as child of foo
|
55
|
+
tracer.in_span('bar') do |child_span|
|
56
|
+
# inspect the span
|
57
|
+
pp child_span
|
58
|
+
end
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
For additional examples, see the [examples on github][examples-github].
|
63
|
+
|
64
|
+
## How can I get involved?
|
65
|
+
|
66
|
+
The `opentelemetry-exporters-jaeger` gem source is [on github][repo-github], along with related gems including `opentelemetry-sdk`.
|
67
|
+
|
68
|
+
The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us on our [gitter channel][ruby-gitter] or attending our weekly meeting. See the [meeting calendar][community-meetings] for dates and times. For more information on this and other language SIGs, see the OpenTelemetry [community page][ruby-sig].
|
69
|
+
|
70
|
+
## License
|
71
|
+
|
72
|
+
The `opentelemetry-exporters-jaeger` gem is distributed under the Apache 2.0 license. See [LICENSE][license-github] for more information.
|
73
|
+
|
74
|
+
|
75
|
+
[jaeger-home]: https://www.jaegertracing.io
|
76
|
+
[opentelemetry-home]: https://opentelemetry.io
|
77
|
+
[bundler-home]: https://bundler.io
|
78
|
+
[repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
|
79
|
+
[license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/master/LICENSE
|
80
|
+
[examples-github]: https://github.com/open-telemetry/opentelemetry-ruby/tree/master/examples
|
81
|
+
[ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
|
82
|
+
[community-meetings]: https://github.com/open-telemetry/community#community-meetings
|
83
|
+
[ruby-gitter]: https://gitter.im/open-telemetry/opentelemetry-ruby
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
require 'opentelemetry/exporters/jaeger/exporter'
|
8
|
+
require 'opentelemetry/exporters/jaeger/transport'
|
9
|
+
require 'opentelemetry/exporters/jaeger/version'
|
10
|
+
|
11
|
+
# OpenTelemetry is an open source observability framework, providing a
|
12
|
+
# general-purpose API, SDK, and related tools required for the instrumentation
|
13
|
+
# of cloud-native software, frameworks, and libraries.
|
14
|
+
#
|
15
|
+
# The OpenTelemetry module provides global accessors for telemetry objects.
|
16
|
+
# See the documentation for the `opentelemetry-api` gem for details.
|
17
|
+
module OpenTelemetry
|
18
|
+
end
|
@@ -9,13 +9,13 @@ $LOAD_PATH.push(File.dirname(__FILE__) + '/../../../../thrift/gen-rb')
|
|
9
9
|
require 'agent'
|
10
10
|
require 'opentelemetry/sdk'
|
11
11
|
require 'socket'
|
12
|
-
|
12
|
+
require 'opentelemetry/exporters/jaeger/exporter/span_encoder'
|
13
13
|
|
14
14
|
module OpenTelemetry
|
15
15
|
module Exporters
|
16
16
|
module Jaeger
|
17
17
|
# An OpenTelemetry trace exporter that sends spans over UDP as Thrift Compact encoded Jaeger spans.
|
18
|
-
class Exporter
|
18
|
+
class Exporter
|
19
19
|
SUCCESS = OpenTelemetry::SDK::Trace::Export::SUCCESS
|
20
20
|
FAILED_RETRYABLE = OpenTelemetry::SDK::Trace::Export::FAILED_RETRYABLE
|
21
21
|
FAILED_NOT_RETRYABLE = OpenTelemetry::SDK::Trace::Export::FAILED_NOT_RETRYABLE
|
@@ -28,6 +28,7 @@ module OpenTelemetry
|
|
28
28
|
@max_packet_size = max_packet_size
|
29
29
|
@shutdown = false
|
30
30
|
@service_name = service_name
|
31
|
+
@span_encoder = SpanEncoder.new
|
31
32
|
end
|
32
33
|
|
33
34
|
# Called to export sampled {OpenTelemetry::SDK::Trace::SpanData} structs.
|
@@ -80,43 +81,8 @@ module OpenTelemetry
|
|
80
81
|
SUCCESS
|
81
82
|
end
|
82
83
|
|
83
|
-
def encoded_span(span_data)
|
84
|
-
|
85
|
-
duration = (span_data.end_timestamp.to_f * 1_000_000).to_i - start_time
|
86
|
-
|
87
|
-
Thrift::Span.new(
|
88
|
-
'traceIdLow' => int64(span_data.trace_id[16, 16]),
|
89
|
-
'traceIdHigh' => int64(span_data.trace_id[0, 16]),
|
90
|
-
'spanId' => int64(span_data.span_id),
|
91
|
-
'parentSpanId' => int64(span_data.parent_span_id),
|
92
|
-
'operationName' => span_data.name,
|
93
|
-
'references' => encoded_references(span_data.links),
|
94
|
-
'flags' => span_data.trace_flags.sampled? ? 1 : 0,
|
95
|
-
'startTime' => start_time,
|
96
|
-
'duration' => duration,
|
97
|
-
'tags' => encoded_tags(span_data.attributes) + encoded_status(span_data.status) + encoded_kind(span_data.kind),
|
98
|
-
'logs' => encoded_logs(span_data.events)
|
99
|
-
)
|
100
|
-
end
|
101
|
-
|
102
|
-
def encoded_logs(events)
|
103
|
-
events&.map do |event|
|
104
|
-
Thrift::Log.new(
|
105
|
-
'timestamp' => (event.timestamp.to_f * 1_000_000).to_i,
|
106
|
-
'fields' => encoded_tags(event.attributes) + encoded_tags('name' => event.name)
|
107
|
-
)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def encoded_references(links)
|
112
|
-
links&.map do |link|
|
113
|
-
Thrift::SpanRef.new(
|
114
|
-
'refType' => Thrift::SpanRefType::CHILD_OF,
|
115
|
-
'traceIdLow' => int64(link.context.trace_id[16, 16]),
|
116
|
-
'traceIdHigh' => int64(link.context.trace_id[0, 16]),
|
117
|
-
'spanId' => int64(link.context.span_id)
|
118
|
-
)
|
119
|
-
end
|
84
|
+
def encoded_span(span_data)
|
85
|
+
@span_encoder.encoded_span(span_data)
|
120
86
|
end
|
121
87
|
|
122
88
|
EMPTY_ARRAY = [].freeze
|
@@ -128,61 +94,6 @@ module OpenTelemetry
|
|
128
94
|
TYPE = Thrift::Tag::FIELDS[Thrift::Tag::VTYPE][:name]
|
129
95
|
private_constant(:EMPTY_ARRAY, :LONG, :DOUBLE, :STRING, :BOOL, :KEY, :TYPE)
|
130
96
|
|
131
|
-
def encoded_tags(attributes)
|
132
|
-
@type_map ||= {
|
133
|
-
LONG => Thrift::TagType::LONG,
|
134
|
-
DOUBLE => Thrift::TagType::DOUBLE,
|
135
|
-
STRING => Thrift::TagType::STRING,
|
136
|
-
BOOL => Thrift::TagType::BOOL
|
137
|
-
}.freeze
|
138
|
-
|
139
|
-
attributes&.map do |key, value|
|
140
|
-
value_key = case value
|
141
|
-
when Integer then LONG
|
142
|
-
when Float then DOUBLE
|
143
|
-
when String then STRING
|
144
|
-
when false, true then BOOL
|
145
|
-
end
|
146
|
-
Thrift::Tag.new(
|
147
|
-
KEY => key,
|
148
|
-
TYPE => @type_map[value_key],
|
149
|
-
value_key => value
|
150
|
-
)
|
151
|
-
end || EMPTY_ARRAY
|
152
|
-
end
|
153
|
-
|
154
|
-
def encoded_status(status)
|
155
|
-
# TODO: OpenTracing doesn't specify how to report non-HTTP (i.e. generic) status.
|
156
|
-
EMPTY_ARRAY
|
157
|
-
end
|
158
|
-
|
159
|
-
def encoded_kind(kind)
|
160
|
-
@kind_map ||= {
|
161
|
-
OpenTelemetry::Trace::SpanKind::SERVER => 'server',
|
162
|
-
OpenTelemetry::Trace::SpanKind::CLIENT => 'client',
|
163
|
-
OpenTelemetry::Trace::SpanKind::PRODUCER => 'producer',
|
164
|
-
OpenTelemetry::Trace::SpanKind::CONSUMER => 'consumer'
|
165
|
-
}.freeze
|
166
|
-
|
167
|
-
value = @kind_map[kind]
|
168
|
-
if value
|
169
|
-
Array(
|
170
|
-
Thrift::Tag.new(
|
171
|
-
KEY => 'span.kind',
|
172
|
-
TYPE => Thrift::TagType::STRING,
|
173
|
-
STRING => value
|
174
|
-
)
|
175
|
-
)
|
176
|
-
else
|
177
|
-
EMPTY_ARRAY
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def int64(hex_string)
|
182
|
-
int = hex_string.to_i(16)
|
183
|
-
int < (1 << 63) ? int : int - (1 << 64)
|
184
|
-
end
|
185
|
-
|
186
97
|
# @api private
|
187
98
|
class SizingTransport
|
188
99
|
attr_accessor :size
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
module Exporters
|
9
|
+
module Jaeger
|
10
|
+
class Exporter
|
11
|
+
# @api private
|
12
|
+
class SpanEncoder
|
13
|
+
def encoded_span(span_data) # rubocop:disable Metrics/AbcSize
|
14
|
+
start_time = (span_data.start_timestamp.to_f * 1_000_000).to_i
|
15
|
+
duration = (span_data.end_timestamp.to_f * 1_000_000).to_i - start_time
|
16
|
+
|
17
|
+
Thrift::Span.new(
|
18
|
+
'traceIdLow' => int64(span_data.trace_id[16, 16]),
|
19
|
+
'traceIdHigh' => int64(span_data.trace_id[0, 16]),
|
20
|
+
'spanId' => int64(span_data.span_id),
|
21
|
+
'parentSpanId' => int64(span_data.parent_span_id),
|
22
|
+
'operationName' => span_data.name,
|
23
|
+
'references' => encoded_references(span_data.links),
|
24
|
+
'flags' => span_data.trace_flags.sampled? ? 1 : 0,
|
25
|
+
'startTime' => start_time,
|
26
|
+
'duration' => duration,
|
27
|
+
'tags' => encoded_tags(span_data.attributes) + encoded_status(span_data.status) + encoded_kind(span_data.kind),
|
28
|
+
'logs' => encoded_logs(span_data.events)
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def encoded_kind(kind)
|
35
|
+
@kind_map ||= {
|
36
|
+
OpenTelemetry::Trace::SpanKind::SERVER => 'server',
|
37
|
+
OpenTelemetry::Trace::SpanKind::CLIENT => 'client',
|
38
|
+
OpenTelemetry::Trace::SpanKind::PRODUCER => 'producer',
|
39
|
+
OpenTelemetry::Trace::SpanKind::CONSUMER => 'consumer'
|
40
|
+
}.freeze
|
41
|
+
|
42
|
+
value = @kind_map[kind]
|
43
|
+
if value
|
44
|
+
Array(
|
45
|
+
Thrift::Tag.new(
|
46
|
+
KEY => 'span.kind',
|
47
|
+
TYPE => Thrift::TagType::STRING,
|
48
|
+
STRING => value
|
49
|
+
)
|
50
|
+
)
|
51
|
+
else
|
52
|
+
EMPTY_ARRAY
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def encoded_logs(events)
|
57
|
+
events&.map do |event|
|
58
|
+
Thrift::Log.new(
|
59
|
+
'timestamp' => (event.timestamp.to_f * 1_000_000).to_i,
|
60
|
+
'fields' => encoded_tags(event.attributes) + encoded_tags('name' => event.name)
|
61
|
+
)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def encoded_references(links)
|
66
|
+
links&.map do |link|
|
67
|
+
Thrift::SpanRef.new(
|
68
|
+
'refType' => Thrift::SpanRefType::CHILD_OF,
|
69
|
+
'traceIdLow' => int64(link.context.trace_id[16, 16]),
|
70
|
+
'traceIdHigh' => int64(link.context.trace_id[0, 16]),
|
71
|
+
'spanId' => int64(link.context.span_id)
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def encoded_status(status)
|
77
|
+
# TODO: OpenTracing doesn't specify how to report non-HTTP (i.e. generic) status.
|
78
|
+
EMPTY_ARRAY
|
79
|
+
end
|
80
|
+
|
81
|
+
def encoded_tags(attributes)
|
82
|
+
attributes&.map do |key, value|
|
83
|
+
encoded_tag(key, value)
|
84
|
+
end || EMPTY_ARRAY
|
85
|
+
end
|
86
|
+
|
87
|
+
def encoded_tag(key, value)
|
88
|
+
@type_map ||= {
|
89
|
+
LONG => Thrift::TagType::LONG,
|
90
|
+
DOUBLE => Thrift::TagType::DOUBLE,
|
91
|
+
STRING => Thrift::TagType::STRING,
|
92
|
+
BOOL => Thrift::TagType::BOOL
|
93
|
+
}.freeze
|
94
|
+
|
95
|
+
value_key = case value
|
96
|
+
when Integer then LONG
|
97
|
+
when Float then DOUBLE
|
98
|
+
when String, Array then STRING
|
99
|
+
when false, true then BOOL
|
100
|
+
end
|
101
|
+
value = value.to_json if value.is_a?(Array)
|
102
|
+
Thrift::Tag.new(
|
103
|
+
KEY => key,
|
104
|
+
TYPE => @type_map[value_key],
|
105
|
+
value_key => value
|
106
|
+
)
|
107
|
+
end
|
108
|
+
|
109
|
+
def int64(hex_string)
|
110
|
+
int = hex_string.to_i(16)
|
111
|
+
int < (1 << 63) ? int : int - (1 << 64)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'agent_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
module Agent
|
15
|
+
class Client
|
16
|
+
include ::Thrift::Client
|
17
|
+
|
18
|
+
def emitZipkinBatch(spans)
|
19
|
+
send_emitZipkinBatch(spans)
|
20
|
+
end
|
21
|
+
|
22
|
+
def send_emitZipkinBatch(spans)
|
23
|
+
send_oneway_message('emitZipkinBatch', EmitZipkinBatch_args, :spans => spans)
|
24
|
+
end
|
25
|
+
def emitBatch(batch)
|
26
|
+
send_emitBatch(batch)
|
27
|
+
end
|
28
|
+
|
29
|
+
def send_emitBatch(batch)
|
30
|
+
send_oneway_message('emitBatch', EmitBatch_args, :batch => batch)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Processor
|
35
|
+
include ::Thrift::Processor
|
36
|
+
|
37
|
+
def process_emitZipkinBatch(seqid, iprot, oprot)
|
38
|
+
args = read_args(iprot, EmitZipkinBatch_args)
|
39
|
+
@handler.emitZipkinBatch(args.spans)
|
40
|
+
return
|
41
|
+
end
|
42
|
+
|
43
|
+
def process_emitBatch(seqid, iprot, oprot)
|
44
|
+
args = read_args(iprot, EmitBatch_args)
|
45
|
+
@handler.emitBatch(args.batch)
|
46
|
+
return
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# HELPER FUNCTIONS AND STRUCTURES
|
52
|
+
|
53
|
+
class EmitZipkinBatch_args
|
54
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
55
|
+
SPANS = 1
|
56
|
+
|
57
|
+
FIELDS = {
|
58
|
+
SPANS => {:type => ::Thrift::Types::LIST, :name => 'spans', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Span}}
|
59
|
+
}
|
60
|
+
|
61
|
+
def struct_fields; FIELDS; end
|
62
|
+
|
63
|
+
def validate
|
64
|
+
end
|
65
|
+
|
66
|
+
::Thrift::Struct.generate_accessors self
|
67
|
+
end
|
68
|
+
|
69
|
+
class EmitZipkinBatch_result
|
70
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
71
|
+
|
72
|
+
FIELDS = {
|
73
|
+
|
74
|
+
}
|
75
|
+
|
76
|
+
def struct_fields; FIELDS; end
|
77
|
+
|
78
|
+
def validate
|
79
|
+
end
|
80
|
+
|
81
|
+
::Thrift::Struct.generate_accessors self
|
82
|
+
end
|
83
|
+
|
84
|
+
class EmitBatch_args
|
85
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
86
|
+
BATCH = 1
|
87
|
+
|
88
|
+
FIELDS = {
|
89
|
+
BATCH => {:type => ::Thrift::Types::STRUCT, :name => 'batch', :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Batch}
|
90
|
+
}
|
91
|
+
|
92
|
+
def struct_fields; FIELDS; end
|
93
|
+
|
94
|
+
def validate
|
95
|
+
end
|
96
|
+
|
97
|
+
::Thrift::Struct.generate_accessors self
|
98
|
+
end
|
99
|
+
|
100
|
+
class EmitBatch_result
|
101
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
102
|
+
|
103
|
+
FIELDS = {
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
def struct_fields; FIELDS; end
|
108
|
+
|
109
|
+
def validate
|
110
|
+
end
|
111
|
+
|
112
|
+
::Thrift::Struct.generate_accessors self
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'agent_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'jaeger_types'
|
9
|
+
require 'zipkincore_types'
|
10
|
+
|
11
|
+
|
12
|
+
module OpenTelemetry
|
13
|
+
module Exporters
|
14
|
+
module Jaeger
|
15
|
+
module Thrift
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'jaeger_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
module Collector
|
15
|
+
class Client
|
16
|
+
include ::Thrift::Client
|
17
|
+
|
18
|
+
def submitBatches(batches)
|
19
|
+
send_submitBatches(batches)
|
20
|
+
return recv_submitBatches()
|
21
|
+
end
|
22
|
+
|
23
|
+
def send_submitBatches(batches)
|
24
|
+
send_message('submitBatches', SubmitBatches_args, :batches => batches)
|
25
|
+
end
|
26
|
+
|
27
|
+
def recv_submitBatches()
|
28
|
+
result = receive_message(SubmitBatches_result)
|
29
|
+
return result.success unless result.success.nil?
|
30
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'submitBatches failed: unknown result')
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class Processor
|
36
|
+
include ::Thrift::Processor
|
37
|
+
|
38
|
+
def process_submitBatches(seqid, iprot, oprot)
|
39
|
+
args = read_args(iprot, SubmitBatches_args)
|
40
|
+
result = SubmitBatches_result.new()
|
41
|
+
result.success = @handler.submitBatches(args.batches)
|
42
|
+
write_result(result, oprot, 'submitBatches', seqid)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
# HELPER FUNCTIONS AND STRUCTURES
|
48
|
+
|
49
|
+
class SubmitBatches_args
|
50
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
51
|
+
BATCHES = 1
|
52
|
+
|
53
|
+
FIELDS = {
|
54
|
+
BATCHES => {:type => ::Thrift::Types::LIST, :name => 'batches', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Batch}}
|
55
|
+
}
|
56
|
+
|
57
|
+
def struct_fields; FIELDS; end
|
58
|
+
|
59
|
+
def validate
|
60
|
+
end
|
61
|
+
|
62
|
+
::Thrift::Struct.generate_accessors self
|
63
|
+
end
|
64
|
+
|
65
|
+
class SubmitBatches_result
|
66
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
67
|
+
SUCCESS = 0
|
68
|
+
|
69
|
+
FIELDS = {
|
70
|
+
SUCCESS => {:type => ::Thrift::Types::LIST, :name => 'success', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::BatchSubmitResponse}}
|
71
|
+
}
|
72
|
+
|
73
|
+
def struct_fields; FIELDS; end
|
74
|
+
|
75
|
+
def validate
|
76
|
+
end
|
77
|
+
|
78
|
+
::Thrift::Struct.generate_accessors self
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'jaeger_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,229 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
|
9
|
+
module OpenTelemetry
|
10
|
+
module Exporters
|
11
|
+
module Jaeger
|
12
|
+
module Thrift
|
13
|
+
module TagType
|
14
|
+
STRING = 0
|
15
|
+
DOUBLE = 1
|
16
|
+
BOOL = 2
|
17
|
+
LONG = 3
|
18
|
+
BINARY = 4
|
19
|
+
VALUE_MAP = {0 => "STRING", 1 => "DOUBLE", 2 => "BOOL", 3 => "LONG", 4 => "BINARY"}
|
20
|
+
VALID_VALUES = Set.new([STRING, DOUBLE, BOOL, LONG, BINARY]).freeze
|
21
|
+
end
|
22
|
+
|
23
|
+
module SpanRefType
|
24
|
+
CHILD_OF = 0
|
25
|
+
FOLLOWS_FROM = 1
|
26
|
+
VALUE_MAP = {0 => "CHILD_OF", 1 => "FOLLOWS_FROM"}
|
27
|
+
VALID_VALUES = Set.new([CHILD_OF, FOLLOWS_FROM]).freeze
|
28
|
+
end
|
29
|
+
|
30
|
+
class Tag; end
|
31
|
+
|
32
|
+
class Log; end
|
33
|
+
|
34
|
+
class SpanRef; end
|
35
|
+
|
36
|
+
class Span; end
|
37
|
+
|
38
|
+
class Process; end
|
39
|
+
|
40
|
+
class Batch; end
|
41
|
+
|
42
|
+
class BatchSubmitResponse; end
|
43
|
+
|
44
|
+
class Tag
|
45
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
46
|
+
KEY = 1
|
47
|
+
VTYPE = 2
|
48
|
+
VSTR = 3
|
49
|
+
VDOUBLE = 4
|
50
|
+
VBOOL = 5
|
51
|
+
VLONG = 6
|
52
|
+
VBINARY = 7
|
53
|
+
|
54
|
+
FIELDS = {
|
55
|
+
KEY => {:type => ::Thrift::Types::STRING, :name => 'key'},
|
56
|
+
VTYPE => {:type => ::Thrift::Types::I32, :name => 'vType', :enum_class => ::OpenTelemetry::Exporters::Jaeger::Thrift::TagType},
|
57
|
+
VSTR => {:type => ::Thrift::Types::STRING, :name => 'vStr', :optional => true},
|
58
|
+
VDOUBLE => {:type => ::Thrift::Types::DOUBLE, :name => 'vDouble', :optional => true},
|
59
|
+
VBOOL => {:type => ::Thrift::Types::BOOL, :name => 'vBool', :optional => true},
|
60
|
+
VLONG => {:type => ::Thrift::Types::I64, :name => 'vLong', :optional => true},
|
61
|
+
VBINARY => {:type => ::Thrift::Types::STRING, :name => 'vBinary', :binary => true, :optional => true}
|
62
|
+
}
|
63
|
+
|
64
|
+
def struct_fields; FIELDS; end
|
65
|
+
|
66
|
+
def validate
|
67
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field key is unset!') unless @key
|
68
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field vType is unset!') unless @vType
|
69
|
+
unless @vType.nil? || ::OpenTelemetry::Exporters::Jaeger::Thrift::TagType::VALID_VALUES.include?(@vType)
|
70
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field vType!')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
::Thrift::Struct.generate_accessors self
|
75
|
+
end
|
76
|
+
|
77
|
+
class Log
|
78
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
79
|
+
TIMESTAMP = 1
|
80
|
+
FIELDS = 2
|
81
|
+
|
82
|
+
FIELDS = {
|
83
|
+
TIMESTAMP => {:type => ::Thrift::Types::I64, :name => 'timestamp'},
|
84
|
+
FIELDS => {:type => ::Thrift::Types::LIST, :name => 'fields', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Tag}}
|
85
|
+
}
|
86
|
+
|
87
|
+
def struct_fields; FIELDS; end
|
88
|
+
|
89
|
+
def validate
|
90
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field timestamp is unset!') unless @timestamp
|
91
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field fields is unset!') unless @fields
|
92
|
+
end
|
93
|
+
|
94
|
+
::Thrift::Struct.generate_accessors self
|
95
|
+
end
|
96
|
+
|
97
|
+
class SpanRef
|
98
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
99
|
+
REFTYPE = 1
|
100
|
+
TRACEIDLOW = 2
|
101
|
+
TRACEIDHIGH = 3
|
102
|
+
SPANID = 4
|
103
|
+
|
104
|
+
FIELDS = {
|
105
|
+
REFTYPE => {:type => ::Thrift::Types::I32, :name => 'refType', :enum_class => ::OpenTelemetry::Exporters::Jaeger::Thrift::SpanRefType},
|
106
|
+
TRACEIDLOW => {:type => ::Thrift::Types::I64, :name => 'traceIdLow'},
|
107
|
+
TRACEIDHIGH => {:type => ::Thrift::Types::I64, :name => 'traceIdHigh'},
|
108
|
+
SPANID => {:type => ::Thrift::Types::I64, :name => 'spanId'}
|
109
|
+
}
|
110
|
+
|
111
|
+
def struct_fields; FIELDS; end
|
112
|
+
|
113
|
+
def validate
|
114
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field refType is unset!') unless @refType
|
115
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field traceIdLow is unset!') unless @traceIdLow
|
116
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field traceIdHigh is unset!') unless @traceIdHigh
|
117
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field spanId is unset!') unless @spanId
|
118
|
+
unless @refType.nil? || ::OpenTelemetry::Exporters::Jaeger::Thrift::SpanRefType::VALID_VALUES.include?(@refType)
|
119
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field refType!')
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
::Thrift::Struct.generate_accessors self
|
124
|
+
end
|
125
|
+
|
126
|
+
class Span
|
127
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
128
|
+
TRACEIDLOW = 1
|
129
|
+
TRACEIDHIGH = 2
|
130
|
+
SPANID = 3
|
131
|
+
PARENTSPANID = 4
|
132
|
+
OPERATIONNAME = 5
|
133
|
+
REFERENCES = 6
|
134
|
+
FLAGS = 7
|
135
|
+
STARTTIME = 8
|
136
|
+
DURATION = 9
|
137
|
+
TAGS = 10
|
138
|
+
LOGS = 11
|
139
|
+
|
140
|
+
FIELDS = {
|
141
|
+
TRACEIDLOW => {:type => ::Thrift::Types::I64, :name => 'traceIdLow'},
|
142
|
+
TRACEIDHIGH => {:type => ::Thrift::Types::I64, :name => 'traceIdHigh'},
|
143
|
+
SPANID => {:type => ::Thrift::Types::I64, :name => 'spanId'},
|
144
|
+
PARENTSPANID => {:type => ::Thrift::Types::I64, :name => 'parentSpanId'},
|
145
|
+
OPERATIONNAME => {:type => ::Thrift::Types::STRING, :name => 'operationName'},
|
146
|
+
REFERENCES => {:type => ::Thrift::Types::LIST, :name => 'references', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::SpanRef}, :optional => true},
|
147
|
+
FLAGS => {:type => ::Thrift::Types::I32, :name => 'flags'},
|
148
|
+
STARTTIME => {:type => ::Thrift::Types::I64, :name => 'startTime'},
|
149
|
+
DURATION => {:type => ::Thrift::Types::I64, :name => 'duration'},
|
150
|
+
TAGS => {:type => ::Thrift::Types::LIST, :name => 'tags', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Tag}, :optional => true},
|
151
|
+
LOGS => {:type => ::Thrift::Types::LIST, :name => 'logs', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Log}, :optional => true}
|
152
|
+
}
|
153
|
+
|
154
|
+
def struct_fields; FIELDS; end
|
155
|
+
|
156
|
+
def validate
|
157
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field traceIdLow is unset!') unless @traceIdLow
|
158
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field traceIdHigh is unset!') unless @traceIdHigh
|
159
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field spanId is unset!') unless @spanId
|
160
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field parentSpanId is unset!') unless @parentSpanId
|
161
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field operationName is unset!') unless @operationName
|
162
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field flags is unset!') unless @flags
|
163
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field startTime is unset!') unless @startTime
|
164
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field duration is unset!') unless @duration
|
165
|
+
end
|
166
|
+
|
167
|
+
::Thrift::Struct.generate_accessors self
|
168
|
+
end
|
169
|
+
|
170
|
+
class Process
|
171
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
172
|
+
SERVICENAME = 1
|
173
|
+
TAGS = 2
|
174
|
+
|
175
|
+
FIELDS = {
|
176
|
+
SERVICENAME => {:type => ::Thrift::Types::STRING, :name => 'serviceName'},
|
177
|
+
TAGS => {:type => ::Thrift::Types::LIST, :name => 'tags', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Tag}, :optional => true}
|
178
|
+
}
|
179
|
+
|
180
|
+
def struct_fields; FIELDS; end
|
181
|
+
|
182
|
+
def validate
|
183
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field serviceName is unset!') unless @serviceName
|
184
|
+
end
|
185
|
+
|
186
|
+
::Thrift::Struct.generate_accessors self
|
187
|
+
end
|
188
|
+
|
189
|
+
class Batch
|
190
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
191
|
+
PROCESS = 1
|
192
|
+
SPANS = 2
|
193
|
+
|
194
|
+
FIELDS = {
|
195
|
+
PROCESS => {:type => ::Thrift::Types::STRUCT, :name => 'process', :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Process},
|
196
|
+
SPANS => {:type => ::Thrift::Types::LIST, :name => 'spans', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Span}}
|
197
|
+
}
|
198
|
+
|
199
|
+
def struct_fields; FIELDS; end
|
200
|
+
|
201
|
+
def validate
|
202
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field process is unset!') unless @process
|
203
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field spans is unset!') unless @spans
|
204
|
+
end
|
205
|
+
|
206
|
+
::Thrift::Struct.generate_accessors self
|
207
|
+
end
|
208
|
+
|
209
|
+
class BatchSubmitResponse
|
210
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
211
|
+
OK = 1
|
212
|
+
|
213
|
+
FIELDS = {
|
214
|
+
OK => {:type => ::Thrift::Types::BOOL, :name => 'ok'}
|
215
|
+
}
|
216
|
+
|
217
|
+
def struct_fields; FIELDS; end
|
218
|
+
|
219
|
+
def validate
|
220
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field ok is unset!') if @ok.nil?
|
221
|
+
end
|
222
|
+
|
223
|
+
::Thrift::Struct.generate_accessors self
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'zipkincore_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
module Zipkin
|
15
|
+
module ZipkinCollector
|
16
|
+
class Client
|
17
|
+
include ::Thrift::Client
|
18
|
+
|
19
|
+
def submitZipkinBatch(spans)
|
20
|
+
send_submitZipkinBatch(spans)
|
21
|
+
return recv_submitZipkinBatch()
|
22
|
+
end
|
23
|
+
|
24
|
+
def send_submitZipkinBatch(spans)
|
25
|
+
send_message('submitZipkinBatch', SubmitZipkinBatch_args, :spans => spans)
|
26
|
+
end
|
27
|
+
|
28
|
+
def recv_submitZipkinBatch()
|
29
|
+
result = receive_message(SubmitZipkinBatch_result)
|
30
|
+
return result.success unless result.success.nil?
|
31
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'submitZipkinBatch failed: unknown result')
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class Processor
|
37
|
+
include ::Thrift::Processor
|
38
|
+
|
39
|
+
def process_submitZipkinBatch(seqid, iprot, oprot)
|
40
|
+
args = read_args(iprot, SubmitZipkinBatch_args)
|
41
|
+
result = SubmitZipkinBatch_result.new()
|
42
|
+
result.success = @handler.submitZipkinBatch(args.spans)
|
43
|
+
write_result(result, oprot, 'submitZipkinBatch', seqid)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
# HELPER FUNCTIONS AND STRUCTURES
|
49
|
+
|
50
|
+
class SubmitZipkinBatch_args
|
51
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
52
|
+
SPANS = 1
|
53
|
+
|
54
|
+
FIELDS = {
|
55
|
+
SPANS => {:type => ::Thrift::Types::LIST, :name => 'spans', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Span}}
|
56
|
+
}
|
57
|
+
|
58
|
+
def struct_fields; FIELDS; end
|
59
|
+
|
60
|
+
def validate
|
61
|
+
end
|
62
|
+
|
63
|
+
::Thrift::Struct.generate_accessors self
|
64
|
+
end
|
65
|
+
|
66
|
+
class SubmitZipkinBatch_result
|
67
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
68
|
+
SUCCESS = 0
|
69
|
+
|
70
|
+
FIELDS = {
|
71
|
+
SUCCESS => {:type => ::Thrift::Types::LIST, :name => 'success', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Response}}
|
72
|
+
}
|
73
|
+
|
74
|
+
def struct_fields; FIELDS; end
|
75
|
+
|
76
|
+
def validate
|
77
|
+
end
|
78
|
+
|
79
|
+
::Thrift::Struct.generate_accessors self
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require 'zipkincore_types'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Exporters
|
12
|
+
module Jaeger
|
13
|
+
module Thrift
|
14
|
+
module Zipkin
|
15
|
+
CLIENT_SEND = %q"cs"
|
16
|
+
|
17
|
+
CLIENT_RECV = %q"cr"
|
18
|
+
|
19
|
+
SERVER_SEND = %q"ss"
|
20
|
+
|
21
|
+
SERVER_RECV = %q"sr"
|
22
|
+
|
23
|
+
MESSAGE_SEND = %q"ms"
|
24
|
+
|
25
|
+
MESSAGE_RECV = %q"mr"
|
26
|
+
|
27
|
+
WIRE_SEND = %q"ws"
|
28
|
+
|
29
|
+
WIRE_RECV = %q"wr"
|
30
|
+
|
31
|
+
CLIENT_SEND_FRAGMENT = %q"csf"
|
32
|
+
|
33
|
+
CLIENT_RECV_FRAGMENT = %q"crf"
|
34
|
+
|
35
|
+
SERVER_SEND_FRAGMENT = %q"ssf"
|
36
|
+
|
37
|
+
SERVER_RECV_FRAGMENT = %q"srf"
|
38
|
+
|
39
|
+
LOCAL_COMPONENT = %q"lc"
|
40
|
+
|
41
|
+
CLIENT_ADDR = %q"ca"
|
42
|
+
|
43
|
+
SERVER_ADDR = %q"sa"
|
44
|
+
|
45
|
+
MESSAGE_ADDR = %q"ma"
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.12.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
|
9
|
+
module OpenTelemetry
|
10
|
+
module Exporters
|
11
|
+
module Jaeger
|
12
|
+
module Thrift
|
13
|
+
module Zipkin
|
14
|
+
module AnnotationType
|
15
|
+
BOOL = 0
|
16
|
+
BYTES = 1
|
17
|
+
I16 = 2
|
18
|
+
I32 = 3
|
19
|
+
I64 = 4
|
20
|
+
DOUBLE = 5
|
21
|
+
STRING = 6
|
22
|
+
VALUE_MAP = {0 => "BOOL", 1 => "BYTES", 2 => "I16", 3 => "I32", 4 => "I64", 5 => "DOUBLE", 6 => "STRING"}
|
23
|
+
VALID_VALUES = Set.new([BOOL, BYTES, I16, I32, I64, DOUBLE, STRING]).freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
class Endpoint; end
|
27
|
+
|
28
|
+
class Annotation; end
|
29
|
+
|
30
|
+
class BinaryAnnotation; end
|
31
|
+
|
32
|
+
class Span; end
|
33
|
+
|
34
|
+
class Response; end
|
35
|
+
|
36
|
+
# Indicates the network context of a service recording an annotation with two
|
37
|
+
# exceptions.
|
38
|
+
#
|
39
|
+
# When a BinaryAnnotation, and key is CLIENT_ADDR or SERVER_ADDR,
|
40
|
+
# the endpoint indicates the source or destination of an RPC. This exception
|
41
|
+
# allows zipkin to display network context of uninstrumented services, or
|
42
|
+
# clients such as web browsers.
|
43
|
+
class Endpoint
|
44
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
45
|
+
IPV4 = 1
|
46
|
+
PORT = 2
|
47
|
+
SERVICE_NAME = 3
|
48
|
+
IPV6 = 4
|
49
|
+
|
50
|
+
FIELDS = {
|
51
|
+
# IPv4 host address packed into 4 bytes.
|
52
|
+
#
|
53
|
+
# Ex for the ip 1.2.3.4, it would be (1 << 24) | (2 << 16) | (3 << 8) | 4
|
54
|
+
IPV4 => {:type => ::Thrift::Types::I32, :name => 'ipv4'},
|
55
|
+
# IPv4 port
|
56
|
+
#
|
57
|
+
# Note: this is to be treated as an unsigned integer, so watch for negatives.
|
58
|
+
#
|
59
|
+
# Conventionally, when the port isn't known, port = 0.
|
60
|
+
PORT => {:type => ::Thrift::Types::I16, :name => 'port'},
|
61
|
+
# Service name in lowercase, such as "memcache" or "zipkin-web"
|
62
|
+
#
|
63
|
+
# Conventionally, when the service name isn't known, service_name = "unknown".
|
64
|
+
SERVICE_NAME => {:type => ::Thrift::Types::STRING, :name => 'service_name'},
|
65
|
+
# IPv6 host address packed into 16 bytes. Ex Inet6Address.getBytes()
|
66
|
+
IPV6 => {:type => ::Thrift::Types::STRING, :name => 'ipv6', :binary => true, :optional => true}
|
67
|
+
}
|
68
|
+
|
69
|
+
def struct_fields; FIELDS; end
|
70
|
+
|
71
|
+
def validate
|
72
|
+
end
|
73
|
+
|
74
|
+
::Thrift::Struct.generate_accessors self
|
75
|
+
end
|
76
|
+
|
77
|
+
# An annotation is similar to a log statement. It includes a host field which
|
78
|
+
# allows these events to be attributed properly, and also aggregatable.
|
79
|
+
class Annotation
|
80
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
81
|
+
TIMESTAMP = 1
|
82
|
+
VALUE = 2
|
83
|
+
HOST = 3
|
84
|
+
|
85
|
+
FIELDS = {
|
86
|
+
# Microseconds from epoch.
|
87
|
+
#
|
88
|
+
# This value should use the most precise value possible. For example,
|
89
|
+
# gettimeofday or syncing nanoTime against a tick of currentTimeMillis.
|
90
|
+
TIMESTAMP => {:type => ::Thrift::Types::I64, :name => 'timestamp'},
|
91
|
+
VALUE => {:type => ::Thrift::Types::STRING, :name => 'value'},
|
92
|
+
# Always the host that recorded the event. By specifying the host you allow
|
93
|
+
# rollup of all events (such as client requests to a service) by IP address.
|
94
|
+
HOST => {:type => ::Thrift::Types::STRUCT, :name => 'host', :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Endpoint, :optional => true}
|
95
|
+
}
|
96
|
+
|
97
|
+
def struct_fields; FIELDS; end
|
98
|
+
|
99
|
+
def validate
|
100
|
+
end
|
101
|
+
|
102
|
+
::Thrift::Struct.generate_accessors self
|
103
|
+
end
|
104
|
+
|
105
|
+
# Binary annotations are tags applied to a Span to give it context. For
|
106
|
+
# example, a binary annotation of "http.uri" could the path to a resource in a
|
107
|
+
# RPC call.
|
108
|
+
#
|
109
|
+
# Binary annotations of type STRING are always queryable, though more a
|
110
|
+
# historical implementation detail than a structural concern.
|
111
|
+
#
|
112
|
+
# Binary annotations can repeat, and vary on the host. Similar to Annotation,
|
113
|
+
# the host indicates who logged the event. This allows you to tell the
|
114
|
+
# difference between the client and server side of the same key. For example,
|
115
|
+
# the key "http.uri" might be different on the client and server side due to
|
116
|
+
# rewriting, like "/api/v1/myresource" vs "/myresource. Via the host field,
|
117
|
+
# you can see the different points of view, which often help in debugging.
|
118
|
+
class BinaryAnnotation
|
119
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
120
|
+
KEY = 1
|
121
|
+
VALUE = 2
|
122
|
+
ANNOTATION_TYPE = 3
|
123
|
+
HOST = 4
|
124
|
+
|
125
|
+
FIELDS = {
|
126
|
+
KEY => {:type => ::Thrift::Types::STRING, :name => 'key'},
|
127
|
+
VALUE => {:type => ::Thrift::Types::STRING, :name => 'value', :binary => true},
|
128
|
+
ANNOTATION_TYPE => {:type => ::Thrift::Types::I32, :name => 'annotation_type', :enum_class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::AnnotationType},
|
129
|
+
# The host that recorded tag, which allows you to differentiate between
|
130
|
+
# multiple tags with the same key. There are two exceptions to this.
|
131
|
+
#
|
132
|
+
# When the key is CLIENT_ADDR or SERVER_ADDR, host indicates the source or
|
133
|
+
# destination of an RPC. This exception allows zipkin to display network
|
134
|
+
# context of uninstrumented services, or clients such as web browsers.
|
135
|
+
HOST => {:type => ::Thrift::Types::STRUCT, :name => 'host', :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Endpoint, :optional => true}
|
136
|
+
}
|
137
|
+
|
138
|
+
def struct_fields; FIELDS; end
|
139
|
+
|
140
|
+
def validate
|
141
|
+
unless @annotation_type.nil? || ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::AnnotationType::VALID_VALUES.include?(@annotation_type)
|
142
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field annotation_type!')
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
::Thrift::Struct.generate_accessors self
|
147
|
+
end
|
148
|
+
|
149
|
+
# A trace is a series of spans (often RPC calls) which form a latency tree.
|
150
|
+
#
|
151
|
+
# The root span is where trace_id = id and parent_id = Nil. The root span is
|
152
|
+
# usually the longest interval in the trace, starting with a SERVER_RECV
|
153
|
+
# annotation and ending with a SERVER_SEND.
|
154
|
+
class Span
|
155
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
156
|
+
TRACE_ID = 1
|
157
|
+
NAME = 3
|
158
|
+
ID = 4
|
159
|
+
PARENT_ID = 5
|
160
|
+
ANNOTATIONS = 6
|
161
|
+
BINARY_ANNOTATIONS = 8
|
162
|
+
DEBUG = 9
|
163
|
+
TIMESTAMP = 10
|
164
|
+
DURATION = 11
|
165
|
+
TRACE_ID_HIGH = 12
|
166
|
+
|
167
|
+
FIELDS = {
|
168
|
+
TRACE_ID => {:type => ::Thrift::Types::I64, :name => 'trace_id'},
|
169
|
+
# Span name in lowercase, rpc method for example
|
170
|
+
#
|
171
|
+
# Conventionally, when the span name isn't known, name = "unknown".
|
172
|
+
NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
|
173
|
+
ID => {:type => ::Thrift::Types::I64, :name => 'id'},
|
174
|
+
PARENT_ID => {:type => ::Thrift::Types::I64, :name => 'parent_id', :optional => true},
|
175
|
+
ANNOTATIONS => {:type => ::Thrift::Types::LIST, :name => 'annotations', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::Annotation}},
|
176
|
+
BINARY_ANNOTATIONS => {:type => ::Thrift::Types::LIST, :name => 'binary_annotations', :element => {:type => ::Thrift::Types::STRUCT, :class => ::OpenTelemetry::Exporters::Jaeger::Thrift::Zipkin::BinaryAnnotation}},
|
177
|
+
DEBUG => {:type => ::Thrift::Types::BOOL, :name => 'debug', :default => false, :optional => true},
|
178
|
+
# Microseconds from epoch of the creation of this span.
|
179
|
+
#
|
180
|
+
# This value should be set directly by instrumentation, using the most
|
181
|
+
# precise value possible. For example, gettimeofday or syncing nanoTime
|
182
|
+
# against a tick of currentTimeMillis.
|
183
|
+
#
|
184
|
+
# For compatibilty with instrumentation that precede this field, collectors
|
185
|
+
# or span stores can derive this via Annotation.timestamp.
|
186
|
+
# For example, SERVER_RECV.timestamp or CLIENT_SEND.timestamp.
|
187
|
+
#
|
188
|
+
# This field is optional for compatibility with old data: first-party span
|
189
|
+
# stores are expected to support this at time of introduction.
|
190
|
+
TIMESTAMP => {:type => ::Thrift::Types::I64, :name => 'timestamp', :optional => true},
|
191
|
+
# Measurement of duration in microseconds, used to support queries.
|
192
|
+
#
|
193
|
+
# This value should be set directly, where possible. Doing so encourages
|
194
|
+
# precise measurement decoupled from problems of clocks, such as skew or NTP
|
195
|
+
# updates causing time to move backwards.
|
196
|
+
#
|
197
|
+
# For compatibilty with instrumentation that precede this field, collectors
|
198
|
+
# or span stores can derive this by subtracting Annotation.timestamp.
|
199
|
+
# For example, SERVER_SEND.timestamp - SERVER_RECV.timestamp.
|
200
|
+
#
|
201
|
+
# If this field is persisted as unset, zipkin will continue to work, except
|
202
|
+
# duration query support will be implementation-specific. Similarly, setting
|
203
|
+
# this field non-atomically is implementation-specific.
|
204
|
+
#
|
205
|
+
# This field is i64 vs i32 to support spans longer than 35 minutes.
|
206
|
+
DURATION => {:type => ::Thrift::Types::I64, :name => 'duration', :optional => true},
|
207
|
+
# Optional unique 8-byte additional identifier for a trace. If non zero, this
|
208
|
+
# means the trace uses 128 bit traceIds instead of 64 bit.
|
209
|
+
TRACE_ID_HIGH => {:type => ::Thrift::Types::I64, :name => 'trace_id_high', :optional => true}
|
210
|
+
}
|
211
|
+
|
212
|
+
def struct_fields; FIELDS; end
|
213
|
+
|
214
|
+
def validate
|
215
|
+
end
|
216
|
+
|
217
|
+
::Thrift::Struct.generate_accessors self
|
218
|
+
end
|
219
|
+
|
220
|
+
class Response
|
221
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
222
|
+
OK = 1
|
223
|
+
|
224
|
+
FIELDS = {
|
225
|
+
OK => {:type => ::Thrift::Types::BOOL, :name => 'ok'}
|
226
|
+
}
|
227
|
+
|
228
|
+
def struct_fields; FIELDS; end
|
229
|
+
|
230
|
+
def validate
|
231
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field ok is unset!') if @ok.nil?
|
232
|
+
end
|
233
|
+
|
234
|
+
::Thrift::Struct.generate_accessors self
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-exporters-jaeger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentelemetry-api
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: thrift
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,11 +157,25 @@ executables: []
|
|
157
157
|
extensions: []
|
158
158
|
extra_rdoc_files: []
|
159
159
|
files:
|
160
|
+
- ".yardopts"
|
160
161
|
- CHANGELOG.md
|
161
162
|
- LICENSE
|
163
|
+
- README.md
|
164
|
+
- lib/opentelemetry-exporters-jaeger.rb
|
165
|
+
- lib/opentelemetry/exporters/jaeger.rb
|
162
166
|
- lib/opentelemetry/exporters/jaeger/exporter.rb
|
167
|
+
- lib/opentelemetry/exporters/jaeger/exporter/span_encoder.rb
|
163
168
|
- lib/opentelemetry/exporters/jaeger/transport.rb
|
164
169
|
- lib/opentelemetry/exporters/jaeger/version.rb
|
170
|
+
- thrift/gen-rb/agent.rb
|
171
|
+
- thrift/gen-rb/agent_constants.rb
|
172
|
+
- thrift/gen-rb/agent_types.rb
|
173
|
+
- thrift/gen-rb/collector.rb
|
174
|
+
- thrift/gen-rb/jaeger_constants.rb
|
175
|
+
- thrift/gen-rb/jaeger_types.rb
|
176
|
+
- thrift/gen-rb/zipkin_collector.rb
|
177
|
+
- thrift/gen-rb/zipkincore_constants.rb
|
178
|
+
- thrift/gen-rb/zipkincore_types.rb
|
165
179
|
homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
166
180
|
licenses:
|
167
181
|
- Apache-2.0
|