hermes-rb 0.3.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc074c27cdac75e904004b2bd84d3d633f669251f5476065a9691979df5334da
4
- data.tar.gz: 0255b07f12767b699b9bffb006ef00f8fc782f72c394bc5ab0622089441cf43b
3
+ metadata.gz: 8d9a8e1af4d989ab98014db38015a8a00f24c2c7a4ab0d7724c849e092812855
4
+ data.tar.gz: 7038b16132b50567e00ebd2398054907f8e17dccc6e15652a7367f1dbd76299e
5
5
  SHA512:
6
- metadata.gz: 07d4527111544947adfb5222634df4b8a6f02169e612174a1de52723eeafc51a30daf3515b341f532244bf87e106cb204b6f7b5142f043e8aa24917a8e6374bc
7
- data.tar.gz: 9d2f1c37b34b417c1fc9340590546f38608d67af7d1efb77d8a8853ea9827e0b6a19b43cfaad465867be52032bffe1446a2ef9280253d12896d124fbde6e0502
6
+ metadata.gz: 432bfa0092f9dbeaad563aadea388c542a8daf06c4708dca3df620806b8c678350c88b27838d2c6fd06eda9ce84398c5eb3d770efca21eff63a528161e46a3d9
7
+ data.tar.gz: ba182e98338361a3024829c2e7872bf935d28769a3c69f373ecbd4a3f6676040f6a2ecd3b2753f7683e0e799484dbbd178d695679a36fb0440a25575015f12f3
data/Changelog.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## 0.6.1
6
+ - Extend the list of sensitive keywords for Hermes::Logger::ParamsFilter
7
+
8
+ ## 0.6.0
9
+ - Add Health check
10
+
11
+ ## 0.5.0
12
+ - Add Datadog tracer
13
+ - Allow to provide a custom tracer
14
+
15
+ ## 0.4.0
16
+ - Make it possible to provide Hutch consumer config
17
+
18
+ ## 0.3.1
19
+ - Fix filtering params for logs for nil values in sensitive attributes
20
+
5
21
  ## 0.3.0
6
22
  - Reorganize Hutch config - instead of setting config values when connecting to Hutch when using publisher, do it right after the initialization.
7
23
  - Make params filter customizable for the logger
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hermes-rb (0.3.0)
4
+ hermes-rb (0.6.1)
5
5
  activerecord (>= 5)
6
6
  activesupport (>= 5)
7
7
  dry-container (~> 0)
@@ -12,12 +12,12 @@ PATH
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
- activemodel (6.1.2.1)
16
- activesupport (= 6.1.2.1)
17
- activerecord (6.1.2.1)
18
- activemodel (= 6.1.2.1)
19
- activesupport (= 6.1.2.1)
20
- activesupport (6.1.2.1)
15
+ activemodel (6.1.3.2)
16
+ activesupport (= 6.1.3.2)
17
+ activerecord (6.1.3.2)
18
+ activemodel (= 6.1.3.2)
19
+ activesupport (= 6.1.3.2)
20
+ activesupport (6.1.3.2)
21
21
  concurrent-ruby (~> 1.0, >= 1.0.2)
22
22
  i18n (>= 1.6, < 2)
23
23
  minitest (>= 5.1)
@@ -28,25 +28,27 @@ GEM
28
28
  amq-protocol (~> 2.3, >= 2.3.1)
29
29
  carrot-top (0.0.7)
30
30
  json
31
- concurrent-ruby (1.1.8)
31
+ concurrent-ruby (1.1.9)
32
+ ddtrace (0.45.0)
33
+ msgpack
32
34
  diff-lcs (1.4.4)
33
- dry-configurable (0.12.0)
35
+ dry-configurable (0.12.1)
34
36
  concurrent-ruby (~> 1.0)
35
37
  dry-core (~> 0.5, >= 0.5.0)
36
- dry-container (0.7.2)
38
+ dry-container (0.8.0)
37
39
  concurrent-ruby (~> 1.0)
38
40
  dry-configurable (~> 0.1, >= 0.1.3)
39
- dry-core (0.5.0)
41
+ dry-core (0.6.0)
40
42
  concurrent-ruby (~> 1.0)
41
43
  dry-inflector (0.2.0)
42
- dry-logic (1.1.0)
44
+ dry-logic (1.2.0)
43
45
  concurrent-ruby (~> 1.0)
44
46
  dry-core (~> 0.5, >= 0.5)
45
47
  dry-struct (1.4.0)
46
48
  dry-core (~> 0.5, >= 0.5)
47
49
  dry-types (~> 1.5)
48
50
  ice_nine (~> 0.11)
49
- dry-types (1.5.0)
51
+ dry-types (1.5.1)
50
52
  concurrent-ruby (~> 1.0)
51
53
  dry-container (~> 0.3)
52
54
  dry-core (~> 0.5, >= 0.5)
@@ -57,11 +59,12 @@ GEM
57
59
  bunny (>= 2.15, < 2.16)
58
60
  carrot-top (~> 0.0.7)
59
61
  multi_json (~> 1.14)
60
- i18n (1.8.9)
62
+ i18n (1.8.10)
61
63
  concurrent-ruby (~> 1.0)
62
64
  ice_nine (0.11.2)
63
65
  json (2.5.1)
64
- minitest (5.14.3)
66
+ minitest (5.14.4)
67
+ msgpack (1.4.2)
65
68
  multi_json (1.15.0)
66
69
  newrelic_rpm (6.15.0)
67
70
  pg (1.2.3)
@@ -93,6 +96,7 @@ PLATFORMS
93
96
 
94
97
  DEPENDENCIES
95
98
  bundler
99
+ ddtrace
96
100
  hermes-rb!
97
101
  newrelic_rpm
98
102
  pg
data/README.md CHANGED
@@ -37,7 +37,8 @@ Rails.application.config.to_prepare do
37
37
  config.configure_hutch do |hutch|
38
38
  hutch.uri = ENV.fetch("HUTCH_URI")
39
39
  hutch.force_publisher_confirms = true
40
- hutch.enable_http_api_use = false
40
+ hutch.enable_http_api_use = false
41
+ hutch.tracer = MyOwnCustomTracerIfIWantToDoSomethingCrazy
41
42
  end
42
43
  config.distributed_tracing_database_uri = ENV.fetch("DISTRIBUTED_TRACING_DATABASE_URI", nil)
43
44
  config.error_notification_service = Raven
@@ -45,8 +46,15 @@ Rails.application.config.to_prepare do
45
46
 
46
47
  event_handler.handle_events do
47
48
  handle Events::Example::Happened, with: Example::HappenedHandler
48
-
49
49
  handle Events::Example::SyncCallHappened, with: Example::SyncCallHappenedHandler, async: false
50
+
51
+ extra_consumer_config = -> do
52
+ classic_queue
53
+ quorum_queue initial_group_size: 3
54
+ arguments "x-max-length" => 10
55
+ end
56
+ handle Events::Example::SomethingHappenedWithExtraConsumerConfig, with: Example::SomethingHappenedWithExtraConsumerConfigHandler,
57
+ consumer_config: extra_consumer_config
50
58
  end
51
59
 
52
60
  # if you care about distributed tracing
@@ -79,12 +87,13 @@ end
79
87
 
80
88
  If you know what you are doing, you don't necessarily have to process things in the background. As long as the class implements the expected interface, you can do anything you want.
81
89
 
82
- 5. `event_handler` - an instance of event handler/storage, just use what is shown in the example.
90
+ 5. `event_handler` - an instance of event handler/storage, just use what is shown in the example. Notice that you can also pass extra consumer config lambda that will be evaluated within the context of Hutch consumer.
83
91
  6. `clock` - a clock object that is time-zone aware, implementing `now` method.
84
92
  7. `configure_hutch` - a way to configure Hutch:
85
93
  - `uri` - the URI for RabbitMQ, required.
86
94
  - `force_publisher_confirms` - defaults to `true`
87
95
  - `enable_http_api_use` - defaults to `false`
96
+ - `tracer` - defaults to `Hermes::Tracers::Datadog` if you use Datadog, `Hutch::Tracers::NewRelic` for NewRelic and `Hutch::Tracers::NullTracer` if you use neither Datadog, nor NewRelic. Check APM section for more details if you want to provide a custom tracer.
88
97
  8. `event_handler.handle_events` - that's how you declare events and their handlers. The event handler is an object that responds to `call` method and takes `event` as an argument. All events should ideally be subclasses of `Hermes::BaseEvent`
89
98
 
90
99
  This class inherits from `Dry::Struct`, so getting familiar with [dry-struct gem](https://dry-rb.org/gems/dry-struct/) would be beneficial. Here is an example event:
@@ -139,7 +148,7 @@ If you don't care about it, you can leave it empty.
139
148
 
140
149
  12. `distributed_tracing_database_table` - Table name for storing traces, by default it's `hermes_distributed_traces`. Optional.
141
150
 
142
- 13. `distributes_tracing_mapper` - an object responding to `call` method taking one argument (a hash of attributes) which must return a hash as well. This hash will be used for assigning attributes when creating `Hermes::DistributedTrace`. It defaults to `Hermes::DistributedTrace::Mapper`, which uses `logger_params_filter` to remove sensitive info (this config option is covered below). You can either provide a custom mapper or pass a custom params filter, for example: `Hermes::DistributedTrace::Mapper.new(params_filter: custom_params_filter)`
151
+ 13. `distributes_tracing_mapper` - an object responding to `call` method taking one argument (a hash of attributes) which must return a hash as well. This hash will be used for assigning attributes when creating `Hermes::DistributedTrace`. It defaults to `Hermes::DistributedTrace::Mapper`, which uses `logger_params_filter` to remove sensitive info (this config option is covered below). You can either provide a custom mapper or pass a custom params filter, for example: `Hermes::DistributedTrace::Mapper.new(params_filter: custom_params_filter)`
143
152
 
144
153
  14. `error_notification_service` - an object responding to `capture_exception` method taking one argument (error). Its interface is based on `Raven` from [Sentry Raven](https://github.com/getsentry/sentry-ruby/tree/master/sentry-raven). By default `Hermes::NullErrorNotificationService` is used, which does nothing. Optional.
145
154
 
@@ -151,7 +160,7 @@ If you don't care about it, you can leave it empty.
151
160
 
152
161
  18. `logger_params_filter` - a service used as params filter for logger, to make sure no sensitive data will be logged. It defaults to `Hermes::Logger::ParamsFilter` which already performs some filtering but it might not be enough in your case. If you are not satisfied with the defaults, you have 2 options, which are especially simple in Rails apps:
153
162
  - provide custom array of sensitive attributes and still use a default filter: `Hermes::Logger::ParamsFilter.new(sensitive_keywords: Rails.application.config.filter_parameters)`.
154
- - provide custom filter object, which responds to `call` method and takes 2 arguments: attribute name and its value and performs mutation by using `gsub!` (don't worry, the entire body is cloned before passing it to the filter, so nothing unexpected will happen). This is compatible with the interface of `Rails.application.config.filter_parameters` when you use a custom filter there. In such case, you can do something like this: `Rails.application.config.filter_parameters = [Proc.new { |k, v| do_something_custom_here(k, v) }]` and then just assign `Rails.application.config.filter_parameters.first` in the Hermes config.
163
+ - provide custom filter object, which responds to `call` method and takes 2 arguments: attribute name and its value and performs mutation by using `gsub!` (don't worry, the entire body is cloned before passing it to the filter, so nothing unexpected will happen). This is compatible with the interface of `Rails.application.config.filter_parameters` when you use a custom filter there. In such case, you can do something like this: `Rails.application.config.filter_parameters = [Proc.new { |k, v| do_something_custom_here(k, v) }]` and then just assign `Rails.application.config.filter_parameters.first` in the Hermes config.
155
164
  ## RPC
156
165
 
157
166
  If you want to handle RPC call, you need to add `rpc: true` flag. Keep in mind that RPC requires a synchronous processing and response, so you also need to set `async: false`. The routing key and correlation ID will be resolved based on the message that is published by the client. The payload that is sent back will be what event handler reutrns, so it might be a good idea to just return a hash so that you can operate on JSON easily.
@@ -180,9 +189,11 @@ parsed_response_hash = Hermes::RpcClient.new(rpc_call_timeout: 10).call(event)
180
189
 
181
190
  If the request timeouts, `Hermes::RpcClient::RpcTimeoutError` will be raised.
182
191
 
183
- ## NewRelic integration
192
+ ## APM and tracing
184
193
 
185
- The integration is enabled automatically if you use `newrelic_rpm` gem via `Hutch::Tracers::NewRelic`.
194
+ The integration is enabled automatically if you use `newrelic_rpm` gem via `Hutch::Tracers::NewRelic` or via `Hermes::Tracers::Datadog` when using `ddtrace` gem.
195
+
196
+ You can also provide your own tracer, as long as it implements an interface expected by [Hutch][https://github.com/ruby-amqp/hutch].
186
197
 
187
198
  ## Distributed Tracing (experimental feature, the interface might change in the future)
188
199
 
@@ -448,6 +459,33 @@ end
448
459
 
449
460
  Hermes is just an extra layer on top of [hutch](https://github.com/gocardless/hutch), refer to Hutch's docs for more info about dealing with the workers and deployment.
450
461
 
462
+ ## Health Checks
463
+
464
+ If you want to perform a health check, use `Hermes::Checks::HealthCheck.check`, which checks if it's possible to connect RabbitMQ via Hutch.
465
+
466
+ The interface is compliant with `health_check`[https://github.com/ianheggie/health_check] gem. If you want to add the custom health check, just add this to the config:
467
+
468
+ ``` rb
469
+ config.add_custom_check("hermes") do
470
+ Hermes::Checks::HealthCheck.check
471
+ end
472
+ ```
473
+
474
+ You can also use `bin/health_check` file to perform healthcheck - on success, the script exits with `0` status and on failure, it logs the error and exits with `1` status.
475
+
476
+ To perform the actual check:
477
+
478
+ 1. Via `health_check` gem:
479
+ ```
480
+ curl -v localhost:3000/health_check/hermes.json
481
+ ```
482
+
483
+ 2. Via binary:
484
+
485
+ ```
486
+ bundle exec hermes_health_check
487
+ ```
488
+
451
489
  ## CircleCI config for installing RabbitMQ
452
490
 
453
491
  Use `- image: brandembassy/rabbitmq:latest`
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require_relative "../lib/hermes-rb"
5
+
6
+ result = Hermes::Checks::HealthCheck.check
7
+ if result.empty?
8
+ exit 0
9
+ else
10
+ Hermes::DependenciesContainer["logger"].log_health_check_failure(result)
11
+ exit 1
12
+ end
data/hermes-rb.gemspec CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
24
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
25
  end
26
- spec.bindir = "exe"
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.bindir = "bin"
27
+ spec.executables = ["hermes_health_check"]
28
28
  spec.require_paths = ["lib"]
29
29
 
30
30
  spec.add_dependency "dry-struct", "~> 1"
@@ -41,4 +41,5 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency "vcr"
42
42
  spec.add_development_dependency "pg"
43
43
  spec.add_development_dependency "newrelic_rpm"
44
+ spec.add_development_dependency "ddtrace"
44
45
  end
data/lib/hermes.rb CHANGED
@@ -24,6 +24,8 @@ require "hermes/retryable_event_producer"
24
24
  require "hermes/producer_error_handler"
25
25
  require "hermes/producer_error_handler/null_handler"
26
26
  require "hermes/producer_error_handler/safe_handler"
27
+ require "hermes/tracers"
28
+ require "hermes/checks"
27
29
  require "active_support"
28
30
  require "active_support/core_ext/string"
29
31
  require "active_record"
@@ -0,0 +1,5 @@
1
+ module Hermes
2
+ module Checks
3
+ autoload :HealthCheck, "hermes/checks/health_check"
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ module Hermes
2
+ module Checks
3
+ class HealthCheck
4
+ def self.check
5
+ broker = Hutch::Broker.new
6
+ broker.connect
7
+ broker.disconnect
8
+ ""
9
+ rescue StandardError => e
10
+ "[Hermes - #{e.message}] "
11
+ end
12
+ end
13
+ end
14
+ end
@@ -4,7 +4,7 @@ module Hermes
4
4
  :background_processor, :enqueue_method, :event_handler, :rpc_call_timeout,
5
5
  :instrumenter, :distributed_tracing_database_uri, :distributed_tracing_database_table,
6
6
  :distributes_tracing_mapper, :database_error_handler, :error_notification_service, :producer_error_handler,
7
- :producer_error_handler_job_class, :producer_retryable, :logger_params_filter
7
+ :producer_error_handler_job_class, :producer_retryable, :logger_params_filter, :tracer
8
8
 
9
9
  def configure_hutch
10
10
  yield hutch
@@ -82,14 +82,14 @@ module Hermes
82
82
  attr_reader :original_hutch_config
83
83
  private :original_hutch_config
84
84
 
85
- attr_accessor :uri, :force_publisher_confirms, :enable_http_api_use
85
+ attr_accessor :uri, :force_publisher_confirms, :enable_http_api_use, :tracer
86
86
 
87
87
  def initialize(original_hutch_config: Hutch::Config)
88
88
  @original_hutch_config = original_hutch_config
89
89
  end
90
90
 
91
91
  def commit_config
92
- original_hutch_config.set(:tracer, Hutch::Tracers::NewRelic) if Object.const_defined?("NewRelic")
92
+ original_hutch_config.set(:tracer, tracer) if tracer
93
93
  original_hutch_config.set(:force_publisher_confirms, force_publisher_confirms)
94
94
  original_hutch_config.set(:uri, uri)
95
95
  end
@@ -105,6 +105,13 @@ module Hermes
105
105
 
106
106
  @enable_http_api_use ||= false
107
107
  end
108
+
109
+ def tracer
110
+ return @tracer if @tracer
111
+ return Hermes::Tracers::Datadog if Object.const_defined?("Datadog")
112
+ return Hutch::Tracers::NewRelic if Object.const_defined?("NewRelic")
113
+ Hutch::Tracers::NullTracer
114
+ end
108
115
  end
109
116
  private_constant :HutchConfig
110
117
  end
@@ -2,7 +2,7 @@ require "hutch"
2
2
 
3
3
  module Hermes
4
4
  class ConsumerBuilder
5
- def build(event_class)
5
+ def build(event_class, consumer_config: -> {})
6
6
  queue = queue_name_from_event(event_class)
7
7
  routing_key = event_class.routing_key
8
8
  consumer_name = consumer_name_from_event(event_class)
@@ -12,6 +12,7 @@ module Hermes
12
12
 
13
13
  consume routing_key
14
14
  queue_name queue
15
+ instance_exec(&consumer_config)
15
16
 
16
17
  define_method :process do |message|
17
18
  instrumenter.instrument("Hermes.Consumer.process") do
@@ -84,5 +84,9 @@ module Hermes
84
84
  def self.objects_resolver
85
85
  Object
86
86
  end
87
+
88
+ def self.consumer_builder
89
+ Hermes::ConsumerBuilder.new
90
+ end
87
91
  end
88
92
  end
@@ -5,25 +5,27 @@ module Hermes
5
5
  attr_reader :container, :consumer_builder
6
6
  private :container, :consumer_builder
7
7
 
8
- def initialize
9
- @container = Dry::Container.new
10
- @consumer_builder = Hermes::ConsumerBuilder.new
8
+ def initialize(container: Dry::Container.new, consumer_builder: Hermes::DependenciesContainer["consumer_builder"])
9
+ @container = container
10
+ @consumer_builder = consumer_builder
11
11
  end
12
12
 
13
13
  def handle_events(&block)
14
14
  instance_exec(&block)
15
15
  end
16
16
 
17
- def handle(event_class, with:, async: true, rpc: false)
17
+ def handle(event_class, with:, async: true, rpc: false, consumer_config: -> {})
18
18
  handler = with
19
19
  options = {
20
20
  async: async,
21
- rpc: rpc
21
+ rpc: rpc,
22
+ consumer_config: consumer_config
22
23
  }
23
- consumer = build_consumer_for_event(event_class)
24
+ consumer = build_consumer_for_event(event_class, consumer_config)
24
25
 
25
- registration = Registration.new(handler, consumer, options)
26
- container.register(event_class, registration)
26
+ Registration.new(handler, consumer, options).tap do |registration|
27
+ container.register(event_class, registration)
28
+ end
27
29
  end
28
30
 
29
31
  def registration_for(event_class)
@@ -32,8 +34,8 @@ module Hermes
32
34
 
33
35
  private
34
36
 
35
- def build_consumer_for_event(event_class)
36
- consumer_builder.build(event_class)
37
+ def build_consumer_for_event(event_class, consumer_config)
38
+ consumer_builder.build(event_class, consumer_config: consumer_config)
37
39
  end
38
40
 
39
41
  class Registration
@@ -52,6 +54,10 @@ module Hermes
52
54
  def rpc?
53
55
  options.fetch(:rpc) == true
54
56
  end
57
+
58
+ def consumer_config
59
+ optons.fetch(:consumer_config)
60
+ end
55
61
  end
56
62
  end
57
63
  end
data/lib/hermes/logger.rb CHANGED
@@ -17,6 +17,10 @@ module Hermes
17
17
  backend.info "[Hutch] published event to: #{routing_key}, properties: #{properties}, body: #{strip_sensitive_info(body)} at #{timestamp}"
18
18
  end
19
19
 
20
+ def log_health_check_failure(error)
21
+ backend.info "[Hermes] health check failed: #{error}"
22
+ end
23
+
20
24
  private
21
25
 
22
26
  def strip_sensitive_info(body)
@@ -2,7 +2,7 @@ module Hermes
2
2
  class Logger
3
3
  class ParamsFilter
4
4
  SENSITIVE_ATTRIBUTES_KEYWORDS = %w(token password credit_card card_number security_code verification_value
5
- private_key signature api_key secret_key publishable_key).freeze
5
+ private_key signature api_key secret_key publishable_key client_key client_secret secret).freeze
6
6
  STRIPPED_VALUE = "[STRIPPED]".freeze
7
7
 
8
8
  private_constant :SENSITIVE_ATTRIBUTES_KEYWORDS, :STRIPPED_VALUE
@@ -16,7 +16,7 @@ module Hermes
16
16
  end
17
17
 
18
18
  def call(attribute, value)
19
- if sensitive_keywords.any? { |sensitive_attribute| attribute.to_s.match(sensitive_attribute) }
19
+ if sensitive_keywords.any? { |sensitive_attribute| attribute.to_s.match(sensitive_attribute) } && value.respond_to?(:to_str)
20
20
  value.gsub!(value, stripped_value)
21
21
  end
22
22
  end
@@ -1,5 +1,5 @@
1
1
  module Hermes
2
2
  module Rb
3
- VERSION = "0.3.0"
3
+ VERSION = "0.6.1"
4
4
  end
5
5
  end
@@ -0,0 +1,5 @@
1
+ module Hermes
2
+ module Tracers
3
+ autoload :Datadog, "hermes/tracers/datadog"
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ require "ddtrace"
2
+
3
+ module Hermes
4
+ module Tracers
5
+ class Datadog
6
+ attr_reader :klass
7
+ private :klass
8
+
9
+ def initialize(klass)
10
+ @klass = klass
11
+ end
12
+
13
+ def handle(message)
14
+ ::Datadog.tracer.trace(klass.class.name, service: "hermes", span_type: "rabbitmq") do
15
+ klass.process(message)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hermes-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Galanciak
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-15 00:00:00.000000000 Z
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -192,11 +192,26 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: ddtrace
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
195
209
  description: A messenger of gods, delivering them via RabbitMQ with a little help
196
210
  from Hutch
197
211
  email:
198
212
  - dev@bookingsync.com
199
- executables: []
213
+ executables:
214
+ - hermes_health_check
200
215
  extensions: []
201
216
  extra_rdoc_files: []
202
217
  files:
@@ -210,12 +225,15 @@ files:
210
225
  - README.md
211
226
  - Rakefile
212
227
  - bin/console
228
+ - bin/hermes_health_check
213
229
  - bin/setup
214
230
  - hermes-rb.gemspec
215
231
  - lib/hermes-rb.rb
216
232
  - lib/hermes.rb
217
233
  - lib/hermes/b_3_propagation_model_headers.rb
218
234
  - lib/hermes/base_event.rb
235
+ - lib/hermes/checks.rb
236
+ - lib/hermes/checks/health_check.rb
219
237
  - lib/hermes/configuration.rb
220
238
  - lib/hermes/consumer_builder.rb
221
239
  - lib/hermes/database_error_handler.rb
@@ -245,6 +263,8 @@ files:
245
263
  - lib/hermes/serializer.rb
246
264
  - lib/hermes/support/matchers/publish_async_message.rb
247
265
  - lib/hermes/trace_context.rb
266
+ - lib/hermes/tracers.rb
267
+ - lib/hermes/tracers/datadog.rb
248
268
  - untitled
249
269
  homepage: https://github.com/BookingSync/hermes-rb
250
270
  licenses: