pg_eventstore 1.5.0 → 1.6.0
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/CHANGELOG.md +3 -0
- data/README.md +4 -0
- data/docs/subscriptions.md +14 -56
- data/exe/pg-eventstore +16 -0
- data/lib/pg_eventstore/callbacks.rb +16 -0
- data/lib/pg_eventstore/cli/commands/base_command.rb +45 -0
- data/lib/pg_eventstore/cli/commands/callback_handlers/start_cmd_handlers.rb +38 -0
- data/lib/pg_eventstore/cli/commands/help_command.rb +22 -0
- data/lib/pg_eventstore/cli/commands/start_subscriptions_command.rb +96 -0
- data/lib/pg_eventstore/cli/commands/stop_subscriptions_command.rb +22 -0
- data/lib/pg_eventstore/cli/commands.rb +6 -0
- data/lib/pg_eventstore/cli/exit_codes.rb +12 -0
- data/lib/pg_eventstore/cli/parser_options/base_options.rb +46 -0
- data/lib/pg_eventstore/cli/parser_options/default_options.rb +10 -0
- data/lib/pg_eventstore/cli/parser_options/metadata.rb +34 -0
- data/lib/pg_eventstore/cli/parser_options/subscription_options.rb +31 -0
- data/lib/pg_eventstore/cli/parser_options.rb +6 -0
- data/lib/pg_eventstore/cli/parsers/base_parser.rb +33 -0
- data/lib/pg_eventstore/cli/parsers/default_parser.rb +24 -0
- data/lib/pg_eventstore/cli/parsers/subscription_parser.rb +24 -0
- data/lib/pg_eventstore/cli/parsers.rb +5 -0
- data/lib/pg_eventstore/cli/try_to_delete_subscriptions_set.rb +75 -0
- data/lib/pg_eventstore/cli/try_unlock_subscriptions_set.rb +16 -0
- data/lib/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rb +67 -0
- data/lib/pg_eventstore/cli.rb +42 -0
- data/lib/pg_eventstore/extensions/options_extension.rb +53 -8
- data/lib/pg_eventstore/rspec/has_option_matcher.rb +38 -13
- data/lib/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rb +13 -1
- data/lib/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rb +1 -1
- data/lib/pg_eventstore/subscriptions/queries/subscription_command_queries.rb +1 -1
- data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rb +3 -1
- data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +10 -50
- data/lib/pg_eventstore/subscriptions/subscription_feeder_commands/ping.rb +22 -0
- data/lib/pg_eventstore/subscriptions/subscription_feeder_commands.rb +1 -0
- data/lib/pg_eventstore/subscriptions/subscriptions_lifecycle.rb +7 -2
- data/lib/pg_eventstore/subscriptions/subscriptions_manager.rb +44 -10
- data/lib/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rb +1 -1
- data/lib/pg_eventstore/utils.rb +32 -0
- data/lib/pg_eventstore/version.rb +1 -1
- data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +1 -1
- data/lib/pg_eventstore/web/views/home/partials/events.erb +5 -5
- data/lib/pg_eventstore/web/views/home/partials/stream_filter.erb +3 -3
- data/lib/pg_eventstore/web/views/layouts/application.erb +3 -3
- data/lib/pg_eventstore/web/views/subscriptions/index.erb +6 -6
- data/lib/pg_eventstore.rb +5 -2
- data/sig/pg_eventstore/callbacks.rbs +4 -0
- data/sig/pg_eventstore/cli/commands/base_command.rbs +13 -0
- data/sig/pg_eventstore/cli/commands/callback_handlers/start_cmd_handlers.rbs +14 -0
- data/sig/pg_eventstore/cli/commands/help_command.rbs +13 -0
- data/sig/pg_eventstore/cli/commands/start_subscriptions_command.rbs +28 -0
- data/sig/pg_eventstore/cli/commands/stop_subscriptions_command.rbs +11 -0
- data/sig/pg_eventstore/cli/exit_codes.rbs +8 -0
- data/sig/pg_eventstore/cli/parser_options/base_options.rbs +15 -0
- data/sig/pg_eventstore/cli/parser_options/default_options.rbs +8 -0
- data/sig/pg_eventstore/cli/parser_options/metadata.rbs +11 -0
- data/sig/pg_eventstore/cli/parser_options/subscription_options.rbs +9 -0
- data/sig/pg_eventstore/cli/parsers/base_parser.rbs +18 -0
- data/sig/pg_eventstore/cli/parsers/default_parser.rbs +9 -0
- data/sig/pg_eventstore/cli/parsers/subscription_parser.rbs +9 -0
- data/sig/pg_eventstore/cli/try_to_delete_subscriptions_set.rbs +24 -0
- data/sig/pg_eventstore/cli/try_unlock_subscriptions_set.rbs +7 -0
- data/sig/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rbs +26 -0
- data/sig/pg_eventstore/cli.rbs +10 -0
- data/sig/pg_eventstore/extensions/options_extension.rbs +18 -1
- data/sig/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rbs +8 -0
- data/sig/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rbs +7 -1
- data/sig/pg_eventstore/subscriptions/queries/subscription_command_queries.rbs +1 -1
- data/sig/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rbs +1 -1
- data/sig/pg_eventstore/subscriptions/subscription_feeder.rbs +10 -11
- data/sig/pg_eventstore/subscriptions/subscription_feeder_commands/ping.rbs +11 -0
- data/sig/pg_eventstore/subscriptions/subscriptions_lifecycle.rbs +1 -1
- data/sig/pg_eventstore/subscriptions/subscriptions_manager.rbs +13 -1
- data/sig/pg_eventstore/utils.rbs +2 -0
- data/sig/pg_eventstore.rbs +2 -8
- metadata +44 -3
@@ -36,20 +36,32 @@ module PgEventstore
|
|
36
36
|
attr_reader :config
|
37
37
|
private :config
|
38
38
|
|
39
|
-
def_delegators :@subscription_feeder, :stop, :
|
39
|
+
def_delegators :@subscription_feeder, :stop, :running?
|
40
|
+
def_delegators :@subscriptions_lifecycle, :force_lock!
|
40
41
|
|
41
42
|
# @param config [PgEventstore::Config]
|
42
43
|
# @param set_name [String]
|
43
44
|
# @param max_retries [Integer, nil] max number of retries of failed SubscriptionsSet
|
44
45
|
# @param retries_interval [Integer, nil] a delay between retries of failed SubscriptionsSet
|
45
|
-
|
46
|
+
# @param force_lock [Boolean] whether to force-lock subscriptions
|
47
|
+
def initialize(config:, set_name:, max_retries: nil, retries_interval: nil, force_lock: false)
|
46
48
|
@config = config
|
47
49
|
@set_name = set_name
|
50
|
+
@subscriptions_set_lifecycle = SubscriptionsSetLifecycle.new(
|
51
|
+
config_name,
|
52
|
+
{
|
53
|
+
name: set_name,
|
54
|
+
max_restarts_number: max_retries || config.subscriptions_set_max_retries,
|
55
|
+
time_between_restarts: retries_interval || config.subscriptions_set_retries_interval
|
56
|
+
}
|
57
|
+
)
|
58
|
+
@subscriptions_lifecycle = SubscriptionsLifecycle.new(
|
59
|
+
config_name, @subscriptions_set_lifecycle, force_lock: force_lock
|
60
|
+
)
|
48
61
|
@subscription_feeder = SubscriptionFeeder.new(
|
49
|
-
config_name:
|
50
|
-
|
51
|
-
|
52
|
-
retries_interval: retries_interval || config.subscriptions_set_retries_interval
|
62
|
+
config_name: config_name,
|
63
|
+
subscriptions_set_lifecycle: @subscriptions_set_lifecycle,
|
64
|
+
subscriptions_lifecycle: @subscriptions_lifecycle
|
53
65
|
)
|
54
66
|
end
|
55
67
|
|
@@ -97,30 +109,52 @@ module PgEventstore
|
|
97
109
|
failed_subscription_notifier: failed_subscription_notifier
|
98
110
|
)
|
99
111
|
|
100
|
-
@
|
112
|
+
@subscriptions_lifecycle.runners.push(runner)
|
101
113
|
true
|
102
114
|
end
|
103
115
|
|
104
116
|
# @return [Array<PgEventstore::Subscription>]
|
105
117
|
def subscriptions
|
106
|
-
@
|
118
|
+
@subscriptions_lifecycle.subscriptions.map(&:dup)
|
107
119
|
end
|
108
120
|
|
109
121
|
# @return [PgEventstore::SubscriptionsSet, nil]
|
110
122
|
def subscriptions_set
|
111
|
-
@
|
123
|
+
@subscriptions_set_lifecycle.subscriptions_set&.dup
|
124
|
+
end
|
125
|
+
|
126
|
+
# @return [PgEventstore::BasicRunner]
|
127
|
+
# @raise [PgEventstore::SubscriptionAlreadyLockedError]
|
128
|
+
def start!
|
129
|
+
run_cli_callbacks do
|
130
|
+
@subscription_feeder.start
|
131
|
+
end
|
112
132
|
end
|
113
133
|
|
114
134
|
# @return [PgEventstore::BasicRunner, nil]
|
115
135
|
def start
|
116
|
-
|
136
|
+
start!
|
117
137
|
rescue PgEventstore::SubscriptionAlreadyLockedError => e
|
118
138
|
PgEventstore.logger&.warn(e.message)
|
119
139
|
nil
|
120
140
|
end
|
121
141
|
|
142
|
+
# @return [Symbol]
|
143
|
+
def config_name
|
144
|
+
@config.name
|
145
|
+
end
|
146
|
+
|
122
147
|
private
|
123
148
|
|
149
|
+
# @return [Object] the result of the passed block
|
150
|
+
def run_cli_callbacks
|
151
|
+
return yield unless defined?(::PgEventstore::CLI)
|
152
|
+
|
153
|
+
PgEventstore::CLI.callbacks.run_callbacks(:start_manager, self) do
|
154
|
+
yield
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
124
158
|
# @param middlewares [Array<Symbol>, nil]
|
125
159
|
# @param handler [#call]
|
126
160
|
# @return [Proc]
|
@@ -27,7 +27,7 @@ module PgEventstore
|
|
27
27
|
|
28
28
|
# @return [PgEventstore::SubscriptionsSet]
|
29
29
|
def persisted_subscriptions_set
|
30
|
-
@subscriptions_set ||= SubscriptionsSet.using_connection(@config_name).create(
|
30
|
+
@subscriptions_set ||= SubscriptionsSet.using_connection(@config_name).create(@subscriptions_set_attrs)
|
31
31
|
end
|
32
32
|
|
33
33
|
# @return [void]
|
data/lib/pg_eventstore/utils.rb
CHANGED
@@ -69,6 +69,38 @@ module PgEventstore
|
|
69
69
|
def original_global_position(raw_event)
|
70
70
|
raw_event['link'] ? raw_event['link']['global_position'] : raw_event['global_position']
|
71
71
|
end
|
72
|
+
|
73
|
+
# @param message [String]
|
74
|
+
# @return [void]
|
75
|
+
def deprecation_warning(message)
|
76
|
+
PgEventstore.logger&.warn("\e[31m[DEPRECATED]: #{message}\e[0m")
|
77
|
+
end
|
78
|
+
|
79
|
+
# @param file_path [String]
|
80
|
+
# @param content [String]
|
81
|
+
# @return [void]
|
82
|
+
def write_to_file(file_path, content)
|
83
|
+
file = File.open(file_path, "w")
|
84
|
+
file.write(content)
|
85
|
+
file.close
|
86
|
+
end
|
87
|
+
|
88
|
+
# @param file_path [String]
|
89
|
+
# @return [void]
|
90
|
+
def remove_file(file_path)
|
91
|
+
File.delete(file_path)
|
92
|
+
rescue Errno::ENOENT
|
93
|
+
end
|
94
|
+
|
95
|
+
# @param file_path [String]
|
96
|
+
# @return [String, nil]
|
97
|
+
def read_pid(file_path)
|
98
|
+
file = File.open(file_path, "r")
|
99
|
+
file.readline.strip.tap do
|
100
|
+
file.close
|
101
|
+
end
|
102
|
+
rescue Errno::ENOENT
|
103
|
+
end
|
72
104
|
end
|
73
105
|
end
|
74
106
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<select name="filter[events][]" class="form-control mb-2" data-placeholder="Event type" data-url="<%= url('/event_types_filtering') %>">
|
4
4
|
<option></option>
|
5
5
|
<% if event_type %>
|
6
|
-
<option value="<%= event_type %>" selected><%= event_type %></option>
|
6
|
+
<option value="<%= h event_type %>" selected><%= h event_type %></option>
|
7
7
|
<% end %>
|
8
8
|
</select>
|
9
9
|
</div>
|
@@ -2,11 +2,11 @@
|
|
2
2
|
<tr>
|
3
3
|
<td><%= event.global_position %></td>
|
4
4
|
<td><%= event.stream_revision %></td>
|
5
|
-
<td><%= event.stream.context %></td>
|
6
|
-
<td><%= event.stream.stream_name %></td>
|
5
|
+
<td><%= h event.stream.context %></td>
|
6
|
+
<td><%= h event.stream.stream_name %></td>
|
7
7
|
<td><a href="<%= stream_path(event) %>"><%= event.stream.stream_id %></a></td>
|
8
8
|
<td>
|
9
|
-
<%= event.type %>
|
9
|
+
<%= h event.type %>
|
10
10
|
<% if event.link %>
|
11
11
|
<i class="fa fa-link"></i>
|
12
12
|
<% end %>
|
@@ -19,9 +19,9 @@
|
|
19
19
|
<tr class="event-payload d-none">
|
20
20
|
<td colspan="8">
|
21
21
|
<strong>Data:</strong>
|
22
|
-
<pre><%= JSON.pretty_generate(event.data) %></pre>
|
22
|
+
<pre><%= h JSON.pretty_generate(event.data) %></pre>
|
23
23
|
<strong>Metadata:</strong>
|
24
|
-
<pre><%= JSON.pretty_generate(event.metadata) %></pre>
|
24
|
+
<pre><%= h JSON.pretty_generate(event.metadata) %></pre>
|
25
25
|
</td>
|
26
26
|
</tr>
|
27
27
|
<% end %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<select name="filter[streams][][context]" class="form-control mb-2" data-placeholder="Context" data-url="<%= url('/stream_contexts_filtering') %>">
|
4
4
|
<option></option>
|
5
5
|
<% if stream[:context] %>
|
6
|
-
<option value="<%= stream[:context] %>" selected><%= stream[:context] %></option>
|
6
|
+
<option value="<%= h stream[:context] %>" selected><%= h stream[:context] %></option>
|
7
7
|
<% end %>
|
8
8
|
</select>
|
9
9
|
</div>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<select name="filter[streams][][stream_name]" class="form-control mb-2" data-placeholder="Stream name" data-url="<%= url('/stream_names_filtering') %>">
|
12
12
|
<option></option>
|
13
13
|
<% if stream[:stream_name] %>
|
14
|
-
<option value="<%= stream[:stream_name] %>" selected><%= stream[:stream_name] %></option>
|
14
|
+
<option value="<%= h stream[:stream_name] %>" selected><%= h stream[:stream_name] %></option>
|
15
15
|
<% end %>
|
16
16
|
</select>
|
17
17
|
</div>
|
@@ -19,7 +19,7 @@
|
|
19
19
|
<select name="filter[streams][][stream_id]" class="form-control mb-2" data-placeholder="Stream ID" data-url="<%= url('/stream_ids_filtering') %>">
|
20
20
|
<option></option>
|
21
21
|
<% if stream[:stream_id] %>
|
22
|
-
<option value="<%= stream[:stream_id] %>" selected><%= stream[:stream_id] %></option>
|
22
|
+
<option value="<%= h stream[:stream_id] %>" selected><%= h stream[:stream_id] %></option>
|
23
23
|
<% end %>
|
24
24
|
</select>
|
25
25
|
</div>
|
@@ -82,13 +82,13 @@
|
|
82
82
|
<ul class="navbar-right" style="height: 29px;">
|
83
83
|
<li class="nav-item dropdown open" style="padding-left: 15px;">
|
84
84
|
<a href="javascript: void(0);" class="user-profile dropdown-toggle" aria-haspopup="true" id="navbarDropdown" data-toggle="dropdown" aria-expanded="false">
|
85
|
-
<strong>Current config:</strong> <%= current_config.inspect %>
|
85
|
+
<strong>Current config:</strong> <%= h current_config.inspect %>
|
86
86
|
</a>
|
87
87
|
<div class="dropdown-menu dropdown-usermenu pull-right" aria-labelledby="navbarDropdown">
|
88
88
|
<% PgEventstore.available_configs.each do |config| %>
|
89
89
|
<form action="<%= url('/change_config') %>" method="POST">
|
90
|
-
<input type="hidden" name="config" value="<%= config %>">
|
91
|
-
<button type="submit" class="dropdown-item"><%= config.inspect %></button>
|
90
|
+
<input type="hidden" name="config" value="<%= h config %>">
|
91
|
+
<button type="submit" class="dropdown-item"><%= h config.inspect %></button>
|
92
92
|
</form>
|
93
93
|
<% end %>
|
94
94
|
</div>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<% @set_collection.names.each do |set_name| %>
|
25
25
|
<li class="nav-item">
|
26
26
|
<a class="nav-link <%= "active bg-dark text-white" if @current_set == set_name %>" href="<%= subscriptions_state ? subscriptions_state_url(state: subscriptions_state, set_name: set_name) : subscriptions_url(set_name: set_name) %>">
|
27
|
-
<%= set_name %>
|
27
|
+
<%= h set_name %>
|
28
28
|
</a>
|
29
29
|
</li>
|
30
30
|
<% end %>
|
@@ -86,7 +86,7 @@
|
|
86
86
|
</a>
|
87
87
|
<% end %>
|
88
88
|
<% if PgEventstore::RunnerState::STATES.values_at(:running, :dead).include?(subscriptions_set.state) %>
|
89
|
-
<a class="btn btn-warning" data-confirm="You are about to stop SubscriptionsSet#<%= subscriptions_set.id %>. This will also delete it and will result in stopping all related Subscriptions. Continue?" data-confirm-title="Stop SubscriptionsSet" data-method="post" href="<%= subscriptions_set_cmd_url(subscriptions_set.id, subscriptions_set_cmd('Stop')) %>" data-toggle="tooltip" title="This action will delete Subscriptions Set and release all related Subscriptions.">
|
89
|
+
<a class="btn btn-warning" data-confirm="You are about to stop SubscriptionsSet#<%= subscriptions_set.id %>. This will also delete it and will result in stopping all related Subscriptions. If you used pg_eventstore CLI to start subscriptions - the related process will also be stopped. Continue?" data-confirm-title="Stop SubscriptionsSet" data-method="post" href="<%= subscriptions_set_cmd_url(subscriptions_set.id, subscriptions_set_cmd('Stop')) %>" data-toggle="tooltip" title="This action will delete Subscriptions Set and release all related Subscriptions.">
|
90
90
|
Stop
|
91
91
|
</a>
|
92
92
|
<% end %>
|
@@ -98,7 +98,7 @@
|
|
98
98
|
<% if subscriptions_set.last_error %>
|
99
99
|
<tr class="collapse" id="last-set-error-<%= subscriptions_set.id %>">
|
100
100
|
<td colspan="9">
|
101
|
-
<pre><%= JSON.pretty_generate(subscriptions_set.last_error) %></pre>
|
101
|
+
<pre><%= h JSON.pretty_generate(subscriptions_set.last_error) %></pre>
|
102
102
|
</td>
|
103
103
|
</tr>
|
104
104
|
<% end %>
|
@@ -151,7 +151,7 @@
|
|
151
151
|
<% subscriptions.each do |subscription| %>
|
152
152
|
<tr>
|
153
153
|
<td><%= subscription.id %></td>
|
154
|
-
<td><%= subscription.name %></td>
|
154
|
+
<td><%= h subscription.name %></td>
|
155
155
|
<td><%= subscription.total_processed_events %></td>
|
156
156
|
<td>
|
157
157
|
<a data-toggle="collapse" href="#options-<%= subscription.id %>" aria-controls="options-<%= subscription.id %>" role="button" aria-expanded="false" class="d-inline-block text-nowrap">
|
@@ -209,13 +209,13 @@
|
|
209
209
|
</tr>
|
210
210
|
<tr class="collapse" id="options-<%= subscription.id %>">
|
211
211
|
<td colspan="16">
|
212
|
-
<pre><%= JSON.pretty_generate(subscription.options) %></pre>
|
212
|
+
<pre><%= h JSON.pretty_generate(subscription.options) %></pre>
|
213
213
|
</td>
|
214
214
|
</tr>
|
215
215
|
<% if subscription.last_error %>
|
216
216
|
<tr class="collapse" id="last-error-<%= subscription.id %>">
|
217
217
|
<td colspan="16">
|
218
|
-
<pre><%= JSON.pretty_generate(subscription.last_error) %></pre>
|
218
|
+
<pre><%= h JSON.pretty_generate(subscription.last_error) %></pre>
|
219
219
|
</td>
|
220
220
|
</tr>
|
221
221
|
<% end %>
|
data/lib/pg_eventstore.rb
CHANGED
@@ -74,13 +74,16 @@ module PgEventstore
|
|
74
74
|
# @param subscription_set [String]
|
75
75
|
# @param max_retries [Integer, nil] max number of retries of failed SubscriptionsSet
|
76
76
|
# @param retries_interval [Integer, nil] a delay between retries of failed SubscriptionsSet
|
77
|
+
# @param force_lock [Boolean] whether to force-lock subscriptions
|
77
78
|
# @return [PgEventstore::SubscriptionsManager]
|
78
|
-
def subscriptions_manager(config_name = :default, subscription_set:, max_retries: nil, retries_interval: nil
|
79
|
+
def subscriptions_manager(config_name = :default, subscription_set:, max_retries: nil, retries_interval: nil,
|
80
|
+
force_lock: false)
|
79
81
|
SubscriptionsManager.new(
|
80
82
|
config: config(config_name),
|
81
83
|
set_name: subscription_set,
|
82
84
|
max_retries: max_retries,
|
83
|
-
retries_interval: retries_interval
|
85
|
+
retries_interval: retries_interval,
|
86
|
+
force_lock: force_lock
|
84
87
|
)
|
85
88
|
end
|
86
89
|
|
@@ -2,6 +2,8 @@ module PgEventstore
|
|
2
2
|
class Callbacks
|
3
3
|
def initialize: () -> void
|
4
4
|
|
5
|
+
def clear: -> void
|
6
|
+
|
5
7
|
# _@param_ `action` — an object, that represents your action. In most cases you want to use a symbol there
|
6
8
|
#
|
7
9
|
# _@param_ `filter` — callback filter. Supported values are :before, :after and :around
|
@@ -9,6 +11,8 @@ module PgEventstore
|
|
9
11
|
# _@param_ `callback`
|
10
12
|
def define_callback: (untyped action, Symbol filter, _Callback callback) -> void
|
11
13
|
|
14
|
+
def remove_callback: (untyped action, Symbol filter, _Callback callback) -> void
|
15
|
+
|
12
16
|
# _@param_ `action` — an action to run
|
13
17
|
def run_callbacks: (untyped action, *untyped args, **untyped kwargs) ?{ () -> untyped } -> untyped
|
14
18
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class BaseCommand
|
5
|
+
attr_reader options: PgEventstore::CLI::ParserOptions::BaseOptions
|
6
|
+
|
7
|
+
%a{rbs:test:skip} def initialize: (PgEventstore::CLI::ParserOptions::BaseOptions options) -> untyped
|
8
|
+
|
9
|
+
def call: -> Integer
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
module CallbackHandlers
|
5
|
+
class StartCmdHandlers
|
6
|
+
def self.handle_start_up: (Proc action, PgEventstore::SubscriptionsManager manager) -> void
|
7
|
+
|
8
|
+
def self.register_managers: (Set[PgEventstore::SubscriptionsManager] subscription_managers,
|
9
|
+
PgEventstore::SubscriptionsManager manager) -> void
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class HelpCommand
|
5
|
+
attr_reader options: PgEventstore::CLI::ParserOptions::BaseOptions
|
6
|
+
|
7
|
+
def initialize: (PgEventstore::CLI::ParserOptions::BaseOptions options) -> void
|
8
|
+
|
9
|
+
%a{rbs:test:skip} def call: -> Integer
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class StartSubscriptionsCommand
|
5
|
+
KEEP_ALIVE_INTERVAL: Integer
|
6
|
+
|
7
|
+
@running: bool
|
8
|
+
@subscription_managers: Set[PgEventstore::SubscriptionsManager]
|
9
|
+
|
10
|
+
def initialize: (PgEventstore::CLI::ParserOptions::BaseOptions options) -> void
|
11
|
+
|
12
|
+
%a{rbs:test:skip} def call: -> Integer
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def attach_callbacks: -> void
|
17
|
+
|
18
|
+
def keep_process_alive: -> void
|
19
|
+
|
20
|
+
def persist_pid: -> void
|
21
|
+
|
22
|
+
def running_subscriptions?: -> bool
|
23
|
+
|
24
|
+
def setup_killsig: -> void
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module ParserOptions
|
4
|
+
class BaseOptions
|
5
|
+
include PgEventstore::Extensions::OptionsExtension
|
6
|
+
|
7
|
+
def attach_parser_handlers: (OptionParser parser) -> void
|
8
|
+
|
9
|
+
def option: (Symbol option) -> PgEventstore::Extensions::OptionsExtension::Option
|
10
|
+
|
11
|
+
def to_parser_opts: (Symbol option) -> Array[String]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
module Parsers
|
4
|
+
class BaseParser
|
5
|
+
@parser: OptionParser
|
6
|
+
|
7
|
+
def self.banner: -> String
|
8
|
+
|
9
|
+
attr_reader args: Array[String]
|
10
|
+
attr_reader options: PgEventstore::CLI::ParserOptions::BaseOptions
|
11
|
+
|
12
|
+
def initialize: (Array[String] args, PgEventstore::CLI::ParserOptions::BaseOptions options) -> void
|
13
|
+
|
14
|
+
def parse: -> [Array[String], PgEventstore::CLI::ParserOptions::BaseOptions]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
class TryToDeleteSubscriptionsSet
|
4
|
+
def self.try_to_delete: (Symbol config_name, Integer subscriptions_set_id) -> bool
|
5
|
+
|
6
|
+
attr_reader config_name: Symbol
|
7
|
+
attr_reader subscriptions_set_id: Integer
|
8
|
+
|
9
|
+
def initialize: (Symbol config_name, Integer subscriptions_set_id) -> void
|
10
|
+
|
11
|
+
def try_to_delete: -> bool
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def config: -> PgEventstore::Config
|
16
|
+
|
17
|
+
def connection: -> PgEventstore::Connection
|
18
|
+
|
19
|
+
def subscriptions_set_commands_queries: -> PgEventstore::SubscriptionsSetCommandQueries
|
20
|
+
|
21
|
+
def subscriptions_set_queries: -> PgEventstore::SubscriptionsSetQueries
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
class WaitForSubscriptionsSetShutdown
|
4
|
+
SHUTDOWN_CHECK_INTERVAL: Float
|
5
|
+
|
6
|
+
def self.wait_for_shutdown: (Symbol config_name, Integer subscriptions_set_id) -> bool
|
7
|
+
|
8
|
+
attr_reader config_name: Symbol
|
9
|
+
attr_reader subscriptions_set_id: Integer
|
10
|
+
|
11
|
+
def initialize: (Symbol config_name, Integer subscriptions_set_id) -> void
|
12
|
+
|
13
|
+
def wait_for_shutdown: -> bool
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def config: -> PgEventstore::Config
|
18
|
+
|
19
|
+
def connection: -> PgEventstore::Connection
|
20
|
+
|
21
|
+
def find_set!: -> PgEventstore::SubscriptionsSet
|
22
|
+
|
23
|
+
def subscriptions_set_queries: -> PgEventstore::SubscriptionsSetQueries
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module PgEventstore
|
2
|
+
module CLI
|
3
|
+
COMMANDS: Hash[Array[String], singleton(PgEventstore::CLI::Commands::BaseCommand)]
|
4
|
+
OPTIONS_PARSER: Hash[String, [singleton(PgEventstore::CLI::Parsers::BaseParser), singleton(PgEventstore::CLI::ParserOptions::BaseOptions)]]
|
5
|
+
|
6
|
+
def self.callbacks: -> PgEventstore::Callbacks
|
7
|
+
|
8
|
+
def self.execute: (Array[String] args) -> void
|
9
|
+
end
|
10
|
+
end
|
@@ -1,6 +1,23 @@
|
|
1
1
|
module PgEventstore
|
2
2
|
module Extensions
|
3
3
|
module OptionsExtension
|
4
|
+
class Option
|
5
|
+
attr_reader name: Symbol
|
6
|
+
attr_reader metadata: untyped?
|
7
|
+
|
8
|
+
def initialize: (Symbol name, ?untyped? metadata) -> untyped
|
9
|
+
|
10
|
+
def ==: (untyped other_option) -> bool
|
11
|
+
|
12
|
+
def eql?: (untyped other_option) -> bool
|
13
|
+
|
14
|
+
def hash: () -> Integer
|
15
|
+
end
|
16
|
+
|
17
|
+
class Options
|
18
|
+
def []: (Symbol option) -> PgEventstore::Extensions::OptionsExtension::Option?
|
19
|
+
end
|
20
|
+
|
4
21
|
def self.included: (untyped klass) -> untyped
|
5
22
|
|
6
23
|
def initialize: (**untyped options) -> void
|
@@ -25,7 +42,7 @@ module PgEventstore
|
|
25
42
|
# _@param_ `opt_name` — option name
|
26
43
|
#
|
27
44
|
# _@param_ `blk` — provide define value using block. It will be later evaluated in the context of your object to determine the default value of the option
|
28
|
-
def option: (Symbol opt_name) ?{ () -> untyped } -> Symbol
|
45
|
+
def option: (Symbol opt_name, ?metadata: untyped?) ?{ () -> untyped } -> Symbol
|
29
46
|
|
30
47
|
def inherited: (untyped klass) -> untyped
|
31
48
|
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module PgEventstore
|
2
2
|
module CommandHandlers
|
3
3
|
class SubscriptionFeederCommands
|
4
|
+
@config_name: Symbol
|
5
|
+
|
6
|
+
@subscription_feeder: PgEventstore::SubscriptionFeeder
|
7
|
+
|
4
8
|
# _@param_ `config_name`
|
5
9
|
#
|
6
10
|
# _@param_ `subscription_feeder`
|
@@ -11,6 +15,10 @@ module PgEventstore
|
|
11
15
|
def queries: () -> PgEventstore::SubscriptionsSetCommandQueries
|
12
16
|
|
13
17
|
def connection: () -> PgEventstore::Connection
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def commands: () -> Array[PgEventstore::SubscriptionFeederCommands::Base]
|
14
22
|
end
|
15
23
|
end
|
16
24
|
end
|