message_bus 3.3.6 → 4.0.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/.eslintrc.js +3 -2
- data/.github/workflows/ci.yml +79 -32
- data/.prettierrc +1 -0
- data/CHANGELOG +104 -53
- data/DEV.md +0 -2
- data/Gemfile +0 -27
- data/LICENSE +1 -1
- data/README.md +40 -62
- data/Rakefile +31 -26
- data/assets/message-bus-ajax.js +3 -3
- data/bench/codecs/marshal.rb +1 -1
- data/bench/codecs/packed_string.rb +1 -1
- data/docker-compose.yml +1 -1
- data/examples/bench/bench.lua +2 -2
- data/lib/message_bus/backends/base.rb +8 -3
- data/lib/message_bus/backends/memory.rb +6 -0
- data/lib/message_bus/backends/postgres.rb +29 -16
- data/lib/message_bus/backends/redis.rb +11 -2
- data/lib/message_bus/client.rb +6 -7
- data/lib/message_bus/connection_manager.rb +1 -1
- data/lib/message_bus/distributed_cache.rb +3 -1
- data/lib/message_bus/http_client.rb +2 -2
- data/lib/message_bus/rack/middleware.rb +6 -6
- data/lib/message_bus/rack/thin_ext.rb +2 -1
- data/lib/message_bus/version.rb +1 -1
- data/lib/message_bus.rb +47 -77
- data/message_bus.gemspec +21 -3
- data/package-lock.json +1575 -23
- data/package.json +9 -7
- data/spec/assets/SpecHelper.js +6 -5
- data/spec/assets/message-bus.spec.js +9 -6
- data/spec/helpers.rb +23 -7
- data/spec/integration/http_client_spec.rb +1 -1
- data/spec/lib/fake_async_middleware.rb +1 -0
- data/spec/lib/message_bus/backend_spec.rb +15 -46
- data/spec/lib/message_bus/client_spec.rb +7 -6
- data/spec/lib/message_bus/connection_manager_spec.rb +4 -0
- data/spec/lib/message_bus/distributed_cache_spec.rb +5 -7
- data/spec/lib/message_bus/multi_process_spec.rb +21 -10
- data/spec/lib/message_bus/rack/middleware_spec.rb +8 -44
- data/spec/lib/message_bus/timer_thread_spec.rb +1 -5
- data/spec/lib/message_bus_spec.rb +22 -9
- data/spec/performance/publish.rb +4 -4
- data/spec/spec_helper.rb +8 -9
- data/spec/support/jasmine-browser.json +16 -0
- data/vendor/assets/javascripts/message-bus-ajax.js +3 -3
- metadata +220 -19
- data/assets/application.jsx +0 -121
- data/assets/babel.min.js +0 -25
- data/assets/react-dom.js +0 -19851
- data/assets/react.js +0 -3029
- data/examples/diagnostics/Gemfile +0 -6
- data/examples/diagnostics/config.ru +0 -22
- data/lib/message_bus/diagnostics.rb +0 -62
- data/lib/message_bus/rack/diagnostics.rb +0 -98
- data/spec/assets/support/jasmine.yml +0 -126
- data/spec/assets/support/jasmine_helper.rb +0 -11
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
4
|
require 'message_bus'
|
5
|
-
require 'redis'
|
6
5
|
|
7
6
|
describe MessageBus do
|
8
7
|
before do
|
@@ -10,7 +9,7 @@ describe MessageBus do
|
|
10
9
|
@bus.site_id_lookup do
|
11
10
|
"magic"
|
12
11
|
end
|
13
|
-
@bus.configure(
|
12
|
+
@bus.configure(test_config_for_backend(CURRENT_BACKEND))
|
14
13
|
end
|
15
14
|
|
16
15
|
after do
|
@@ -24,7 +23,8 @@ describe MessageBus do
|
|
24
23
|
@bus.off?.must_equal true
|
25
24
|
end
|
26
25
|
|
27
|
-
it "can call destroy
|
26
|
+
it "can call destroy multiple times" do
|
27
|
+
@bus.destroy
|
28
28
|
@bus.destroy
|
29
29
|
@bus.destroy
|
30
30
|
end
|
@@ -37,6 +37,14 @@ describe MessageBus do
|
|
37
37
|
@bus.after_fork
|
38
38
|
end
|
39
39
|
|
40
|
+
it "destroying immediately after `after_fork` does not lock" do
|
41
|
+
10.times do
|
42
|
+
@bus.on
|
43
|
+
@bus.after_fork
|
44
|
+
@bus.destroy
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
40
48
|
describe "#base_route=" do
|
41
49
|
it "adds leading and trailing slashes" do
|
42
50
|
@bus.base_route = "my/base/route"
|
@@ -98,7 +106,7 @@ describe MessageBus do
|
|
98
106
|
client_ids.must_equal ['a', 'b']
|
99
107
|
end
|
100
108
|
|
101
|
-
it "should recover from a
|
109
|
+
it "should recover from a reset" do
|
102
110
|
data = nil
|
103
111
|
@bus.subscribe("/chuck") do |msg|
|
104
112
|
data = msg.data
|
@@ -107,7 +115,7 @@ describe MessageBus do
|
|
107
115
|
@bus.publish("/chuck", norris: true)
|
108
116
|
@bus.publish("/chuck", norris: true)
|
109
117
|
|
110
|
-
@bus.
|
118
|
+
@bus.backend_instance.reset!
|
111
119
|
|
112
120
|
@bus.publish("/chuck", yeager: true)
|
113
121
|
|
@@ -125,7 +133,7 @@ describe MessageBus do
|
|
125
133
|
@bus.publish("/chuck", norris: true)
|
126
134
|
@bus.publish("/chuck", norris: true)
|
127
135
|
|
128
|
-
@bus.
|
136
|
+
@bus.backend_instance.expire_all_backlogs!
|
129
137
|
|
130
138
|
@bus.publish("/chuck", yeager: true)
|
131
139
|
|
@@ -307,7 +315,7 @@ describe MessageBus do
|
|
307
315
|
end
|
308
316
|
end
|
309
317
|
|
310
|
-
it "should support forking properly
|
318
|
+
it "should support forking properly" do
|
311
319
|
test_never :memory
|
312
320
|
|
313
321
|
data = []
|
@@ -316,7 +324,7 @@ describe MessageBus do
|
|
316
324
|
end
|
317
325
|
|
318
326
|
@bus.publish("/hello", "pre-fork")
|
319
|
-
wait_for(2000) { data.length
|
327
|
+
wait_for(2000) { data.length == 1 }
|
320
328
|
|
321
329
|
if child = Process.fork
|
322
330
|
# The child was forked and we received its PID
|
@@ -328,6 +336,7 @@ describe MessageBus do
|
|
328
336
|
else
|
329
337
|
begin
|
330
338
|
@bus.after_fork
|
339
|
+
GC.start
|
331
340
|
@bus.publish("/hello", "from-fork")
|
332
341
|
ensure
|
333
342
|
exit!(0)
|
@@ -336,7 +345,11 @@ describe MessageBus do
|
|
336
345
|
|
337
346
|
wait_for(2000) { data.length == 3 }
|
338
347
|
|
339
|
-
|
348
|
+
@bus.publish("/hello", "after-fork")
|
349
|
+
|
350
|
+
wait_for(2000) { data.length == 4 }
|
351
|
+
|
352
|
+
data.must_equal(["pre-fork", "from-fork", "continuation", "after-fork"])
|
340
353
|
end
|
341
354
|
|
342
355
|
describe '#register_client_message_filter' do
|
data/spec/performance/publish.rb
CHANGED
@@ -32,8 +32,8 @@ benchmark_subscription_no_trimming = lambda do |bm, backend|
|
|
32
32
|
bus = MessageBus::Instance.new
|
33
33
|
bus.configure(test_config_for_backend(backend))
|
34
34
|
|
35
|
-
bus.
|
36
|
-
bus.
|
35
|
+
bus.backend_instance.max_backlog_size = iterations
|
36
|
+
bus.backend_instance.max_global_backlog_size = iterations
|
37
37
|
|
38
38
|
messages_received = 0
|
39
39
|
bus.after_fork
|
@@ -58,8 +58,8 @@ benchmark_subscription_with_trimming = lambda do |bm, backend|
|
|
58
58
|
bus = MessageBus::Instance.new
|
59
59
|
bus.configure(test_config_for_backend(backend))
|
60
60
|
|
61
|
-
bus.
|
62
|
-
bus.
|
61
|
+
bus.backend_instance.max_backlog_size = (iterations / 10)
|
62
|
+
bus.backend_instance.max_global_backlog_size = (iterations / 10)
|
63
63
|
|
64
64
|
messages_received = 0
|
65
65
|
bus.after_fork
|
data/spec/spec_helper.rb
CHANGED
@@ -11,18 +11,17 @@ require 'minitest/global_expectations'
|
|
11
11
|
|
12
12
|
require_relative "helpers"
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
require "message_bus/backends/#{
|
17
|
-
|
18
|
-
|
14
|
+
CURRENT_BACKEND = (ENV['MESSAGE_BUS_BACKEND'] || :redis).to_sym
|
15
|
+
|
16
|
+
require "message_bus/backends/#{CURRENT_BACKEND}"
|
17
|
+
BACKEND_CLASS = MessageBus::BACKENDS.fetch(CURRENT_BACKEND)
|
18
|
+
|
19
|
+
puts "Running with backend: #{CURRENT_BACKEND}"
|
19
20
|
|
20
21
|
def test_only(*backends)
|
21
|
-
|
22
|
-
skip "Test doesn't apply to #{backend}" unless backends.include?(backend)
|
22
|
+
skip "Test doesn't apply to #{CURRENT_BACKEND}" unless backends.include?(CURRENT_BACKEND)
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_never(*backends)
|
26
|
-
|
27
|
-
skip "Test doesn't apply to #{backend}" if backends.include?(backend)
|
26
|
+
skip "Test doesn't apply to #{CURRENT_BACKEND}" if backends.include?(CURRENT_BACKEND)
|
28
27
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"srcDir": "assets",
|
3
|
+
"srcFiles": [
|
4
|
+
"message-bus.js",
|
5
|
+
"message-bus-ajax.js"
|
6
|
+
],
|
7
|
+
"specDir": "spec/assets",
|
8
|
+
"specFiles": [
|
9
|
+
"message-bus.spec.js"
|
10
|
+
],
|
11
|
+
"helpers": [
|
12
|
+
"SpecHelper.js"
|
13
|
+
],
|
14
|
+
"random": true,
|
15
|
+
"browser": "headlessChrome"
|
16
|
+
}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
// as a fallback if jQuery is not present
|
3
3
|
//
|
4
4
|
// Only implements methods & options used by MessageBus
|
5
|
-
(function(global
|
5
|
+
(function(global) {
|
6
6
|
'use strict';
|
7
7
|
if (!global.MessageBus){
|
8
8
|
throw new Error("MessageBus must be loaded before the ajax adapter");
|
@@ -16,7 +16,7 @@
|
|
16
16
|
for (var name in options.headers){
|
17
17
|
xhr.setRequestHeader(name, options.headers[name]);
|
18
18
|
}
|
19
|
-
xhr.setRequestHeader('Content-Type', 'application/
|
19
|
+
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
20
20
|
if (options.messageBus.chunked){
|
21
21
|
options.messageBus.onProgressListener(xhr);
|
22
22
|
}
|
@@ -31,7 +31,7 @@
|
|
31
31
|
options.complete();
|
32
32
|
}
|
33
33
|
}
|
34
|
-
xhr.send(
|
34
|
+
xhr.send(new URLSearchParams(options.data).toString());
|
35
35
|
return xhr;
|
36
36
|
};
|
37
37
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: message_bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -52,6 +52,216 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: concurrent-ruby
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest-hooks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest-global_expectations
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: http_parser.rb
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: thin
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rack-test
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: puma
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: m
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: byebug
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: oj
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: yard
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: rubocop-discourse
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: rubocop-rspec
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
55
265
|
description: A message bus for rack
|
56
266
|
email:
|
57
267
|
- sam.saffron@gmail.com
|
@@ -62,6 +272,7 @@ files:
|
|
62
272
|
- ".eslintrc.js"
|
63
273
|
- ".github/workflows/ci.yml"
|
64
274
|
- ".gitignore"
|
275
|
+
- ".prettierrc"
|
65
276
|
- ".rubocop.yml"
|
66
277
|
- CHANGELOG
|
67
278
|
- DEV.md
|
@@ -71,13 +282,9 @@ files:
|
|
71
282
|
- LICENSE
|
72
283
|
- README.md
|
73
284
|
- Rakefile
|
74
|
-
- assets/application.jsx
|
75
|
-
- assets/babel.min.js
|
76
285
|
- assets/jquery-1.8.2.js
|
77
286
|
- assets/message-bus-ajax.js
|
78
287
|
- assets/message-bus.js
|
79
|
-
- assets/react-dom.js
|
80
|
-
- assets/react.js
|
81
288
|
- bench/codecs/all_codecs.rb
|
82
289
|
- bench/codecs/marshal.rb
|
83
290
|
- bench/codecs/packed_string.rb
|
@@ -95,8 +302,6 @@ files:
|
|
95
302
|
- examples/chat/config.ru
|
96
303
|
- examples/chat/docker_container/chat.yml
|
97
304
|
- examples/chat/docker_container/update_chat
|
98
|
-
- examples/diagnostics/Gemfile
|
99
|
-
- examples/diagnostics/config.ru
|
100
305
|
- examples/minimal/Gemfile
|
101
306
|
- examples/minimal/config.ru
|
102
307
|
- lib/message_bus.rb
|
@@ -110,13 +315,11 @@ files:
|
|
110
315
|
- lib/message_bus/codec/json.rb
|
111
316
|
- lib/message_bus/codec/oj.rb
|
112
317
|
- lib/message_bus/connection_manager.rb
|
113
|
-
- lib/message_bus/diagnostics.rb
|
114
318
|
- lib/message_bus/distributed_cache.rb
|
115
319
|
- lib/message_bus/http_client.rb
|
116
320
|
- lib/message_bus/http_client/channel.rb
|
117
321
|
- lib/message_bus/http_client/version.rb
|
118
322
|
- lib/message_bus/message.rb
|
119
|
-
- lib/message_bus/rack/diagnostics.rb
|
120
323
|
- lib/message_bus/rack/middleware.rb
|
121
324
|
- lib/message_bus/rack/thin_ext.rb
|
122
325
|
- lib/message_bus/rails/railtie.rb
|
@@ -127,8 +330,6 @@ files:
|
|
127
330
|
- package.json
|
128
331
|
- spec/assets/SpecHelper.js
|
129
332
|
- spec/assets/message-bus.spec.js
|
130
|
-
- spec/assets/support/jasmine.yml
|
131
|
-
- spec/assets/support/jasmine_helper.rb
|
132
333
|
- spec/fixtures/test/Gemfile
|
133
334
|
- spec/fixtures/test/config.ru
|
134
335
|
- spec/helpers.rb
|
@@ -145,14 +346,15 @@ files:
|
|
145
346
|
- spec/lib/message_bus_spec.rb
|
146
347
|
- spec/performance/publish.rb
|
147
348
|
- spec/spec_helper.rb
|
349
|
+
- spec/support/jasmine-browser.json
|
148
350
|
- vendor/assets/javascripts/.gitignore
|
149
351
|
- vendor/assets/javascripts/message-bus-ajax.js
|
150
352
|
- vendor/assets/javascripts/message-bus.js
|
151
|
-
homepage: https://github.com/
|
353
|
+
homepage: https://github.com/discourse/message_bus
|
152
354
|
licenses:
|
153
355
|
- MIT
|
154
356
|
metadata: {}
|
155
|
-
post_install_message:
|
357
|
+
post_install_message:
|
156
358
|
rdoc_options: []
|
157
359
|
require_paths:
|
158
360
|
- lib
|
@@ -160,7 +362,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
362
|
requirements:
|
161
363
|
- - ">="
|
162
364
|
- !ruby/object:Gem::Version
|
163
|
-
version: 2.
|
365
|
+
version: 2.6.0
|
164
366
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
367
|
requirements:
|
166
368
|
- - ">="
|
@@ -168,14 +370,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
370
|
version: '0'
|
169
371
|
requirements: []
|
170
372
|
rubygems_version: 3.1.6
|
171
|
-
signing_key:
|
373
|
+
signing_key:
|
172
374
|
specification_version: 4
|
173
375
|
summary: ''
|
174
376
|
test_files:
|
175
377
|
- spec/assets/SpecHelper.js
|
176
378
|
- spec/assets/message-bus.spec.js
|
177
|
-
- spec/assets/support/jasmine.yml
|
178
|
-
- spec/assets/support/jasmine_helper.rb
|
179
379
|
- spec/fixtures/test/Gemfile
|
180
380
|
- spec/fixtures/test/config.ru
|
181
381
|
- spec/helpers.rb
|
@@ -192,3 +392,4 @@ test_files:
|
|
192
392
|
- spec/lib/message_bus_spec.rb
|
193
393
|
- spec/performance/publish.rb
|
194
394
|
- spec/spec_helper.rb
|
395
|
+
- spec/support/jasmine-browser.json
|
data/assets/application.jsx
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
'use strict';
|
2
|
-
|
3
|
-
class Process extends React.Component {
|
4
|
-
hup() {
|
5
|
-
fetch(
|
6
|
-
`/message-bus/_diagnostics/hup/${this.props.hostname}/${this.props.pid}`,
|
7
|
-
{
|
8
|
-
method: 'POST'
|
9
|
-
}
|
10
|
-
);
|
11
|
-
}
|
12
|
-
|
13
|
-
render() {
|
14
|
-
return (
|
15
|
-
<tr>
|
16
|
-
<td>{this.props.pid}</td>
|
17
|
-
<td>{this.props.full_path}</td>
|
18
|
-
<td>{this.props.hostname}</td>
|
19
|
-
<td>{this.props.uptime} secs</td>
|
20
|
-
<td><button onClick={this.hup.bind(this)}>HUP</button></td>
|
21
|
-
</tr>
|
22
|
-
);
|
23
|
-
}
|
24
|
-
};
|
25
|
-
|
26
|
-
class DiagnosticsApp extends React.Component {
|
27
|
-
constructor(props) {
|
28
|
-
super(props);
|
29
|
-
this.state = {processes: []};
|
30
|
-
}
|
31
|
-
|
32
|
-
componentDidMount() {
|
33
|
-
MessageBus.start();
|
34
|
-
this.ensureSubscribed();
|
35
|
-
}
|
36
|
-
|
37
|
-
discover() {
|
38
|
-
this.ensureSubscribed();
|
39
|
-
|
40
|
-
this.setState({discovering: true});
|
41
|
-
|
42
|
-
var _this = this;
|
43
|
-
fetch(
|
44
|
-
"/message-bus/_diagnostics/discover",
|
45
|
-
{
|
46
|
-
method: "POST"
|
47
|
-
}
|
48
|
-
).then(function() {
|
49
|
-
_this.setState({discovering: false})
|
50
|
-
});
|
51
|
-
}
|
52
|
-
|
53
|
-
ensureSubscribed() {
|
54
|
-
if (this.state.subscribed) { return; }
|
55
|
-
|
56
|
-
MessageBus.callbackInterval = 500;
|
57
|
-
|
58
|
-
MessageBus.subscribe(
|
59
|
-
"/_diagnostics/process-discovery",
|
60
|
-
this.updateProcess.bind(this)
|
61
|
-
);
|
62
|
-
|
63
|
-
this.setState({subscribed: true});
|
64
|
-
}
|
65
|
-
|
66
|
-
updateProcess(data) {
|
67
|
-
const _this = this;
|
68
|
-
const processes = this.state.processes.filter(function(process) {
|
69
|
-
return _this.processUniqueId(process) !== _this.processUniqueId(data);
|
70
|
-
});
|
71
|
-
this.setState({processes: processes.concat([data])});
|
72
|
-
}
|
73
|
-
|
74
|
-
processUniqueId(process) {
|
75
|
-
return process.hostname + process.pid;
|
76
|
-
}
|
77
|
-
|
78
|
-
render() {
|
79
|
-
let disabled = this.state.discovering ? "disabled" : null;
|
80
|
-
|
81
|
-
let _this = this;
|
82
|
-
let processes = this.state.processes.sort(function(a,b) {
|
83
|
-
return _this.processUniqueId(a) < _this.processUniqueId(b) ? -1 : 1;
|
84
|
-
});
|
85
|
-
|
86
|
-
return (
|
87
|
-
<div>
|
88
|
-
<header>
|
89
|
-
<h2>Message Bus Diagnostics</h2>
|
90
|
-
</header>
|
91
|
-
|
92
|
-
<div>
|
93
|
-
<button onClick={this.discover.bind(this)} disabled={disabled}>Discover Processes</button>
|
94
|
-
|
95
|
-
<table>
|
96
|
-
<thead>
|
97
|
-
<tr>
|
98
|
-
<td>pid</td>
|
99
|
-
<td>full_path</td>
|
100
|
-
<td>hostname</td>
|
101
|
-
<td>uptime</td>
|
102
|
-
<td></td>
|
103
|
-
</tr>
|
104
|
-
</thead>
|
105
|
-
|
106
|
-
<tbody>
|
107
|
-
{processes.map(function(process, index){
|
108
|
-
return <Process key={index} {...process} />;
|
109
|
-
})}
|
110
|
-
</tbody>
|
111
|
-
</table>
|
112
|
-
</div>
|
113
|
-
</div>
|
114
|
-
);
|
115
|
-
}
|
116
|
-
}
|
117
|
-
|
118
|
-
ReactDOM.render(
|
119
|
-
<DiagnosticsApp />,
|
120
|
-
document.getElementById('app')
|
121
|
-
);
|