anycable 0.5.2 → 0.6.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +25 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +31 -0
  4. data/.rubocop.yml +22 -22
  5. data/.travis.yml +1 -2
  6. data/CHANGELOG.md +92 -0
  7. data/README.md +10 -58
  8. data/anycable.gemspec +10 -7
  9. data/benchmarks/.gitignore +1 -0
  10. data/benchmarks/2018-10-27.md +181 -0
  11. data/benchmarks/assets/2018-10-27-action-cable-rss.png +0 -0
  12. data/benchmarks/assets/2018-10-27-action-cable-rtt.png +0 -0
  13. data/benchmarks/assets/2018-10-27-anycable-rss.png +0 -0
  14. data/benchmarks/assets/2018-10-27-anycable-rtt.png +0 -0
  15. data/benchmarks/assets/2018-10-27-async-rss.png +0 -0
  16. data/benchmarks/assets/2018-10-27-async-rtt.png +0 -0
  17. data/benchmarks/assets/2018-10-27-falcon-cable-rss.png +0 -0
  18. data/benchmarks/assets/2018-10-27-falcon-cable-rtt.png +0 -0
  19. data/benchmarks/assets/2018-10-27-iodine-cable-rss.png +0 -0
  20. data/benchmarks/assets/2018-10-27-iodine-cable-rtt.png +0 -0
  21. data/benchmarks/assets/2018-10-27-plezi-rss.png +0 -0
  22. data/benchmarks/assets/2018-10-27-plezi-rtt.png +0 -0
  23. data/benchmarks/bench.png +0 -0
  24. data/benchmarks/benchmark.yml +12 -10
  25. data/benchmarks/hosts +2 -2
  26. data/benchmarks/rtt_plot.py +74 -0
  27. data/benchmarks/rtt_plot_test.py +16 -0
  28. data/benchmarks/servers.yml +25 -3
  29. data/bin/anycable +13 -0
  30. data/etc/bug_report_template.rb +1 -1
  31. data/lib/anycable.rb +53 -16
  32. data/lib/anycable/broadcast_adapters.rb +33 -0
  33. data/lib/anycable/broadcast_adapters/redis.rb +42 -0
  34. data/lib/anycable/cli.rb +323 -0
  35. data/lib/anycable/config.rb +91 -17
  36. data/lib/anycable/exceptions_handling.rb +31 -0
  37. data/lib/anycable/handler/capture_exceptions.rb +39 -0
  38. data/lib/anycable/health_server.rb +53 -31
  39. data/lib/anycable/middleware.rb +19 -0
  40. data/lib/anycable/middleware_chain.rb +58 -0
  41. data/lib/anycable/rpc/rpc_pb.rb +1 -1
  42. data/lib/anycable/rpc/rpc_services_pb.rb +1 -1
  43. data/lib/anycable/rpc_handler.rb +28 -26
  44. data/lib/anycable/server.rb +114 -39
  45. data/lib/anycable/socket.rb +1 -1
  46. data/lib/anycable/version.rb +2 -2
  47. metadata +45 -26
  48. data/lib/anycable/handler/exceptions_handling.rb +0 -43
  49. data/lib/anycable/pubsub.rb +0 -26
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anycable
3
+ module AnyCable
4
4
  # Socket mock to be used with application connection
5
5
  class Socket
6
6
  attr_reader :transmissions, :env
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anycable
4
- VERSION = "0.5.2"
3
+ module AnyCable
4
+ VERSION = "0.6.0.rc1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anycable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-06 00:00:00.000000000 Z
11
+ date: 2018-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anyway_config
@@ -16,48 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.1.1
19
+ version: 1.4.1
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.1'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.1.1
26
+ version: 1.4.1
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: grpc
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '1.6'
33
+ version: '1.15'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '1.6'
40
+ version: '1.15'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: redis
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: '3.2'
54
- type: :runtime
47
+ version: '4.0'
48
+ type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - ">="
59
53
  - !ruby/object:Gem::Version
60
- version: '3.2'
54
+ version: '4.0'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: bundler
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,14 +114,14 @@ dependencies:
120
114
  requirements:
121
115
  - - "~>"
122
116
  - !ruby/object:Gem::Version
123
- version: 0.58.0
117
+ version: 0.60.0
124
118
  type: :development
125
119
  prerelease: false
126
120
  version_requirements: !ruby/object:Gem::Requirement
127
121
  requirements:
128
122
  - - "~>"
129
123
  - !ruby/object:Gem::Version
130
- version: 0.58.0
124
+ version: 0.60.0
131
125
  - !ruby/object:Gem::Dependency
132
126
  name: simplecov
133
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,13 +150,16 @@ dependencies:
156
150
  - - ">="
157
151
  - !ruby/object:Gem::Version
158
152
  version: '0'
159
- description: Polyglot replacement for ActionCable server
153
+ description: AnyCable is a polyglot replacement for ActionCable-compatible servers
160
154
  email:
161
155
  - dementiev.vm@gmail.com
162
- executables: []
156
+ executables:
157
+ - anycable
163
158
  extensions: []
164
159
  extra_rdoc_files: []
165
160
  files:
161
+ - ".github/ISSUE_TEMPLATE.md"
162
+ - ".github/PULL_REQUEST_TEMPLATE.md"
166
163
  - ".gitignore"
167
164
  - ".hound.yml"
168
165
  - ".rubocop.yml"
@@ -189,20 +186,42 @@ files:
189
186
  - benchmarks/2017-02-12.md
190
187
  - benchmarks/2018-03-04.md
191
188
  - benchmarks/2018-05-27-rpc-bench.md
189
+ - benchmarks/2018-10-27.md
192
190
  - benchmarks/HowTo.md
193
191
  - benchmarks/ansible.cfg
192
+ - benchmarks/assets/2018-10-27-action-cable-rss.png
193
+ - benchmarks/assets/2018-10-27-action-cable-rtt.png
194
+ - benchmarks/assets/2018-10-27-anycable-rss.png
195
+ - benchmarks/assets/2018-10-27-anycable-rtt.png
196
+ - benchmarks/assets/2018-10-27-async-rss.png
197
+ - benchmarks/assets/2018-10-27-async-rtt.png
198
+ - benchmarks/assets/2018-10-27-falcon-cable-rss.png
199
+ - benchmarks/assets/2018-10-27-falcon-cable-rtt.png
200
+ - benchmarks/assets/2018-10-27-iodine-cable-rss.png
201
+ - benchmarks/assets/2018-10-27-iodine-cable-rtt.png
202
+ - benchmarks/assets/2018-10-27-plezi-rss.png
203
+ - benchmarks/assets/2018-10-27-plezi-rtt.png
204
+ - benchmarks/bench.png
194
205
  - benchmarks/benchmark.yml
195
206
  - benchmarks/hosts
207
+ - benchmarks/rtt_plot.py
208
+ - benchmarks/rtt_plot_test.py
196
209
  - benchmarks/servers.yml
210
+ - bin/anycable
197
211
  - bin/console
198
212
  - bin/setup
199
213
  - circle.yml
200
214
  - etc/bug_report_template.rb
201
215
  - lib/anycable.rb
216
+ - lib/anycable/broadcast_adapters.rb
217
+ - lib/anycable/broadcast_adapters/redis.rb
218
+ - lib/anycable/cli.rb
202
219
  - lib/anycable/config.rb
203
- - lib/anycable/handler/exceptions_handling.rb
220
+ - lib/anycable/exceptions_handling.rb
221
+ - lib/anycable/handler/capture_exceptions.rb
204
222
  - lib/anycable/health_server.rb
205
- - lib/anycable/pubsub.rb
223
+ - lib/anycable/middleware.rb
224
+ - lib/anycable/middleware_chain.rb
206
225
  - lib/anycable/rpc/rpc_pb.rb
207
226
  - lib/anycable/rpc/rpc_services_pb.rb
208
227
  - lib/anycable/rpc_handler.rb
@@ -222,16 +241,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
241
  requirements:
223
242
  - - ">="
224
243
  - !ruby/object:Gem::Version
225
- version: '0'
244
+ version: 2.4.0
226
245
  required_rubygems_version: !ruby/object:Gem::Requirement
227
246
  requirements:
228
- - - ">="
247
+ - - ">"
229
248
  - !ruby/object:Gem::Version
230
- version: '0'
249
+ version: 1.3.1
231
250
  requirements: []
232
251
  rubyforge_project:
233
- rubygems_version: 2.7.6
252
+ rubygems_version: 2.7.7
234
253
  signing_key:
235
254
  specification_version: 4
236
- summary: Polyglot replacement for ActionCable server
255
+ summary: AnyCable is a polyglot replacement for ActionCable-compatible servers
237
256
  test_files: []
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Anycable
4
- module Handler # :nodoc:
5
- # Handle app-level errors
6
- module ExceptionsHandling
7
- def connect(*)
8
- super
9
- rescue StandardError => ex
10
- handle_exception(ex)
11
- Anycable::ConnectionResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
12
- end
13
-
14
- def disconnect(*)
15
- super
16
- rescue StandardError => ex
17
- handle_exception(ex)
18
- Anycable::DisconnectResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
19
- end
20
-
21
- def command(*)
22
- super
23
- rescue StandardError => ex
24
- handle_exception(ex)
25
- Anycable::CommandResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
26
- end
27
-
28
- def handle_exception(ex)
29
- Anycable.error_handlers.each do |handler|
30
- begin
31
- handler.call(ex)
32
- rescue StandardError => ex
33
- Anycable.logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
34
- Anycable.logger.error ex
35
- Anycable.logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
36
- end
37
- end
38
- end
39
- end
40
-
41
- Anycable.error_handlers << proc { |e| Anycable.logger.error(e.message) }
42
- end
43
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "redis"
4
- require "json"
5
-
6
- module Anycable
7
- # PubSub for broadcasting
8
- class PubSub
9
- attr_reader :redis_conn
10
-
11
- def initialize
12
- redis_config = { url: Anycable.config.redis_url }
13
- unless Anycable.config.redis_sentinels.empty?
14
- redis_config[:sentinels] = Anycable.config.redis_sentinels
15
- end
16
- @redis_conn = Redis.new(redis_config)
17
- end
18
-
19
- def broadcast(channel, payload)
20
- redis_conn.publish(
21
- Anycable.config.redis_channel,
22
- { stream: channel, data: payload }.to_json
23
- )
24
- end
25
- end
26
- end