message_bus 3.3.7 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
- );