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 +4 -4
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/hanami-events-cloud_pubsub.gemspec +1 -1
- data/lib/hanami/events/cloud_pubsub.rb +8 -7
- data/lib/hanami/events/cloud_pubsub/cli.rb +3 -2
- data/lib/hanami/events/cloud_pubsub/errors.rb +4 -0
- data/lib/hanami/events/cloud_pubsub/health_check_server.rb +2 -4
- data/lib/hanami/events/cloud_pubsub/integration.rb +4 -5
- data/lib/hanami/events/cloud_pubsub/middleware/prometheus.rb +27 -9
- data/lib/hanami/events/cloud_pubsub/version.rb +1 -1
- metadata +15 -16
- data/lib/hanami/events/cloud_pubsub/handler.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c39281bf95b089129d91b5c00b4e73d03dfe32269c2ee9a57f8af9b69c9ebdee
|
|
4
|
+
data.tar.gz: bf46742e1b0b73347516e53c6f140375cd38b9f5dffe595bc53b724c2d73765a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 14d84ed126a93b4324fccec58cbf91508e18d03cebbc7c6f214716c5974160b7f4f9164ea0e6001fb39d0702ae50596d3a6dc0c12f8f509d52356dee2d17b63e
|
|
7
|
+
data.tar.gz: 3dd0a1882517fbbd041f4e0c8014b50f865d3af4261c6a2d8b93808b5c0be063622a74397157b9ef0cc449d9fcc404eb2ba2316a381c282da5cafad4e3313ca5
|
data/Gemfile
CHANGED
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
|
|
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
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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::
|
|
58
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
prometheus = ::Prometheus::Client.registry
|
|
14
|
-
@events_counter = prometheus.counter(
|
|
14
|
+
Yabeda.configure do
|
|
15
|
+
counter(
|
|
15
16
|
:received_pubsub_events,
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
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.
|
|
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-
|
|
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:
|
|
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:
|
|
132
|
+
name: rspec
|
|
133
133
|
requirement: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
135
|
- - "~>"
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '
|
|
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: '
|
|
144
|
+
version: '3.0'
|
|
145
145
|
- !ruby/object:Gem::Dependency
|
|
146
|
-
name:
|
|
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: '
|
|
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: '
|
|
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
|