honeykiq 1.1.0 → 1.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29a3d18dbdcd28d505474e7066089b0bbde7b9db3faa0b994fbc0e54fa412dc2
4
- data.tar.gz: b31189efcefaabde05722510097b1ad746c92f542f4e749993c94d775223af9e
3
+ metadata.gz: 2c9a6072b8c9974a8d827bdc0e6328f7e1a3b7a7846c14c3424133ad2be5acb3
4
+ data.tar.gz: ef8be2c82f467703e1eabb3da9d7511a7ea519f11c0b4867035137066d247093
5
5
  SHA512:
6
- metadata.gz: '0495bb5f2d2ba5f2848e4dbe8a58c4d8d97c7c905bca2d33b2692a33ac33ad56ec49ff0368a52f0bbc8265ea971e356a49237bd8aa006efcbc40245110362667'
7
- data.tar.gz: 7c702869ffdcc5bedcad9145c3d9979a63d96fa8540b01140272ee743d5b825839ace3dfe478fc2f2b7762ea31050b69001720f8d4dd790d82e47e44f7031730
6
+ metadata.gz: c573ee6a0a868bbff1064ae9ef2a3218798e436438119042fefd254c9cf9cb6eaeba03038e94b875d6a5c515127d170db06e41adce409f05c35c841ab8cfe031
7
+ data.tar.gz: 84cc2b765a47bac4374c8e24760e72307f082bec3901f01882e091065e9aec6556f6cc24c9916f005509ccb249b0ace2b4b56c4c5235e1d194aa8d6ac1bbb959
data/.circleci/config.yml CHANGED
@@ -1,54 +1,23 @@
1
- ruby: &ruby
2
- image: carwow/ruby-ci:2.6
3
-
4
- version: 2
1
+ version: 2.1
5
2
 
6
3
  jobs:
7
- bundle:
8
- working_directory: ~/honeykiq
4
+ test:
5
+ parameters:
6
+ ruby:
7
+ type: string
9
8
  docker:
10
- - *ruby
9
+ - image: 'cimg/ruby:<< parameters.ruby >>'
11
10
  steps:
12
11
  - checkout
13
- - restore_cache:
14
- keys:
15
- - bundle-{{ checksum "Gemfile.lock" }}
16
- - bundle-
17
- - run: |
18
- bundle config --local path vendor/bundle &&
19
- bundle check || bundle install --jobs=4 --retry=3
20
- - save_cache:
21
- key: bundle-{{ checksum "Gemfile.lock" }}
22
- paths: [~/honeykiq/vendor/bundle]
23
- - persist_to_workspace:
24
- root: '~'
25
- paths: [honeykiq]
26
-
27
- rubocop:
28
- working_directory: ~/honeykiq
29
- docker:
30
- - *ruby
31
- steps:
32
- - attach_workspace:
33
- at: '~'
34
- - run: bundle exec rubocop
35
-
36
- tests:
37
- working_directory: ~/honeykiq
38
- docker:
39
- - *ruby
40
- steps:
41
- - attach_workspace:
42
- at: '~'
43
- - run: |
44
- bundle exec rspec
12
+ - run: bundle install
13
+ - run: bundle exec rspec
14
+ - run: bundle exec standardrb
45
15
 
46
16
  workflows:
47
17
  version: 2
48
- build:
18
+ test:
49
19
  jobs:
50
- - bundle
51
- - rubocop:
52
- requires: [bundle]
53
- - tests:
54
- requires: [bundle]
20
+ - test:
21
+ matrix:
22
+ parameters:
23
+ ruby: ["2.7", "2.6"]
data/.gitignore CHANGED
@@ -4,8 +4,7 @@
4
4
  /coverage/
5
5
  /doc/
6
6
  /pkg/
7
+ /spec/examples.txt
7
8
  /spec/reports/
8
9
  /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
10
+ /Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -6,6 +6,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.4.1]
10
+ ### Fixed
11
+ - Expand sidekiq version constraint
12
+
13
+ ## [1.4.0]
14
+ ### Added
15
+ - Support for `:child_trace` mode (#19)
16
+
17
+ ### Fixed
18
+ - Support sidekiq v6.2.2 (#23)
19
+ - Link events respect beeline sampling (#17)
20
+ WARNING: This is technically a breaking change since it now sends
21
+ `meta.annotation_type` field instead of `meta.span_type` for the link event,
22
+ but `meta.span_type` is deprecated for annotation events since it already has
23
+ another use case which the beeline uses. I believe no one is actually using
24
+ link events anyway. If you run into problems and need help, open an issue.
25
+
26
+ ## [1.3.0]
27
+ ### Added
28
+ - Allow beeline tracing to be configured (#11)
29
+
30
+ ## [1.2.0]
31
+ ### Added
32
+ - Allow extra_fields to be invoked with job (#16)
33
+
9
34
  ## [1.1.0]
10
35
  ### Added
11
36
  - Honeycomb beeline support (#9)
@@ -33,7 +58,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
33
58
  ### Removed
34
59
  - `Honeykiq.periodic_reporter`. (Use `Honeykiq::PeriodicReporter.new` instead.)
35
60
 
36
- [Unreleased]: https://github.com/carwow/honeykiq/compare/v1.1.0...HEAD
61
+ [Unreleased]: https://github.com/carwow/honeykiq/compare/v1.4.1...HEAD
62
+ [1.4.1]: https://github.com/carwow/honeykiq/compare/v1.4.0...v1.4.1
63
+ [1.4.0]: https://github.com/carwow/honeykiq/compare/v1.3.0...v1.4.0
64
+ [1.3.0]: https://github.com/carwow/honeykiq/compare/v1.2.0...v1.3.0
65
+ [1.2.0]: https://github.com/carwow/honeykiq/compare/v1.1.0...v1.2.0
37
66
  [1.1.0]: https://github.com/carwow/honeykiq/compare/v1.0.0...v1.1.0
38
67
  [1.0.0]: https://github.com/carwow/honeykiq/compare/v0.3.1...v1.0.0
39
68
  [0.3.1]: https://github.com/carwow/honeykiq/compare/v0.3.0...v0.3.1
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in honeykiq.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -15,14 +15,67 @@ gem 'honeykiq'
15
15
 
16
16
  ## Usage
17
17
 
18
- The library provides two use cases:
18
+ The library provides three use cases:
19
19
 
20
+ - [`Honeykiq::ClientMiddleware`]
20
21
  - [`Honeykiq::ServerMiddleware`]
21
22
  - [`Honeykiq::PeriodicReporter`]
22
23
 
24
+ [`Honeykiq::ClientMiddleware`]: #HoneykiqClientMiddleware
23
25
  [`Honeykiq::ServerMiddleware`]: #HoneykiqServerMiddleware
24
26
  [`Honeykiq::PeriodicReporter`]: #HoneykiqPeriodicReporter
25
27
 
28
+ ### Honeykiq::ClientMiddleware
29
+
30
+ Add Honeykiq to your Sidekiq client middleware chain. It will propagate tracing
31
+ fields when used in combination with `Honeykiq::ServerMiddleware`.
32
+
33
+ This middleware is **only** configured to work with the `Honeycomb` beeline gem,
34
+ not with a custom `Libhoney` client.
35
+
36
+ ```ruby
37
+ # Configure Honeycomb beeline
38
+ Honeycomb.configure do |config|
39
+ config.write_key = ENV.fetch('HONEYCOMB_WRITE_KEY')
40
+ config.dataset = ENV.fetch('HONEYCOMB_DATASET')
41
+ end
42
+
43
+ # Add the middleware to Sidekiq chain
44
+ Sidekiq.configure_client do |config|
45
+ config.client_middleware do |chain|
46
+ chain.add Honeykiq::ClientMiddleware
47
+ end
48
+ end
49
+
50
+ # Also add it to the server client chain
51
+ Sidekiq.configure_server do |config|
52
+ # Configure the server client, used when a worker enqueues a job itself.
53
+ config.client_middleware do |chain|
54
+ chain.add Honeykiq::ClientMiddleware
55
+ end
56
+
57
+ # Configure ServerMiddleware with a tracing mode
58
+ config.server_middleware do |chain|
59
+ # tracing_mode: options are nil (default), :child, :child_trace, :link
60
+ #
61
+ # - nil (default) starts a span and trace when the job executes.
62
+ #
63
+ # - :child starts a span as a child of the enqueuing trace,
64
+ # requires ClientMiddleware to be configured when enqueuing the job.
65
+ #
66
+ # - :child_trace (experimental) starts a span and a trace
67
+ # with trace.parent_id set to the enqueuing trace id,
68
+ # requires ClientMiddleware to be configured when enqueuing the job.
69
+ #
70
+ # - :link (experimental) starts a span and trace
71
+ # with a link event that points to the enqueuing trace,
72
+ # requires ClientMiddleware to be configured when enqueuing the job.
73
+ # https://docs.honeycomb.io/getting-data-in/tracing/send-trace-data/#links
74
+ chain.add Honeykiq::ServerMiddleware, tracing_mode: :child
75
+ end
76
+ end
77
+ ```
78
+
26
79
  ### Honeykiq::ServerMiddleware
27
80
 
28
81
  Add Honeykiq to your Sidekiq server middleware chain. It will send an event to
@@ -34,7 +87,7 @@ to see what kind of information it sends.
34
87
  ```ruby
35
88
  # Configure Honeycomb beeline
36
89
  Honeycomb.configure do |config|
37
- config.writekey = ENV.fetch('HONEYCOMB_WRITE_KEY')
90
+ config.write_key = ENV.fetch('HONEYCOMB_WRITE_KEY')
38
91
  config.dataset = ENV.fetch('HONEYCOMB_DATASET')
39
92
  end
40
93
 
@@ -50,7 +103,7 @@ Sidekiq.configure_server do |config|
50
103
  config.server_middleware do |chain|
51
104
  chain.add Honeykiq::ServerMiddleware,
52
105
  libhoney: Libhoney::Client.new(
53
- writekey: ENV.fetch('HONEYCOMB_WRITE_KEY'),
106
+ write_key: ENV.fetch('HONEYCOMB_WRITE_KEY'),
54
107
  dataset: ENV.fetch('HONEYCOMB_DATASET')
55
108
  )
56
109
  end
@@ -64,7 +117,7 @@ event:
64
117
 
65
118
  ```ruby
66
119
  class MyServerMiddleware < Honeykiq::ServerMiddleware
67
- def extra_fields
120
+ def extra_fields(job) # Sidekiq::Job instance
68
121
  {
69
122
  my_data: 'evaluated and added to the event after the job has finished/errored',
70
123
  my_function: -> { Time.now }
@@ -106,7 +159,7 @@ require 'clockwork'
106
159
  require 'honeykiq'
107
160
 
108
161
  Honeycomb.configure do |config|
109
- config.writekey = ENV.fetch('HONEYCOMB_WRITE_KEY')
162
+ config.write_key = ENV.fetch('HONEYCOMB_WRITE_KEY')
110
163
  config.dataset = ENV.fetch('HONEYCOMB_DATASET')
111
164
  end
112
165
 
@@ -117,18 +170,21 @@ module Clockwork
117
170
  end
118
171
  ```
119
172
 
173
+ [clockwork]: https://github.com/Rykian/clockwork
174
+
120
175
  ## Contributing
121
176
 
122
- [Pull requests](https://github.com/carwow/honeykiq/pulls) are very welcome!
123
- Don't forget to add yourself to [CONTRIBUTORS.txt].
177
+ [Pull requests] are very welcome!
124
178
 
125
- Please report bugs in a [new issue](https://github.com/carwow/honeykiq/issues/new).
179
+ Please report bugs in a [new issue].
126
180
 
127
- [CONTRIBUTORS.txt]: https://github.com/carwow/honeykiq/blob/master/CONTRIBUTORS.txt
181
+ Everyone is expected to follow the [code of conduct].
182
+
183
+ [Pull requests]: https://github.com/carwow/honeykiq/pulls
184
+ [new issue]: https://github.com/carwow/honeykiq/issues/new
185
+ [code of conduct]: https://github.com/carwow/honeykiq/tree/master/CODE_OF_CONDUCT.md
128
186
 
129
187
  ## License
130
188
 
131
189
  The gem is available as open source under the terms of the
132
190
  [MIT License](https://opensource.org/licenses/MIT).
133
-
134
- [clockwork]: https://github.com/Rykian/clockwork
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "standard/rake"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ task default: [:spec, :standard]
data/honeykiq.gemspec CHANGED
@@ -1,35 +1,27 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'honeykiq/version'
1
+ require_relative "lib/honeykiq/version"
4
2
 
5
3
  Gem::Specification.new do |spec|
6
- spec.name = 'honeykiq'
7
- spec.version = Honeykiq::VERSION
8
- spec.authors = ['carwow Developers']
9
- spec.email = ['developers@carwow.co.uk']
10
- spec.summary = 'Sidekiq → Honeycomb 🐝'
11
- spec.description = 'Send Sidekiq related events to Honeycomb.'
12
- spec.homepage = 'https://github.com/carwow/honeykiq'
13
- spec.license = 'MIT'
4
+ spec.name = "honeykiq"
5
+ spec.version = Honeykiq::VERSION
6
+ spec.authors = ["carwow Developers"]
7
+ spec.email = ["developers@carwow.co.uk"]
8
+ spec.summary = "Sidekiq → Honeycomb 🐝"
9
+ spec.description = "Send Sidekiq related events to Honeycomb."
10
+ spec.homepage = "https://github.com/carwow/honeykiq"
11
+ spec.license = "MIT"
14
12
 
15
- if spec.respond_to?(:metadata)
16
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
17
- else
18
- raise 'RubyGems 2.0 or newer is required to protect against ' \
19
- 'public gem pushes.'
20
- end
13
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
14
 
22
15
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|example)/}) }
24
17
  end
25
- spec.require_paths = ['lib']
18
+ spec.require_paths = ["lib"]
26
19
 
27
- spec.add_dependency 'sidekiq'
20
+ spec.add_dependency "sidekiq", "~> 6.2", ">= 6.2.2"
28
21
 
29
- spec.add_development_dependency 'bundler'
30
- spec.add_development_dependency 'carwow_rubocop'
31
- spec.add_development_dependency 'honeycomb-beeline'
32
- spec.add_development_dependency 'pry'
33
- spec.add_development_dependency 'rake'
34
- spec.add_development_dependency 'rspec'
22
+ spec.add_development_dependency "honeycomb-beeline", "~> 2.6"
23
+ spec.add_development_dependency "pry", "~> 0.14"
24
+ spec.add_development_dependency "rake", "~> 13.0"
25
+ spec.add_development_dependency "rspec", "~> 3.10"
26
+ spec.add_development_dependency "standard", "~> 0.13"
35
27
  end
@@ -0,0 +1,59 @@
1
+ module Honeykiq
2
+ class BeelineSpan
3
+ def initialize(tracing_mode)
4
+ @tracing_mode = tracing_mode
5
+ end
6
+
7
+ def call(name:, serialized_trace:, &block)
8
+ case tracing_mode
9
+ when :link then link_span(name, serialized_trace, &block)
10
+ when :child then child_span(name, serialized_trace, &block)
11
+ when :child_trace then child_trace(name, serialized_trace, &block)
12
+ else Honeycomb.start_span(name: name, &block)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :tracing_mode
19
+
20
+ def link_span(name, serialized_trace)
21
+ Honeycomb.start_span(name: name) do |event|
22
+ link_to_enqueuing_trace(event, serialized_trace)
23
+
24
+ yield event
25
+ end
26
+ end
27
+
28
+ def link_to_enqueuing_trace(current, serialized_trace)
29
+ return unless serialized_trace
30
+
31
+ trace_id, parent_span_id, = TraceParser.parse(serialized_trace)
32
+
33
+ Honeycomb.start_span(
34
+ name: "link",
35
+ 'trace.link.trace_id': trace_id,
36
+ 'trace.link.span_id': parent_span_id,
37
+ 'meta.annotation_type': "link",
38
+ 'trace.parent_id': current.id,
39
+ 'trace.trace_id': current.trace.id
40
+ ).send
41
+ end
42
+
43
+ def child_span(name, serialized_trace, &block)
44
+ Honeycomb.start_span(name: name, serialized_trace: serialized_trace, &block)
45
+ end
46
+
47
+ def child_trace(name, serialized_trace, &block)
48
+ parent_trace_id, = TraceParser.parse(serialized_trace)
49
+
50
+ Honeycomb.start_span(name: name, 'parent.trace_id': parent_trace_id, &block)
51
+ end
52
+
53
+ if defined?(Honeycomb)
54
+ class TraceParser
55
+ extend Honeycomb::PropagationParser
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,9 @@
1
+ module Honeykiq
2
+ class ClientMiddleware
3
+ def call(_, job, _, _)
4
+ job["serialized_trace"] = Honeycomb.current_span&.to_trace_header
5
+
6
+ yield
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ module Honeykiq
2
+ class LibhoneySpan
3
+ def initialize(libhoney)
4
+ @libhoney = libhoney
5
+ end
6
+
7
+ def call(*)
8
+ libhoney.event.tap do |event|
9
+ duration_ms(event) { yield event }
10
+ ensure
11
+ event.send
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :libhoney
18
+
19
+ def duration_ms(event)
20
+ start_time = now
21
+ yield
22
+ ensure
23
+ duration = now - start_time
24
+ event.add_field(:duration_ms, duration * 1000)
25
+ end
26
+
27
+ if defined?(Process::CLOCK_MONOTONIC)
28
+ def now
29
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
+ end
31
+ else
32
+ def now
33
+ Time.now
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,4 +1,4 @@
1
- require 'sidekiq/api'
1
+ require "sidekiq/api"
2
2
 
3
3
  module Honeykiq
4
4
  class PeriodicReporter
@@ -42,27 +42,27 @@ module Honeykiq
42
42
  redis_info = fetch_redis_info
43
43
 
44
44
  {
45
- 'redis.connections': redis_info['connected_clients'].to_i,
46
- 'redis.memory_used': redis_info['used_memory'].to_i
45
+ 'redis.connections': redis_info["connected_clients"].to_i,
46
+ 'redis.memory_used': redis_info["used_memory"].to_i
47
47
  }
48
48
  end
49
49
 
50
50
  def fetch_redis_info
51
51
  Sidekiq.redis do |redis|
52
- redis.pipelined do
52
+ redis.pipelined {
53
53
  redis.info :clients
54
54
  redis.info :memory
55
- end.reduce(&:merge)
55
+ }.reduce(&:merge)
56
56
  end
57
57
  end
58
58
 
59
59
  def send_process_event(process, &extra)
60
60
  libhoney.event.add(
61
61
  type: :process,
62
- 'meta.dyno': process['hostname'],
63
- 'meta.process_id': process['pid'],
64
- 'process.concurrency': process['concurrency'],
65
- 'process.busy': process['busy'],
62
+ 'meta.dyno': process["hostname"],
63
+ 'meta.process_id': process["pid"],
64
+ 'process.concurrency': process["concurrency"],
65
+ 'process.busy': process["busy"],
66
66
  **(extra&.call(:process, process) || {})
67
67
  ).send
68
68
  end
@@ -1,53 +1,46 @@
1
- require 'sidekiq/api'
1
+ require "sidekiq/api"
2
2
 
3
3
  module Honeykiq
4
4
  class ServerMiddleware
5
- def initialize(libhoney: nil, honey_client: nil)
5
+ def initialize(libhoney: nil, honey_client: nil, tracing_mode: nil)
6
6
  @libhoney = libhoney || honey_client
7
+ @tracing_mode = tracing_mode
7
8
  end
8
9
 
9
10
  def call(_worker, msg, queue_name)
10
- job = Sidekiq::Job.new(msg, queue_name)
11
+ job = Sidekiq::JobRecord.new(msg, queue_name)
11
12
  queue = Sidekiq::Queue.new(queue_name)
12
13
 
13
- start_span(name: job.display_class) do |event|
14
+ span_builder.call(name: job.display_class, serialized_trace: msg["serialized_trace"]) do |event|
14
15
  call_with_event(event, job, queue) { yield }
15
16
  end
16
17
  end
17
18
 
18
- def extra_fields
19
+ def extra_fields(_job = nil)
19
20
  {}
20
21
  end
21
22
 
22
23
  private
23
24
 
24
- attr_reader :libhoney
25
+ attr_reader :libhoney, :tracing_mode
25
26
 
26
27
  def libhoney?
27
28
  !!libhoney
28
29
  end
29
30
 
30
- def start_span(name:)
31
- if libhoney?
32
- libhoney.event.tap do |event|
33
- duration_ms(event) { yield event }
34
- ensure
35
- event.send
36
- end
37
- else
38
- Honeycomb.start_span(name: name) { |event| yield event }
39
- end
31
+ def span_builder
32
+ @span_builder ||= libhoney? ? LibhoneySpan.new(libhoney) : BeelineSpan.new(tracing_mode)
40
33
  end
41
34
 
42
35
  def call_with_event(event, job, queue)
43
36
  event.add(default_fields(job, queue))
44
37
  yield
45
- event.add_field(:'job.status', 'finished')
46
- rescue StandardError => error
38
+ event.add_field(:'job.status', "finished")
39
+ rescue => error
47
40
  on_error(event, error)
48
41
  raise
49
42
  ensure
50
- event.add(extra_fields)
43
+ event.add(call_extra_fields(job))
51
44
  end
52
45
 
53
46
  def default_fields(job, queue)
@@ -62,11 +55,11 @@ module Honeykiq
62
55
  def job_fields(job)
63
56
  {
64
57
  'job.class': job.display_class,
65
- 'job.attempt_number': (job['retry_count'].to_i.nonzero? || 0) + 1,
58
+ 'job.attempt_number': (job["retry_count"].to_i.nonzero? || 0) + 1,
66
59
  'job.id': job.jid,
67
60
  'job.arguments_bytes': job.args.to_json.bytesize,
68
61
  'job.latency_sec': job.latency,
69
- 'job.batch_id': job['bid']
62
+ 'job.batch_id': job["bid"]
70
63
  }.compact
71
64
  end
72
65
 
@@ -77,18 +70,10 @@ module Honeykiq
77
70
  }
78
71
  end
79
72
 
80
- def duration_ms(event)
81
- start_time = Time.now
82
- yield
83
- ensure
84
- duration = Time.now - start_time
85
- event.add_field(:duration_ms, duration * 1000)
86
- end
87
-
88
73
  def on_error(event, error)
89
74
  return unless event
90
75
 
91
- event.add_field(:'job.status', 'failed')
76
+ event.add_field(:'job.status', "failed")
92
77
  return unless libhoney?
93
78
 
94
79
  event.add(
@@ -96,5 +81,12 @@ module Honeykiq
96
81
  'error.message': error.message
97
82
  )
98
83
  end
84
+
85
+ def call_extra_fields(job)
86
+ case method(:extra_fields).arity
87
+ when 0 then extra_fields
88
+ else extra_fields(job)
89
+ end
90
+ end
99
91
  end
100
92
  end
@@ -1,3 +1,3 @@
1
1
  module Honeykiq
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = "1.4.1".freeze
3
3
  end
data/lib/honeykiq.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  module Honeykiq
2
- autoload :Version, 'honeykiq/version'
3
- autoload :PeriodicReporter, 'honeykiq/periodic_reporter'
4
- autoload :ServerMiddleware, 'honeykiq/server_middleware'
2
+ autoload :VERSION, "honeykiq/version"
3
+ autoload :PeriodicReporter, "honeykiq/periodic_reporter"
4
+ autoload :ServerMiddleware, "honeykiq/server_middleware"
5
+ autoload :ClientMiddleware, "honeykiq/client_middleware"
6
+ autoload :BeelineSpan, "honeykiq/beeline_span"
7
+ autoload :LibhoneySpan, "honeykiq/libhoney_span"
5
8
  end
metadata CHANGED
@@ -1,113 +1,105 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeykiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - carwow Developers
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2021-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.2'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: '0'
22
+ version: 6.2.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: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
29
+ version: '6.2'
31
30
  - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
32
+ version: 6.2.2
41
33
  - !ruby/object:Gem::Dependency
42
- name: carwow_rubocop
34
+ name: honeycomb-beeline
43
35
  requirement: !ruby/object:Gem::Requirement
44
36
  requirements:
45
- - - ">="
37
+ - - "~>"
46
38
  - !ruby/object:Gem::Version
47
- version: '0'
39
+ version: '2.6'
48
40
  type: :development
49
41
  prerelease: false
50
42
  version_requirements: !ruby/object:Gem::Requirement
51
43
  requirements:
52
- - - ">="
44
+ - - "~>"
53
45
  - !ruby/object:Gem::Version
54
- version: '0'
46
+ version: '2.6'
55
47
  - !ruby/object:Gem::Dependency
56
- name: honeycomb-beeline
48
+ name: pry
57
49
  requirement: !ruby/object:Gem::Requirement
58
50
  requirements:
59
- - - ">="
51
+ - - "~>"
60
52
  - !ruby/object:Gem::Version
61
- version: '0'
53
+ version: '0.14'
62
54
  type: :development
63
55
  prerelease: false
64
56
  version_requirements: !ruby/object:Gem::Requirement
65
57
  requirements:
66
- - - ">="
58
+ - - "~>"
67
59
  - !ruby/object:Gem::Version
68
- version: '0'
60
+ version: '0.14'
69
61
  - !ruby/object:Gem::Dependency
70
- name: pry
62
+ name: rake
71
63
  requirement: !ruby/object:Gem::Requirement
72
64
  requirements:
73
- - - ">="
65
+ - - "~>"
74
66
  - !ruby/object:Gem::Version
75
- version: '0'
67
+ version: '13.0'
76
68
  type: :development
77
69
  prerelease: false
78
70
  version_requirements: !ruby/object:Gem::Requirement
79
71
  requirements:
80
- - - ">="
72
+ - - "~>"
81
73
  - !ruby/object:Gem::Version
82
- version: '0'
74
+ version: '13.0'
83
75
  - !ruby/object:Gem::Dependency
84
- name: rake
76
+ name: rspec
85
77
  requirement: !ruby/object:Gem::Requirement
86
78
  requirements:
87
- - - ">="
79
+ - - "~>"
88
80
  - !ruby/object:Gem::Version
89
- version: '0'
81
+ version: '3.10'
90
82
  type: :development
91
83
  prerelease: false
92
84
  version_requirements: !ruby/object:Gem::Requirement
93
85
  requirements:
94
- - - ">="
86
+ - - "~>"
95
87
  - !ruby/object:Gem::Version
96
- version: '0'
88
+ version: '3.10'
97
89
  - !ruby/object:Gem::Dependency
98
- name: rspec
90
+ name: standard
99
91
  requirement: !ruby/object:Gem::Requirement
100
92
  requirements:
101
- - - ">="
93
+ - - "~>"
102
94
  - !ruby/object:Gem::Version
103
- version: '0'
95
+ version: '0.13'
104
96
  type: :development
105
97
  prerelease: false
106
98
  version_requirements: !ruby/object:Gem::Requirement
107
99
  requirements:
108
- - - ">="
100
+ - - "~>"
109
101
  - !ruby/object:Gem::Version
110
- version: '0'
102
+ version: '0.13'
111
103
  description: Send Sidekiq related events to Honeycomb.
112
104
  email:
113
105
  - developers@carwow.co.uk
@@ -118,17 +110,17 @@ files:
118
110
  - ".circleci/config.yml"
119
111
  - ".gitignore"
120
112
  - ".rspec"
121
- - ".rubocop.yml"
122
113
  - CHANGELOG.md
123
114
  - CODE_OF_CONDUCT.md
124
- - CONTRIBUTORS.txt
125
115
  - Gemfile
126
- - Gemfile.lock
127
116
  - LICENSE.txt
128
117
  - README.md
129
118
  - Rakefile
130
119
  - honeykiq.gemspec
131
120
  - lib/honeykiq.rb
121
+ - lib/honeykiq/beeline_span.rb
122
+ - lib/honeykiq/client_middleware.rb
123
+ - lib/honeykiq/libhoney_span.rb
132
124
  - lib/honeykiq/periodic_reporter.rb
133
125
  - lib/honeykiq/server_middleware.rb
134
126
  - lib/honeykiq/version.rb
@@ -137,7 +129,7 @@ licenses:
137
129
  - MIT
138
130
  metadata:
139
131
  allowed_push_host: https://rubygems.org
140
- post_install_message:
132
+ post_install_message:
141
133
  rdoc_options: []
142
134
  require_paths:
143
135
  - lib
@@ -152,8 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
144
  - !ruby/object:Gem::Version
153
145
  version: '0'
154
146
  requirements: []
155
- rubygems_version: 3.1.2
156
- signing_key:
147
+ rubygems_version: 3.2.22
148
+ signing_key:
157
149
  specification_version: 4
158
150
  summary: "Sidekiq → Honeycomb \U0001F41D"
159
151
  test_files: []
data/.rubocop.yml DELETED
@@ -1,3 +0,0 @@
1
- inherit_gem:
2
- carwow_rubocop:
3
- - default.yml
data/CONTRIBUTORS.txt DELETED
@@ -1,3 +0,0 @@
1
- Pedro Chambino <pedro.chambino@carwow.co.uk>
2
- Dan Rees-Jones <dan.reesjones@carwow.co.uk>
3
- Christian Gregg <christian.gregg@carwow.co.uk>
data/Gemfile.lock DELETED
@@ -1,106 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- honeykiq (1.1.0)
5
- sidekiq
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- addressable (2.7.0)
11
- public_suffix (>= 2.0.2, < 5.0)
12
- ast (2.4.0)
13
- carwow_rubocop (3.2.2)
14
- rubocop (>= 0.78)
15
- rubocop-performance
16
- rubocop-rspec
17
- coderay (1.1.2)
18
- connection_pool (2.2.2)
19
- diff-lcs (1.3)
20
- domain_name (0.5.20190701)
21
- unf (>= 0.0.5, < 1.0.0)
22
- ffi (1.12.2)
23
- ffi-compiler (1.0.1)
24
- ffi (>= 1.0.0)
25
- rake
26
- honeycomb-beeline (2.0.0)
27
- libhoney (~> 1.14, >= 1.14.2)
28
- http (4.4.1)
29
- addressable (~> 2.3)
30
- http-cookie (~> 1.0)
31
- http-form_data (~> 2.2)
32
- http-parser (~> 1.2.0)
33
- http-cookie (1.0.3)
34
- domain_name (~> 0.5)
35
- http-form_data (2.3.0)
36
- http-parser (1.2.1)
37
- ffi-compiler (>= 1.0, < 2.0)
38
- jaro_winkler (1.5.4)
39
- libhoney (1.14.4)
40
- addressable (~> 2.0)
41
- http (>= 2.0, < 5.0)
42
- method_source (1.0.0)
43
- parallel (1.19.1)
44
- parser (2.7.1.2)
45
- ast (~> 2.4.0)
46
- pry (0.13.1)
47
- coderay (~> 1.1)
48
- method_source (~> 1.0)
49
- public_suffix (4.0.5)
50
- rack (2.2.2)
51
- rack-protection (2.0.8.1)
52
- rack
53
- rainbow (3.0.0)
54
- rake (13.0.1)
55
- redis (4.1.4)
56
- rexml (3.2.4)
57
- rspec (3.9.0)
58
- rspec-core (~> 3.9.0)
59
- rspec-expectations (~> 3.9.0)
60
- rspec-mocks (~> 3.9.0)
61
- rspec-core (3.9.2)
62
- rspec-support (~> 3.9.3)
63
- rspec-expectations (3.9.2)
64
- diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.9.0)
66
- rspec-mocks (3.9.1)
67
- diff-lcs (>= 1.2.0, < 2.0)
68
- rspec-support (~> 3.9.0)
69
- rspec-support (3.9.3)
70
- rubocop (0.82.0)
71
- jaro_winkler (~> 1.5.1)
72
- parallel (~> 1.10)
73
- parser (>= 2.7.0.1)
74
- rainbow (>= 2.2.2, < 4.0)
75
- rexml
76
- ruby-progressbar (~> 1.7)
77
- unicode-display_width (>= 1.4.0, < 2.0)
78
- rubocop-performance (1.5.2)
79
- rubocop (>= 0.71.0)
80
- rubocop-rspec (1.39.0)
81
- rubocop (>= 0.68.1)
82
- ruby-progressbar (1.10.1)
83
- sidekiq (6.0.7)
84
- connection_pool (>= 2.2.2)
85
- rack (~> 2.0)
86
- rack-protection (>= 2.0.0)
87
- redis (>= 4.1.0)
88
- unf (0.1.4)
89
- unf_ext
90
- unf_ext (0.0.7.7)
91
- unicode-display_width (1.7.0)
92
-
93
- PLATFORMS
94
- ruby
95
-
96
- DEPENDENCIES
97
- bundler
98
- carwow_rubocop
99
- honeycomb-beeline
100
- honeykiq!
101
- pry
102
- rake
103
- rspec
104
-
105
- BUNDLED WITH
106
- 2.1.4