message_bus 3.3.7 → 4.1.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -8
  3. data/.github/workflows/ci.yml +50 -20
  4. data/.prettierrc +1 -0
  5. data/CHANGELOG +99 -46
  6. data/README.md +31 -53
  7. data/Rakefile +22 -22
  8. data/docker-compose.yml +1 -1
  9. data/lib/message_bus/backends/base.rb +14 -0
  10. data/lib/message_bus/backends/memory.rb +13 -0
  11. data/lib/message_bus/backends/postgres.rb +55 -22
  12. data/lib/message_bus/backends/redis.rb +17 -1
  13. data/lib/message_bus/client.rb +26 -22
  14. data/lib/message_bus/distributed_cache.rb +1 -0
  15. data/lib/message_bus/rack/middleware.rb +0 -6
  16. data/lib/message_bus/rack/thin_ext.rb +1 -0
  17. data/lib/message_bus/version.rb +1 -1
  18. data/lib/message_bus.rb +53 -71
  19. data/message_bus.gemspec +4 -3
  20. data/package.json +2 -5
  21. data/spec/helpers.rb +6 -1
  22. data/spec/lib/fake_async_middleware.rb +1 -0
  23. data/spec/lib/message_bus/backend_spec.rb +20 -3
  24. data/spec/lib/message_bus/client_spec.rb +1 -0
  25. data/spec/lib/message_bus/connection_manager_spec.rb +4 -0
  26. data/spec/lib/message_bus/multi_process_spec.rb +21 -10
  27. data/spec/lib/message_bus/rack/middleware_spec.rb +2 -49
  28. data/spec/lib/message_bus/timer_thread_spec.rb +1 -5
  29. data/spec/lib/message_bus_spec.rb +12 -3
  30. data/spec/performance/backlog.rb +80 -0
  31. data/spec/performance/publish.rb +4 -4
  32. data/spec/spec_helper.rb +1 -1
  33. data/vendor/assets/javascripts/message-bus-ajax.js +38 -0
  34. data/vendor/assets/javascripts/message-bus.js +549 -0
  35. metadata +8 -31
  36. data/assets/application.jsx +0 -121
  37. data/assets/babel.min.js +0 -25
  38. data/assets/react-dom.js +0 -19851
  39. data/assets/react.js +0 -3029
  40. data/examples/diagnostics/Gemfile +0 -6
  41. data/examples/diagnostics/config.ru +0 -22
  42. data/lib/message_bus/diagnostics.rb +0 -62
  43. data/lib/message_bus/rack/diagnostics.rb +0 -120
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: 3.3.7
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-17 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -272,6 +272,7 @@ files:
272
272
  - ".eslintrc.js"
273
273
  - ".github/workflows/ci.yml"
274
274
  - ".gitignore"
275
+ - ".prettierrc"
275
276
  - ".rubocop.yml"
276
277
  - CHANGELOG
277
278
  - DEV.md
@@ -281,13 +282,9 @@ files:
281
282
  - LICENSE
282
283
  - README.md
283
284
  - Rakefile
284
- - assets/application.jsx
285
- - assets/babel.min.js
286
285
  - assets/jquery-1.8.2.js
287
286
  - assets/message-bus-ajax.js
288
287
  - assets/message-bus.js
289
- - assets/react-dom.js
290
- - assets/react.js
291
288
  - bench/codecs/all_codecs.rb
292
289
  - bench/codecs/marshal.rb
293
290
  - bench/codecs/packed_string.rb
@@ -305,8 +302,6 @@ files:
305
302
  - examples/chat/config.ru
306
303
  - examples/chat/docker_container/chat.yml
307
304
  - examples/chat/docker_container/update_chat
308
- - examples/diagnostics/Gemfile
309
- - examples/diagnostics/config.ru
310
305
  - examples/minimal/Gemfile
311
306
  - examples/minimal/config.ru
312
307
  - lib/message_bus.rb
@@ -320,13 +315,11 @@ files:
320
315
  - lib/message_bus/codec/json.rb
321
316
  - lib/message_bus/codec/oj.rb
322
317
  - lib/message_bus/connection_manager.rb
323
- - lib/message_bus/diagnostics.rb
324
318
  - lib/message_bus/distributed_cache.rb
325
319
  - lib/message_bus/http_client.rb
326
320
  - lib/message_bus/http_client/channel.rb
327
321
  - lib/message_bus/http_client/version.rb
328
322
  - lib/message_bus/message.rb
329
- - lib/message_bus/rack/diagnostics.rb
330
323
  - lib/message_bus/rack/middleware.rb
331
324
  - lib/message_bus/rack/thin_ext.rb
332
325
  - lib/message_bus/rails/railtie.rb
@@ -351,10 +344,13 @@ files:
351
344
  - spec/lib/message_bus/rack/middleware_spec.rb
352
345
  - spec/lib/message_bus/timer_thread_spec.rb
353
346
  - spec/lib/message_bus_spec.rb
347
+ - spec/performance/backlog.rb
354
348
  - spec/performance/publish.rb
355
349
  - spec/spec_helper.rb
356
350
  - spec/support/jasmine-browser.json
357
351
  - vendor/assets/javascripts/.gitignore
352
+ - vendor/assets/javascripts/message-bus-ajax.js
353
+ - vendor/assets/javascripts/message-bus.js
358
354
  homepage: https://github.com/discourse/message_bus
359
355
  licenses:
360
356
  - MIT
@@ -374,27 +370,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
370
  - !ruby/object:Gem::Version
375
371
  version: '0'
376
372
  requirements: []
377
- rubygems_version: 3.2.33
373
+ rubygems_version: 3.1.6
378
374
  signing_key:
379
375
  specification_version: 4
380
376
  summary: ''
381
- test_files:
382
- - spec/assets/SpecHelper.js
383
- - spec/assets/message-bus.spec.js
384
- - spec/fixtures/test/Gemfile
385
- - spec/fixtures/test/config.ru
386
- - spec/helpers.rb
387
- - spec/integration/http_client_spec.rb
388
- - spec/lib/fake_async_middleware.rb
389
- - spec/lib/message_bus/assets/asset_encoding_spec.rb
390
- - spec/lib/message_bus/backend_spec.rb
391
- - spec/lib/message_bus/client_spec.rb
392
- - spec/lib/message_bus/connection_manager_spec.rb
393
- - spec/lib/message_bus/distributed_cache_spec.rb
394
- - spec/lib/message_bus/multi_process_spec.rb
395
- - spec/lib/message_bus/rack/middleware_spec.rb
396
- - spec/lib/message_bus/timer_thread_spec.rb
397
- - spec/lib/message_bus_spec.rb
398
- - spec/performance/publish.rb
399
- - spec/spec_helper.rb
400
- - spec/support/jasmine-browser.json
377
+ test_files: []
@@ -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
- );