polyn 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -0
- data/Gemfile.lock +16 -1
- data/README.md +6 -9
- data/lib/cloud-event-schema.json +41 -43
- data/lib/polyn/event.rb +10 -19
- data/lib/polyn/nats.rb +2 -0
- data/lib/polyn/pull_subscriber.rb +27 -11
- data/lib/polyn/tracing.rb +81 -0
- data/lib/polyn/version.rb +1 -1
- data/lib/polyn.rb +39 -18
- data/polyn.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3ccd094b68ccf93066ade4f7b3348e1048be916d1f220c4602abbf1884855f6
|
4
|
+
data.tar.gz: 06c13d39dbf4804d41a57754816338271ff2b1cdfdb4332cddfd46f07ecc3451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e7d51c4bea9a4f3910e0b209c34dd6281dea5df05b1bef6bcb580c824c65c5a20776486787a91e706472833ffbdb13be83bf7f30fbabdd8f5dd8ef95e4ff15b
|
7
|
+
data.tar.gz: 2b800e2e958a7e30c41720576b0c96b7f1f3f654bb08e6b97198aa3f2364095d17849ec2dbe080387496b2bcf40b35795b8051d92d48315c821d3d8d93cc7119
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
polyn (0.
|
4
|
+
polyn (0.3.0)
|
5
5
|
json_schemer (~> 0.2)
|
6
6
|
nats-pure (~> 2.0)
|
7
|
+
opentelemetry-api (~> 1.1)
|
7
8
|
yard (~> 0.9)
|
8
9
|
|
9
10
|
GEM
|
@@ -21,6 +22,18 @@ GEM
|
|
21
22
|
regexp_parser (~> 2.0)
|
22
23
|
uri_template (~> 0.7)
|
23
24
|
nats-pure (2.1.2)
|
25
|
+
opentelemetry-api (1.1.0)
|
26
|
+
opentelemetry-common (0.19.6)
|
27
|
+
opentelemetry-api (~> 1.0)
|
28
|
+
opentelemetry-registry (0.2.0)
|
29
|
+
opentelemetry-api (~> 1.1)
|
30
|
+
opentelemetry-sdk (1.2.0)
|
31
|
+
opentelemetry-api (~> 1.1)
|
32
|
+
opentelemetry-common (~> 0.19.3)
|
33
|
+
opentelemetry-registry (~> 0.2)
|
34
|
+
opentelemetry-semantic_conventions
|
35
|
+
opentelemetry-semantic_conventions (1.8.0)
|
36
|
+
opentelemetry-api (~> 1.0)
|
24
37
|
parallel (1.21.0)
|
25
38
|
parser (3.0.2.0)
|
26
39
|
ast (~> 2.4.1)
|
@@ -75,6 +88,8 @@ PLATFORMS
|
|
75
88
|
DEPENDENCIES
|
76
89
|
json_schemer
|
77
90
|
nats-pure (~> 2.0)
|
91
|
+
opentelemetry-api (~> 1.1)
|
92
|
+
opentelemetry-sdk (~> 1.2)
|
78
93
|
polyn!
|
79
94
|
rake (~> 13.0)
|
80
95
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -78,15 +78,6 @@ Add `:source` to make the `source` of the event more specific
|
|
78
78
|
polyn.publish("user.created.v1", { name: "Mary" }, source: "new.users")
|
79
79
|
```
|
80
80
|
|
81
|
-
Add `:triggered_by` to add a triggering event to the `polyntrace`
|
82
|
-
|
83
|
-
```ruby
|
84
|
-
polyn = Polyn.connect(nats)
|
85
|
-
|
86
|
-
event = Polyn::Event.new
|
87
|
-
polyn.publish("user.created.v1", { name: "Mary" }, triggered_by: event)
|
88
|
-
```
|
89
|
-
|
90
81
|
You can also include options of `:header` and/or `:reply_to` to passthrough to NATS
|
91
82
|
|
92
83
|
### Consuming a Stream
|
@@ -165,6 +156,12 @@ Despite mocking some NATS functionality you will still need a running nats-serve
|
|
165
156
|
When the tests start it will load all your schemas. The tests themselves will also use the running server to verify
|
166
157
|
stream and consumer configuration information. This hybrid mocking approach is intended to give isolation and reliability while also ensuring correct integration.
|
167
158
|
|
159
|
+
## Observability
|
160
|
+
|
161
|
+
### Tracing
|
162
|
+
|
163
|
+
Polyn uses [OpenTelemetry](https://opentelemetry.io/) to create distributed traces that will connect sent and received events in different services. Your application will need the [`opentelemetry-sdk` gem](https://opentelemetry.io/docs/instrumentation/ruby/getting-started/) installed to collect the trace information.
|
164
|
+
|
168
165
|
## Development
|
169
166
|
|
170
167
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
data/lib/cloud-event-schema.json
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
"source": {
|
14
14
|
"description": "Identifies the context in which an event happened.",
|
15
15
|
"$ref": "#/definitions/sourcedef",
|
16
|
-
"examples"
|
16
|
+
"examples": [
|
17
17
|
"https://github.com/cloudevents",
|
18
18
|
"mailto:cncf-wg-serverless@lists.cncf.io",
|
19
19
|
"urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66",
|
@@ -32,7 +32,7 @@
|
|
32
32
|
"type": {
|
33
33
|
"description": "Describes the type of event related to the originating occurrence.",
|
34
34
|
"$ref": "#/definitions/typedef",
|
35
|
-
"examples"
|
35
|
+
"examples": [
|
36
36
|
"com.github.pull_request.opened",
|
37
37
|
"com.example.object.deleted.v2"
|
38
38
|
]
|
@@ -89,22 +89,14 @@
|
|
89
89
|
"clientversion": "0.1.0"
|
90
90
|
}
|
91
91
|
]
|
92
|
-
},
|
93
|
-
"polyntrace": {
|
94
|
-
"$ref": "#/definitions/polyntracedef",
|
95
|
-
"description": "Previous events that led to this one",
|
96
|
-
"examples": [
|
97
|
-
[
|
98
|
-
{
|
99
|
-
"type": "<topic>",
|
100
|
-
"time": "2018-04-05T17:31:00Z",
|
101
|
-
"id": "<uuid>"
|
102
|
-
}
|
103
|
-
]
|
104
|
-
]
|
105
92
|
}
|
106
93
|
},
|
107
|
-
"required": [
|
94
|
+
"required": [
|
95
|
+
"id",
|
96
|
+
"source",
|
97
|
+
"specversion",
|
98
|
+
"type"
|
99
|
+
],
|
108
100
|
"definitions": {
|
109
101
|
"iddef": {
|
110
102
|
"type": "string",
|
@@ -124,28 +116,50 @@
|
|
124
116
|
"minLength": 1
|
125
117
|
},
|
126
118
|
"datacontenttypedef": {
|
127
|
-
"type": [
|
119
|
+
"type": [
|
120
|
+
"string",
|
121
|
+
"null"
|
122
|
+
],
|
128
123
|
"minLength": 1
|
129
124
|
},
|
130
125
|
"dataschemadef": {
|
131
|
-
"type": [
|
126
|
+
"type": [
|
127
|
+
"string",
|
128
|
+
"null"
|
129
|
+
],
|
132
130
|
"format": "uri",
|
133
131
|
"minLength": 1
|
134
132
|
},
|
135
133
|
"subjectdef": {
|
136
|
-
"type": [
|
134
|
+
"type": [
|
135
|
+
"string",
|
136
|
+
"null"
|
137
|
+
],
|
137
138
|
"minLength": 1
|
138
139
|
},
|
139
140
|
"timedef": {
|
140
|
-
"type": [
|
141
|
+
"type": [
|
142
|
+
"string",
|
143
|
+
"null"
|
144
|
+
],
|
141
145
|
"format": "date-time",
|
142
146
|
"minLength": 1
|
143
147
|
},
|
144
148
|
"datadef": {
|
145
|
-
"type": [
|
149
|
+
"type": [
|
150
|
+
"object",
|
151
|
+
"string",
|
152
|
+
"number",
|
153
|
+
"array",
|
154
|
+
"boolean",
|
155
|
+
"null"
|
156
|
+
]
|
146
157
|
},
|
147
158
|
"data_base64def": {
|
148
|
-
"type": [
|
159
|
+
"type": [
|
160
|
+
"string",
|
161
|
+
"null"
|
162
|
+
],
|
149
163
|
"contentEncoding": "base64"
|
150
164
|
},
|
151
165
|
"polyndatadef": {
|
@@ -161,27 +175,11 @@
|
|
161
175
|
"type": "string"
|
162
176
|
}
|
163
177
|
},
|
164
|
-
"required": [
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
"type": "object",
|
170
|
-
"properties": {
|
171
|
-
"type": {
|
172
|
-
"type": "string"
|
173
|
-
},
|
174
|
-
"time": {
|
175
|
-
"type": "string",
|
176
|
-
"format": "date-time"
|
177
|
-
},
|
178
|
-
"id" : {
|
179
|
-
"type": "string",
|
180
|
-
"format": "uuid"
|
181
|
-
}
|
182
|
-
},
|
183
|
-
"required": ["type", "time", "id"]
|
184
|
-
}
|
178
|
+
"required": [
|
179
|
+
"clientlang",
|
180
|
+
"clientlangversion",
|
181
|
+
"clientversion"
|
182
|
+
]
|
185
183
|
}
|
186
184
|
}
|
187
185
|
}
|
data/lib/polyn/event.rb
CHANGED
@@ -76,7 +76,6 @@ module Polyn
|
|
76
76
|
@time = hash.fetch(:time, Time.now.utc.iso8601)
|
77
77
|
@data = hash.fetch(:data)
|
78
78
|
@datacontenttype = hash.fetch(:datacontenttype, "application/json")
|
79
|
-
@polyntrace = self.class.build_polyntrace(hash[:triggered_by])
|
80
79
|
@polyndata = {
|
81
80
|
clientlang: "ruby",
|
82
81
|
clientlangversion: RUBY_VERSION,
|
@@ -93,7 +92,6 @@ module Polyn
|
|
93
92
|
"time" => time,
|
94
93
|
"data" => Utils::Hash.deep_stringify_keys(data),
|
95
94
|
"datacontenttype" => datacontenttype,
|
96
|
-
"polyntrace" => Utils::Hash.deep_stringify_keys(polyntrace),
|
97
95
|
"polyndata" => Utils::Hash.deep_stringify_keys(polyndata),
|
98
96
|
}
|
99
97
|
end
|
@@ -101,15 +99,20 @@ module Polyn
|
|
101
99
|
##
|
102
100
|
# Get the Event `source` prefixed with reverse domain name
|
103
101
|
def self.full_source(source = nil)
|
104
|
-
root
|
105
|
-
|
102
|
+
root = Polyn.configuration.source_root
|
103
|
+
parts = [domain, root]
|
104
|
+
combine = lambda do |items|
|
105
|
+
items.map { |part| Polyn::Naming.dot_to_colon(part) }.join(":")
|
106
|
+
end
|
107
|
+
name = combine.call(parts)
|
106
108
|
|
107
109
|
if source
|
108
110
|
Polyn::Naming.validate_source_name!(source)
|
109
|
-
|
110
|
-
|
111
|
-
name
|
111
|
+
source = source.gsub(/(#{name}){1}:?/, "")
|
112
|
+
parts << source unless source.empty?
|
112
113
|
end
|
114
|
+
|
115
|
+
combine.call(parts)
|
113
116
|
end
|
114
117
|
|
115
118
|
##
|
@@ -119,18 +122,6 @@ module Polyn
|
|
119
122
|
"#{domain}.#{Polyn::Naming.trim_domain_prefix(type)}"
|
120
123
|
end
|
121
124
|
|
122
|
-
##
|
123
|
-
# Use a triggering event to build the polyntrace of a new event
|
124
|
-
def self.build_polyntrace(triggered_by)
|
125
|
-
return [] unless triggered_by
|
126
|
-
|
127
|
-
triggered_by.polyntrace.concat([{
|
128
|
-
id: triggered_by.id,
|
129
|
-
type: triggered_by.type,
|
130
|
-
time: triggered_by.time,
|
131
|
-
}])
|
132
|
-
end
|
133
|
-
|
134
125
|
def self.domain
|
135
126
|
Polyn.configuration.domain
|
136
127
|
end
|
data/lib/polyn/nats.rb
CHANGED
@@ -11,8 +11,7 @@ module Polyn
|
|
11
11
|
# is more than the `source_root`
|
12
12
|
def initialize(fields)
|
13
13
|
@nats = fields.fetch(:nats)
|
14
|
-
@type = fields.fetch(:type)
|
15
|
-
@type = Polyn::Naming.trim_domain_prefix(@type)
|
14
|
+
@type = Polyn::Naming.trim_domain_prefix(fields.fetch(:type))
|
16
15
|
@consumer_name = Polyn::Naming.consumer_name(@type, fields[:source])
|
17
16
|
@stream = @nats.jetstream.find_stream_name_by_subject(@type)
|
18
17
|
self.class.validate_consumer_exists!(@nats, @stream, @consumer_name)
|
@@ -39,18 +38,35 @@ module Polyn
|
|
39
38
|
# @option params [Float] :timeout Duration of the fetch request before it expires.
|
40
39
|
# @return [Array<NATS::Msg>]
|
41
40
|
def fetch(batch = 1, params = {})
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
Polyn::Tracing.processing_span(@type) do |process_span|
|
42
|
+
msgs = @psub.fetch(batch, params)
|
43
|
+
msgs.map do |msg|
|
44
|
+
Polyn::Tracing.subscribe_span(@type, msg, links: [process_span]) do |span|
|
45
|
+
updated_msg = process_message(msg)
|
46
|
+
Polyn::Tracing.span_attributes(span,
|
47
|
+
nats: @nats,
|
48
|
+
type: @type,
|
49
|
+
event: updated_msg.data,
|
50
|
+
payload: msg.data)
|
51
|
+
updated_msg
|
52
|
+
end
|
49
53
|
end
|
54
|
+
end
|
55
|
+
end
|
50
56
|
|
51
|
-
|
52
|
-
|
57
|
+
private
|
58
|
+
|
59
|
+
def process_message(msg)
|
60
|
+
msg = msg.clone
|
61
|
+
msg = Polyn::Nats::Msg.new(msg)
|
62
|
+
event = @serializer.deserialize(msg.data)
|
63
|
+
if event.is_a?(Polyn::Errors::Error)
|
64
|
+
msg.term
|
65
|
+
raise event
|
53
66
|
end
|
67
|
+
|
68
|
+
msg.data = event
|
69
|
+
msg
|
54
70
|
end
|
55
71
|
end
|
56
72
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Polyn
|
4
|
+
##
|
5
|
+
# Methods to enable distributed tracing across services
|
6
|
+
# Attempts to follow OpenTelemetry conventions
|
7
|
+
# https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/messaging/
|
8
|
+
class Tracing
|
9
|
+
##
|
10
|
+
# Tracer object to use to start a trace
|
11
|
+
def self.tracer
|
12
|
+
::OpenTelemetry.tracer_provider.tracer("polyn", Polyn::VERSION)
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Common attributes to add to a span involving an individual message
|
17
|
+
# https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/messaging/#messaging-attributes
|
18
|
+
def self.span_attributes(span, nats:, type:, event:, payload:)
|
19
|
+
span.add_attributes({
|
20
|
+
"messaging.system" => "NATS",
|
21
|
+
"messaging.destination" => type,
|
22
|
+
"messaging.protocol" => "Polyn",
|
23
|
+
"messaging.url" => nats.uri.to_s,
|
24
|
+
"messaging.message_id" => event.id,
|
25
|
+
"messaging.message_payload_size_bytes" => payload.bytesize,
|
26
|
+
})
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Uses the message header to extract trace information from the
|
31
|
+
# published message so the subscription handler can use it as
|
32
|
+
# the parent span. This will allow us to create a distributed
|
33
|
+
# trace between publications and subscriptions. It's expecting a
|
34
|
+
# `traceparent` header to be set on the message
|
35
|
+
# https://www.w3.org/TR/trace-context/#traceparent-header
|
36
|
+
def self.connect_span_with_received_message(msg, &block)
|
37
|
+
context = OpenTelemetry.propagation.extract(msg.header)
|
38
|
+
::OpenTelemetry::Context.with_current(context, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Add a `traceparent` header to the headers for a message so that the
|
43
|
+
# subscribers can be connected with it
|
44
|
+
# https://www.w3.org/TR/trace-context/#traceparent-header
|
45
|
+
def self.trace_header(headers = {})
|
46
|
+
::OpenTelemetry.propagation.inject(headers)
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Start a span for publishing an event
|
51
|
+
def self.publish_span(type, &block)
|
52
|
+
tracer.in_span("#{type} send", kind: "PRODUCER", &block)
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Start a span for handling a received event
|
57
|
+
def self.subscribe_span(type, msg, links: nil, &block)
|
58
|
+
connect_span_with_received_message(msg) do
|
59
|
+
tracer.in_span("#{type} receive", kind: "CONSUMER", links: convert_links(links), &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Start a span to handle processing of batch messages
|
65
|
+
def self.processing_span(type, &block)
|
66
|
+
tracer.in_span("#{type} process", kind: "CONSUMER", &block)
|
67
|
+
end
|
68
|
+
|
69
|
+
class << self
|
70
|
+
private
|
71
|
+
|
72
|
+
def convert_links(links)
|
73
|
+
links.map { |link| create_span_link(link) } if links
|
74
|
+
end
|
75
|
+
|
76
|
+
def create_span_link(span)
|
77
|
+
::OpenTelemetry::Trace::Link.new(span.context)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/polyn/version.rb
CHANGED
data/lib/polyn.rb
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
require "json_schemer"
|
22
22
|
require "json"
|
23
23
|
require "nats/client"
|
24
|
+
require "opentelemetry"
|
24
25
|
require "securerandom"
|
25
26
|
|
26
27
|
require "polyn/configuration"
|
@@ -34,6 +35,8 @@ require "polyn/nats/jetstream/api/consumer_config"
|
|
34
35
|
require "polyn/pull_subscriber"
|
35
36
|
require "polyn/schema_store"
|
36
37
|
require "polyn/serializers/json"
|
38
|
+
require "polyn/testing/mock_nats"
|
39
|
+
require "polyn/tracing"
|
37
40
|
require "polyn/utils/utils"
|
38
41
|
require "polyn/version"
|
39
42
|
|
@@ -77,27 +80,29 @@ module Polyn
|
|
77
80
|
# @param type [String] The type of event
|
78
81
|
# @param data [any] The data to include in the event
|
79
82
|
# @option options [String] :source - information to specify the source of the event
|
80
|
-
# @option options [String] :triggered_by - The event that triggered this one.
|
81
83
|
# Will use information from the event to build up the `polyntrace` data
|
82
84
|
# @option options [String] :reply_to - Reply to a specific topic
|
83
85
|
# @option options [String] :header - Headers to include in the message
|
84
86
|
def publish(type, data, **opts)
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
Polyn::Tracing.publish_span(type) do |span|
|
88
|
+
event = Event.new({
|
89
|
+
type: type,
|
90
|
+
source: opts[:source],
|
91
|
+
data: data,
|
92
|
+
})
|
91
93
|
|
92
|
-
|
93
|
-
# https://docs.nats.io/using-nats/developer/develop_jetstream/model_deep_dive#message-deduplication
|
94
|
-
msg_id_header = { "Nats-Msg-Id" => event.id }
|
95
|
-
header = opts.fetch(:header, {})
|
96
|
-
header = msg_id_header.merge(header)
|
94
|
+
json = @serializer.serialize!(event)
|
97
95
|
|
98
|
-
|
96
|
+
Polyn::Tracing.span_attributes(span,
|
97
|
+
nats: @nats.nats,
|
98
|
+
type: type,
|
99
|
+
event: event,
|
100
|
+
payload: json)
|
99
101
|
|
100
|
-
|
102
|
+
header = add_headers(opts.fetch(:header, {}), event)
|
103
|
+
|
104
|
+
@nats.publish(type, json, opts[:reply_to], header: header)
|
105
|
+
end
|
101
106
|
end
|
102
107
|
|
103
108
|
## Create subscription which is dispatched asynchronously
|
@@ -110,9 +115,18 @@ module Polyn
|
|
110
115
|
# @option options [String] :pending_bytes_limit
|
111
116
|
def subscribe(type, opts = {}, &callback)
|
112
117
|
@nats.subscribe(type, opts) do |msg|
|
113
|
-
|
114
|
-
|
115
|
-
|
118
|
+
Polyn::Tracing.subscribe_span(type, msg) do |span|
|
119
|
+
event = @serializer.deserialize!(msg.data)
|
120
|
+
|
121
|
+
Polyn::Tracing.span_attributes(span,
|
122
|
+
nats: @nats.nats,
|
123
|
+
type: type,
|
124
|
+
event: event,
|
125
|
+
payload: msg.data)
|
126
|
+
|
127
|
+
msg.data = event
|
128
|
+
callback.call(msg)
|
129
|
+
end
|
116
130
|
end
|
117
131
|
end
|
118
132
|
|
@@ -148,10 +162,17 @@ module Polyn
|
|
148
162
|
# NATS connection class to use based on environment
|
149
163
|
def nats_class
|
150
164
|
if Polyn.configuration.polyn_env == "test"
|
151
|
-
Polyn::MockNats
|
165
|
+
Polyn::Testing::MockNats
|
152
166
|
else
|
153
167
|
Polyn::Nats
|
154
168
|
end
|
155
169
|
end
|
170
|
+
|
171
|
+
def add_headers(headers, event)
|
172
|
+
Polyn::Tracing.trace_header(headers)
|
173
|
+
# Ensure accidental message duplication doesn't happen
|
174
|
+
# https://docs.nats.io/using-nats/developer/develop_jetstream/model_deep_dive#message-deduplication
|
175
|
+
{ "Nats-Msg-Id" => event.id }.merge(headers)
|
176
|
+
end
|
156
177
|
end
|
157
178
|
end
|
data/polyn.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jarod
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json_schemer
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '2.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: opentelemetry-api
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '1.1'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.1'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: yard
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,6 +113,7 @@ files:
|
|
99
113
|
- lib/polyn/testing/mock_msg.rb
|
100
114
|
- lib/polyn/testing/mock_nats.rb
|
101
115
|
- lib/polyn/testing/mock_pull_subscription.rb
|
116
|
+
- lib/polyn/tracing.rb
|
102
117
|
- lib/polyn/utils/hash.rb
|
103
118
|
- lib/polyn/utils/string.rb
|
104
119
|
- lib/polyn/utils/utils.rb
|