hanami-events-cloud_pubsub 3.0.7 → 3.1.4

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: 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