honeycomb-beeline 1.3.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "securerandom"
4
3
  require "forwardable"
4
+ require "securerandom"
5
5
  require "honeycomb/propagation"
6
6
  require "honeycomb/deterministic_sampler"
7
7
  require "honeycomb/rollup_fields"
@@ -24,7 +24,7 @@ module Honeycomb
24
24
  builder:,
25
25
  context:,
26
26
  **options)
27
- @id = SecureRandom.uuid
27
+ @id = generate_span_id
28
28
  @context = context
29
29
  @context.current_span = self
30
30
  @builder = builder
@@ -36,11 +36,16 @@ module Honeycomb
36
36
  parse_options(**options)
37
37
  end
38
38
 
39
- def parse_options(parent_id: nil,
39
+ def parse_options(parent: nil,
40
+ parent_id: nil,
40
41
  is_root: parent_id.nil?,
41
42
  sample_hook: nil,
42
43
  presend_hook: nil,
43
44
  **_options)
45
+ @parent = parent
46
+ # parent_id should be removed in the next major version bump. It has been
47
+ # replaced with passing the actual parent in. This is kept for backwards
48
+ # compatability
44
49
  @parent_id = parent_id
45
50
  @is_root = is_root
46
51
  @presend_hook = presend_hook
@@ -51,6 +56,7 @@ module Honeycomb
51
56
  self.class.new(trace: trace,
52
57
  builder: builder,
53
58
  context: context,
59
+ parent: self,
54
60
  parent_id: id,
55
61
  sample_hook: sample_hook,
56
62
  presend_hook: presend_hook).tap do |c|
@@ -73,9 +79,16 @@ module Honeycomb
73
79
  send_internal
74
80
  end
75
81
 
82
+ def remove_child(child)
83
+ children.delete child
84
+ end
85
+
76
86
  private
77
87
 
88
+ INVALID_SPAN_ID = ("00" * 8)
89
+
78
90
  attr_reader :event,
91
+ :parent,
79
92
  :parent_id,
80
93
  :children,
81
94
  :builder,
@@ -92,14 +105,7 @@ module Honeycomb
92
105
  end
93
106
 
94
107
  def send_internal
95
- add_field "duration_ms", duration_ms
96
- add_field "trace.trace_id", trace.id
97
- add_field "trace.span_id", id
98
- add_field "meta.span_type", span_type
99
- parent_id && add_field("trace.parent_id", parent_id)
100
- add rollup_fields
101
- add trace.fields
102
- span_type == "root" && add(trace.rollup_fields)
108
+ add_additional_fields
103
109
  send_children
104
110
  sample = true
105
111
  if sample_hook.nil?
@@ -114,6 +120,19 @@ module Honeycomb
114
120
  end
115
121
  @sent = true
116
122
  context.span_sent(self)
123
+
124
+ parent && parent.remove_child(self)
125
+ end
126
+
127
+ def add_additional_fields
128
+ add_field "duration_ms", duration_ms
129
+ add_field "trace.trace_id", trace.id
130
+ add_field "trace.span_id", id
131
+ add_field "meta.span_type", span_type
132
+ parent_id && add_field("trace.parent_id", parent_id)
133
+ add rollup_fields
134
+ add trace.fields
135
+ span_type == "root" && add(trace.rollup_fields)
117
136
  end
118
137
 
119
138
  def send_children
@@ -139,5 +158,12 @@ module Honeycomb
139
158
  "mid"
140
159
  end
141
160
  end
161
+
162
+ def generate_span_id
163
+ loop do
164
+ id = SecureRandom.hex(8)
165
+ return id unless id == INVALID_SPAN_ID
166
+ end
167
+ end
142
168
  end
143
169
  end
@@ -21,7 +21,7 @@ module Honeycomb
21
21
  trace_id, parent_span_id, trace_fields, dataset =
22
22
  parse serialized_trace
23
23
  dataset && builder.dataset = dataset
24
- @id = trace_id || SecureRandom.uuid
24
+ @id = trace_id || generate_trace_id
25
25
  @fields = trace_fields || {}
26
26
  @root_span = Span.new(trace: self,
27
27
  parent_id: parent_span_id,
@@ -34,5 +34,16 @@ module Honeycomb
34
34
  def add_field(key, value)
35
35
  @fields[key] = value
36
36
  end
37
+
38
+ private
39
+
40
+ INVALID_TRACE_ID = ("00" * 16)
41
+
42
+ def generate_trace_id
43
+ loop do
44
+ id = SecureRandom.hex(16)
45
+ return id unless id == INVALID_TRACE_ID
46
+ end
47
+ end
37
48
  end
38
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeycomb-beeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Holman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-20 00:00:00.000000000 Z
11
+ date: 2020-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libhoney
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.14'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.14.2
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.8'
29
+ version: '1.14'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.14.2
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: appraisal
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +72,20 @@ dependencies:
66
72
  - - ">="
67
73
  - !ruby/object:Gem::Version
68
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: codecov
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: overcommit
71
91
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +100,34 @@ dependencies:
80
100
  - - "~>"
81
101
  - !ruby/object:Gem::Version
82
102
  version: 0.46.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: pry
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "<"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.13.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.13.0
83
117
  - !ruby/object:Gem::Dependency
84
118
  name: pry-byebug
85
119
  requirement: !ruby/object:Gem::Requirement
86
120
  requirements:
87
- - - ">="
121
+ - - "~>"
88
122
  - !ruby/object:Gem::Version
89
- version: '0'
123
+ version: 3.6.0
90
124
  type: :development
91
125
  prerelease: false
92
126
  version_requirements: !ruby/object:Gem::Requirement
93
127
  requirements:
94
- - - ">="
128
+ - - "~>"
95
129
  - !ruby/object:Gem::Version
96
- version: '0'
130
+ version: 3.6.0
97
131
  - !ruby/object:Gem::Dependency
98
132
  name: rake
99
133
  requirement: !ruby/object:Gem::Requirement
@@ -202,6 +236,7 @@ files:
202
236
  - ".circleci/bundler_version.sh"
203
237
  - ".circleci/config.yml"
204
238
  - ".circleci/setup-rubygems.sh"
239
+ - ".github/CODEOWNERS"
205
240
  - ".gitignore"
206
241
  - ".overcommit.yml"
207
242
  - ".rspec"
@@ -238,6 +273,9 @@ files:
238
273
  - lib/honeycomb/integrations/sinatra.rb
239
274
  - lib/honeycomb/integrations/warden.rb
240
275
  - lib/honeycomb/propagation.rb
276
+ - lib/honeycomb/propagation/aws.rb
277
+ - lib/honeycomb/propagation/honeycomb.rb
278
+ - lib/honeycomb/propagation/w3c.rb
241
279
  - lib/honeycomb/rollup_fields.rb
242
280
  - lib/honeycomb/span.rb
243
281
  - lib/honeycomb/trace.rb