hanami-events-cloud_pubsub 3.0.7 → 3.1.4

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: c9761e02377d807f35d3c4e005d4948237bf89204ba7d7dc619d46e91d7bca38
4
- data.tar.gz: fade5b3c8657111ab4e485ad5b03bb584b69d4557cd2416d5e0c358bcf5dc3f4
3
+ metadata.gz: c39281bf95b089129d91b5c00b4e73d03dfe32269c2ee9a57f8af9b69c9ebdee
4
+ data.tar.gz: bf46742e1b0b73347516e53c6f140375cd38b9f5dffe595bc53b724c2d73765a
5
5
  SHA512:
6
- metadata.gz: c89ad6a21c559f77c671b10cd7da95bbd7fbf09a5b0489615e46338677cac4cab129faa2b8e8d69faf6f762cda00d9b0bbf261dd82998634ebc7702e55c4ddb3
7
- data.tar.gz: 0c785630df1938f248a4c5fc2f5ad5470ea8f75e872dada244dcc0229bedebbf8214ee98cbe28c5b745ba8037ce8d40ea48bafea028dc2e30329e01e6f7d623c
6
+ metadata.gz: 14d84ed126a93b4324fccec58cbf91508e18d03cebbc7c6f214716c5974160b7f4f9164ea0e6001fb39d0702ae50596d3a6dc0c12f8f509d52356dee2d17b63e
7
+ data.tar.gz: 3dd0a1882517fbbd041f4e0c8014b50f865d3af4261c6a2d8b93808b5c0be063622a74397157b9ef0cc449d9fcc404eb2ba2316a381c282da5cafad4e3313ca5
data/Gemfile CHANGED
@@ -11,7 +11,7 @@ RUBY_MAJOR = RUBY_VERSION[0].to_i
11
11
 
12
12
  gem 'hanami-events', github: 'hanami/events'
13
13
  gem 'pry'
14
+ gem 'request_id', '~> 0.4.3'
14
15
  gem 'rubocop'
15
16
  gem 'simplecov', require: false
16
- gem 'request_id', '~> 0.4.3'
17
17
  gem 'webrick' if RUBY_MAJOR > 2
data/README.md CHANGED
@@ -119,12 +119,12 @@ end
119
119
  ```
120
120
 
121
121
 
122
- # Prometheus Integration
122
+ # Yabeda Prometheus Integration
123
123
 
124
- If you have the `prometheus-client` gem installed, a `/metrics` endpoint will
124
+ If you have the `yabeda-prometheus` gem installed, a `/metrics` endpoint will
125
125
  be available on the health check server which can be scraped.
126
126
 
127
- All you need to do to activate this is to make sure to `require 'prometheus/client'`.
127
+ All you need to do to activate this is to make sure to `require 'yabeda/prometheus'`.
128
128
 
129
129
  # Testing
130
130
 
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency 'rack'
33
33
 
34
34
  spec.add_development_dependency 'bundler', '~> 2.1'
35
- spec.add_development_dependency 'prometheus-client'
36
35
  spec.add_development_dependency 'rake', '~> 13.0'
37
36
  spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'yabeda-prometheus-mmap'
38
38
  end
@@ -7,7 +7,6 @@ require 'hanami/events/cloud_pubsub/middleware/stack'
7
7
  require 'hanami/events/cloud_pubsub/middleware/logging'
8
8
  require 'hanami/events/cloud_pubsub/runner'
9
9
  require 'hanami/events/cloud_pubsub/errors'
10
- require 'google/cloud/pubsub'
11
10
  require 'dry-configurable'
12
11
 
13
12
  module Hanami
@@ -60,12 +59,13 @@ module Hanami
60
59
  Middleware::Logging.new
61
60
  )
62
61
 
63
- begin
64
- require 'prometheus/client'
65
- require 'hanami/events/cloud_pubsub/middleware/prometheus'
66
- middleware_stack.prepend(Middleware::Prometheus.new)
67
- rescue LoadError
68
- # ok
62
+ if defined?(Yabeda::Prometheus::Exporter)
63
+ begin
64
+ require 'hanami/events/cloud_pubsub/middleware/prometheus'
65
+ middleware_stack << Middleware::Prometheus.new
66
+ rescue LoadError
67
+ # ok
68
+ end
69
69
  end
70
70
 
71
71
  setting :middleware, middleware_stack
@@ -96,6 +96,7 @@ module Hanami
96
96
  end
97
97
 
98
98
  def self.finalize_settings!
99
+ require 'google/cloud/pubsub'
99
100
  conf_hash = config.pubsub
100
101
  conf_hash.each { |key, val| Google::Cloud::Pubsub.configure[key] = val }
101
102
  end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'hanami/cli'
4
- require 'hanami/events/cloud_pubsub'
5
- require 'hanami/events/cloud_pubsub/health_check_server'
6
4
 
7
5
  module Hanami
8
6
  module Events
@@ -55,6 +53,7 @@ module Hanami
55
53
  end
56
54
 
57
55
  def start_server
56
+ require 'hanami/events/cloud_pubsub/health_check_server'
58
57
  server = HealthCheckServer.new(runner, logger)
59
58
  on_shutdown = proc { @event_queue << proc { shutdown } }
60
59
  server.run_in_background(on_shutdown: on_shutdown)
@@ -77,6 +76,7 @@ module Hanami
77
76
  def start_runner
78
77
  logger.debug 'Running in emulator mode' if @emulator
79
78
  logger.info "Starting worker (pid: #{Process.pid})"
79
+ GC.compact if GC.respond_to?(:compact)
80
80
  runner.start
81
81
  end
82
82
 
@@ -86,6 +86,7 @@ module Hanami
86
86
  end
87
87
 
88
88
  def build_runner
89
+ require 'hanami/events/cloud_pubsub'
89
90
  Hanami::Components.resolve 'events'
90
91
  events = Hanami::Components['events']
91
92
  @runner = Runner.new(logger: logger, adapter: events.adapter)
@@ -6,9 +6,13 @@ module Hanami
6
6
  # Errors
7
7
  module Errors
8
8
  class Error < StandardError; end
9
+
9
10
  class TopicNotFoundError < Error; end
11
+
10
12
  class SubscriptionNotFoundError < Error; end
13
+
11
14
  class SubscriptionTopicNameMismatch < Error; end
15
+
12
16
  class NoSubscriberError < Error; end
13
17
  end
14
18
  end
@@ -54,10 +54,8 @@ module Hanami
54
54
 
55
55
  Rack::Builder.new do |builder|
56
56
  builder.use Rack::Deflater
57
- if defined?(::Prometheus::Client)
58
- require 'prometheus/middleware/exporter'
59
- builder.use ::Prometheus::Middleware::Exporter
60
- end
57
+ builder.use Yabeda::Prometheus::Exporter if defined?(Yabeda::Prometheus::Exporter)
58
+
61
59
  builder.run health_endpoint_app
62
60
  end
63
61
  end
@@ -33,11 +33,10 @@ module Hanami
33
33
  conf.cloud_pubsub.each { |blk| blk.call(config) }
34
34
  end
35
35
 
36
- ::Hanami::Events.initialize(
37
- :cloud_pubsub,
38
- pubsub: Google::Cloud::Pubsub.new,
39
- logger: Hanami::Components['logger']
40
- )
36
+ require 'google/cloud/pubsub'
37
+
38
+ opts = { pubsub: Google::Cloud::Pubsub.new, logger: Hanami::Components['logger'] }
39
+ ::Hanami::Events.initialize(:cloud_pubsub, **opts)
41
40
  end
42
41
  end
43
42
  end
@@ -6,23 +6,31 @@ module Hanami
6
6
  module Middleware
7
7
  # Middleware used for logging useful information about an event
8
8
  class Prometheus
9
- attr_reader :events_counter
9
+ LONG_RUNNING_JOB_RUNTIME_BUCKETS = [
10
+ 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, # standard (from Prometheus)
11
+ 30, 60, 120, 300, 1800, 3600, 21_600 # Tasks may be very long-running
12
+ ].freeze
10
13
 
11
- def initialize
12
- require 'prometheus/client'
13
- prometheus = ::Prometheus::Client.registry
14
- @events_counter = prometheus.counter(
14
+ Yabeda.configure do
15
+ counter(
15
16
  :received_pubsub_events,
16
- docstring: 'A counter of received pubsub events',
17
- labels: %i[event_name subscription status]
17
+ tags: %i[event_name subscription status],
18
+ comment: 'A counter of received pubsub events'
18
19
  )
20
+
21
+ histogram :subscriber_runtime, comment: 'A histogram of the subscriber execution time.',
22
+ unit: :seconds,
23
+ per: :message,
24
+ tags: %i[event_name subscription status],
25
+ buckets: LONG_RUNNING_JOB_RUNTIME_BUCKETS
19
26
  end
20
27
 
21
28
  def call(msg, **opts)
29
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
22
30
  status = :running
23
31
 
24
32
  begin
25
- ret = yield(**opts)
33
+ ret = yield(**opts) if block_given?
26
34
  status = :succeeded
27
35
  ret
28
36
  rescue StandardError
@@ -30,10 +38,20 @@ module Hanami
30
38
  raise
31
39
  end
32
40
  ensure
41
+ record_metrics(msg, status, start)
42
+ end
43
+
44
+ private
45
+
46
+ def record_metrics(msg, status, start)
47
+ elapsed = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).round(3)
33
48
  sub = msg.subscription.subscriber.subscription_name
34
49
  event_name = msg.attributes['event_name']
35
50
  labels = { event_name: event_name, subscription: sub, status: status }
36
- events_counter.increment(labels: labels)
51
+ Yabeda.received_pubsub_events.increment(labels, by: 1)
52
+ Yabeda.subscriber_runtime.measure(labels, elapsed)
53
+ rescue StandardError
54
+ # ok
37
55
  end
38
56
  end
39
57
  end
@@ -3,7 +3,7 @@
3
3
  module Hanami
4
4
  module Events
5
5
  module CloudPubsub
6
- VERSION = '3.0.7'
6
+ VERSION = '3.1.4'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-events-cloud_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.7
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-05 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -115,47 +115,47 @@ dependencies:
115
115
  - !ruby/object:Gem::Version
116
116
  version: '2.1'
117
117
  - !ruby/object:Gem::Dependency
118
- name: prometheus-client
118
+ name: rake
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - ">="
121
+ - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '0'
123
+ version: '13.0'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ">="
128
+ - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '0'
130
+ version: '13.0'
131
131
  - !ruby/object:Gem::Dependency
132
- name: rake
132
+ name: rspec
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '13.0'
137
+ version: '3.0'
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '13.0'
144
+ version: '3.0'
145
145
  - !ruby/object:Gem::Dependency
146
- name: rspec
146
+ name: yabeda-prometheus-mmap
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - "~>"
149
+ - - ">="
150
150
  - !ruby/object:Gem::Version
151
- version: '3.0'
151
+ version: '0'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - "~>"
156
+ - - ">="
157
157
  - !ruby/object:Gem::Version
158
- version: '3.0'
158
+ version: '0'
159
159
  description: Makes it easy to use Cloud Pub/Sub with Hanami
160
160
  email:
161
161
  - i.kerseymer@gmail.com
@@ -187,7 +187,6 @@ files:
187
187
  - lib/hanami/events/cloud_pubsub.rb
188
188
  - lib/hanami/events/cloud_pubsub/cli.rb
189
189
  - lib/hanami/events/cloud_pubsub/errors.rb
190
- - lib/hanami/events/cloud_pubsub/handler.rb
191
190
  - lib/hanami/events/cloud_pubsub/health_check_server.rb
192
191
  - lib/hanami/events/cloud_pubsub/integration.rb
193
192
  - lib/hanami/events/cloud_pubsub/listener.rb
File without changes