evt-consumer 2.2.0.0 → 2.2.0.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 +4 -4
- data/lib/consumer/consumer.rb +86 -28
- data/lib/consumer/controls/position_store.rb +4 -0
- data/lib/consumer/position_store.rb +1 -1
- data/lib/consumer/postgres +1 -0
- data/lib/consumer/postgres.rb +1 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5fba37af84ef2dfb56fda8f9a02664510d0fe78cd60294fdb0fb1ccbb6b599b
|
4
|
+
data.tar.gz: 75ee1350ef0c083527936e22dcea545af051d815d58a033e987188a974a3f02e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c94763f577b956fafebd263bcf40cf82362a8010c1c026c96fc70e7072fc81d10c6443ba8b7bda872ac65f682f080a633387cfb1bdb882c64586825a4cd7e030
|
7
|
+
data.tar.gz: 42fa7d3fe8985a7bb808ab7eafa9883fa236cc2edb76c1bfe8da657f400390cc891970fb0f32b78d3553620e57bce2b46216723cc48776ede7131080f1b4f50f
|
data/lib/consumer/consumer.rb
CHANGED
@@ -33,10 +33,10 @@ module Consumer
|
|
33
33
|
@position_update_counter ||= 0
|
34
34
|
end
|
35
35
|
|
36
|
-
attr_accessor :session
|
37
|
-
|
38
36
|
attr_accessor :poll_interval_milliseconds
|
39
37
|
|
38
|
+
attr_accessor :session
|
39
|
+
|
40
40
|
dependency :get, MessageStore::Get
|
41
41
|
dependency :position_store, PositionStore
|
42
42
|
dependency :subscription, Subscription
|
@@ -49,34 +49,20 @@ module Consumer
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
53
|
-
logger.
|
52
|
+
def start(&probe)
|
53
|
+
logger.info(tags: [:consumer, :start]) { "Starting consumer: #{self.class.name} (Category: #{category}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
if Defaults.startup_info?
|
56
|
+
print_info
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
logger.info { "Message dispatched (#{LogText.message_data(message_data)})" }
|
62
|
-
rescue => error
|
63
|
-
logger.error { "Error raised (Error Class: #{error.class}, Error Message: #{error.message}, #{LogText.message_data(message_data)})" }
|
64
|
-
error_raised(error, message_data)
|
65
|
-
end
|
66
|
-
|
67
|
-
def start(&probe)
|
68
|
-
logger.info(tag: :*) { "Starting consumer: #{self.class.name} (Category: #{category}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
|
59
|
+
log_info
|
60
|
+
starting if respond_to?(:starting)
|
69
61
|
|
70
62
|
if not MessageStore::StreamName.category?(category)
|
71
63
|
raise Error, "Consumer's stream name must be a category (Stream Name: #{category})"
|
72
64
|
end
|
73
65
|
|
74
|
-
starting() if respond_to?(:starting)
|
75
|
-
|
76
|
-
self.class.handler_registry.each do |handler|
|
77
|
-
logger.info(tag: :*) { "Handler: #{handler.name} (Category: #{category}, Consumer: #{self.class.name})" }
|
78
|
-
end
|
79
|
-
|
80
66
|
_, subscription_thread = ::Actor::Start.(subscription)
|
81
67
|
|
82
68
|
actor_address, actor_thread = Actor.start(self, subscription, include: :thread)
|
@@ -87,24 +73,76 @@ module Consumer
|
|
87
73
|
probe.(self, [actor_thread, subscription_thread], [actor_address, subscription_address])
|
88
74
|
end
|
89
75
|
|
90
|
-
logger.info(
|
76
|
+
logger.info(tags: [:consumer, :start]) { "Started consumer: #{self.class.name} (Category: #{category}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
|
91
77
|
|
92
78
|
AsyncInvocation::Incorrect
|
93
79
|
end
|
94
80
|
|
81
|
+
def print_info
|
82
|
+
STDOUT.puts
|
83
|
+
STDOUT.puts " Consumer: #{self.class.name}"
|
84
|
+
STDOUT.puts " Category: #{category}"
|
85
|
+
STDOUT.puts " Position: #{subscription.position}"
|
86
|
+
STDOUT.puts " Identifier: #{identifier || '(none)'}"
|
87
|
+
|
88
|
+
print_startup_info if respond_to?(:print_startup_info)
|
89
|
+
|
90
|
+
STDOUT.puts " Position Stream: #{position_store.stream_name}"
|
91
|
+
|
92
|
+
STDOUT.puts
|
93
|
+
|
94
|
+
STDOUT.puts " Handlers:"
|
95
|
+
self.class.handler_registry.each do |handler|
|
96
|
+
STDOUT.puts " Handler: #{handler.name}"
|
97
|
+
STDOUT.puts " Messages: #{handler.message_registry.message_types.join(', ')}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def log_info
|
102
|
+
logger.info(tags: [:consumer, :start]) { "Category: #{category} (Consumer: #{self.class.name})" }
|
103
|
+
logger.info(tags: [:consumer, :start]) { "Position: #{subscription.position} (Consumer: #{self.class.name})" }
|
104
|
+
logger.info(tags: [:consumer, :start]) { "Identifier: #{identifier || 'nil'} (Consumer: #{self.class.name})" }
|
105
|
+
|
106
|
+
log_startup_info if respond_to?(:log_startup_info)
|
107
|
+
|
108
|
+
logger.info(tags: [:consumer, :start]) { "Position Update Interval: #{position_update_interval.inspect} (Consumer: #{self.class.name})" }
|
109
|
+
|
110
|
+
logger.info(tags: [:consumer, :start]) { "Poll Interval Milliseconds: #{poll_interval_milliseconds.inspect} (Consumer: #{self.class.name})" }
|
111
|
+
|
112
|
+
self.class.handler_registry.each do |handler|
|
113
|
+
logger.info(tags: [:consumer, :start]) { "Handler: #{handler.name} (Consumer: #{self.class.name})" }
|
114
|
+
logger.info(tags: [:consumer, :start]) { "Messages: #{handler.message_registry.message_types.join(', ')} (Handler: #{handler.name}, Consumer: #{self.class.name})" }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def dispatch(message_data)
|
119
|
+
logger.trace(tags: [:consumer, :dispatch, :message]) { "Dispatching message (#{LogText.message_data(message_data)})" }
|
120
|
+
|
121
|
+
self.class.handler_registry.each do |handler|
|
122
|
+
handler.(message_data, session: session)
|
123
|
+
end
|
124
|
+
|
125
|
+
update_position(message_data.global_position)
|
126
|
+
|
127
|
+
logger.debug(tags: [:consumer, :dispatch, :message]) { "Message dispatched (#{LogText.message_data(message_data)})" }
|
128
|
+
rescue => error
|
129
|
+
logger.error(tag: :*) { "Error raised (Error Class: #{error.class}, Error Message: #{error.message}, #{LogText.message_data(message_data)})" }
|
130
|
+
error_raised(error, message_data)
|
131
|
+
end
|
132
|
+
|
95
133
|
def update_position(position)
|
96
|
-
logger.trace { "Updating position (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
134
|
+
logger.trace(tags: [:consumer, :position]) { "Updating position (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
97
135
|
|
98
136
|
self.position_update_counter += 1
|
99
137
|
|
100
138
|
if position_update_counter >= position_update_interval
|
101
139
|
position_store.put(position)
|
102
140
|
|
103
|
-
logger.debug { "Updated position (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
141
|
+
logger.debug(tags: [:consumer, :position]) { "Updated position (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
104
142
|
|
105
143
|
self.position_update_counter = 0
|
106
144
|
else
|
107
|
-
logger.debug { "Interval not reached; position not updated (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
145
|
+
logger.debug(tags: [:consumer, :position]) { "Interval not reached; position not updated (Global Position: #{position}, Counter: #{position_update_counter}/#{position_update_interval})" }
|
108
146
|
end
|
109
147
|
end
|
110
148
|
|
@@ -116,7 +154,7 @@ module Consumer
|
|
116
154
|
|
117
155
|
module Configure
|
118
156
|
def configure(**kwargs)
|
119
|
-
logger.trace { "Configuring (Category: #{category})" }
|
157
|
+
logger.trace(tag: :consumer) { "Configuring (Category: #{category})" }
|
120
158
|
|
121
159
|
super(**kwargs)
|
122
160
|
|
@@ -129,7 +167,7 @@ module Consumer
|
|
129
167
|
poll_interval_milliseconds: poll_interval_milliseconds
|
130
168
|
)
|
131
169
|
|
132
|
-
logger.debug { "Done configuring (Category: #{category}, Starting Position: #{starting_position})" }
|
170
|
+
logger.debug(tag: :consumer) { "Done configuring (Category: #{category}, Starting Position: #{starting_position})" }
|
133
171
|
end
|
134
172
|
end
|
135
173
|
|
@@ -185,4 +223,24 @@ module Consumer
|
|
185
223
|
end
|
186
224
|
end
|
187
225
|
end
|
226
|
+
|
227
|
+
module Defaults
|
228
|
+
def self.startup_info?
|
229
|
+
StartupInfo.get == 'on'
|
230
|
+
end
|
231
|
+
|
232
|
+
module StartupInfo
|
233
|
+
def self.get
|
234
|
+
ENV.fetch(env_var, default)
|
235
|
+
end
|
236
|
+
|
237
|
+
def self.env_var
|
238
|
+
'STARTUP_INFO'
|
239
|
+
end
|
240
|
+
|
241
|
+
def self.default
|
242
|
+
'on'
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
188
246
|
end
|
@@ -60,7 +60,7 @@ module Consumer
|
|
60
60
|
|
61
61
|
position = super
|
62
62
|
|
63
|
-
logger.
|
63
|
+
logger.debug(tags: [:position_store, :get]) { "Get position done (Position: #{position || '(none)'})" }
|
64
64
|
|
65
65
|
telemetry.record(:get, Telemetry::Get.new(position))
|
66
66
|
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/consumer/Users/sbellware/projects/eventide/consumer-postgres/lib/consumer/postgres
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/consumer/Users/sbellware/projects/eventide/consumer-postgres/lib/consumer/postgres.rb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evt-consumer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0.
|
4
|
+
version: 2.2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Eventide Project
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ntl-actor
|
@@ -132,6 +132,8 @@ files:
|
|
132
132
|
- lib/consumer/position_store.rb
|
133
133
|
- lib/consumer/position_store/substitute.rb
|
134
134
|
- lib/consumer/position_store/telemetry.rb
|
135
|
+
- lib/consumer/postgres
|
136
|
+
- lib/consumer/postgres.rb
|
135
137
|
- lib/consumer/subscription.rb
|
136
138
|
- lib/consumer/subscription/defaults.rb
|
137
139
|
- lib/consumer/subscription/get_batch.rb
|
@@ -155,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
157
|
- !ruby/object:Gem::Version
|
156
158
|
version: '0'
|
157
159
|
requirements: []
|
158
|
-
rubygems_version: 3.
|
160
|
+
rubygems_version: 3.1.2
|
159
161
|
signing_key:
|
160
162
|
specification_version: 4
|
161
163
|
summary: Continuous subscription to a category and message dispatching to handlers
|