anycable 0.5.1 → 0.5.2
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 +7 -1
- data/README.md +2 -1
- data/anycable.gemspec +1 -1
- data/lib/anycable/config.rb +6 -1
- data/lib/anycable/health_server.rb +46 -0
- data/lib/anycable/server.rb +18 -4
- data/lib/anycable/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '079d557557d69550f4a490d8fcbcd35b922df102af44c076ea14bc92bff5dda3'
|
4
|
+
data.tar.gz: 29339983ff86ec5f52959397b566926c00d7116fa8dd56dc4933bac4bd526689
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4fdb1f8ccbb3c633996c4aae85ce60263ab5c8f68f13909d93ef2ebe390e5124901b2832221b7fdd809fef1e3ae04628e4e5437aa6f262da51248041b5d0030
|
7
|
+
data.tar.gz: ba3d770e79aa4775e894d2f568787f62d96f1e699828549e0dba1880a85597e01e565fe0781a51b1da42f7cd359cc7580846c7c01f297ee498e4cbfacfba8329
|
data/CHANGELOG.md
CHANGED
@@ -2,13 +2,17 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.5.2 (2018-09-06)
|
6
|
+
|
7
|
+
- [#48](https://github.com/anycable/anycable/pull/48) Add HTTP health server ([@DarthSim][])
|
8
|
+
|
5
9
|
## 0.5.1 (2018-06-13)
|
6
10
|
|
7
11
|
Minor fixes.
|
8
12
|
|
9
13
|
## 0.5.0 (2017-10-21)
|
10
14
|
|
11
|
-
- [#2](https://github.com/anycable/anycable/issues/2) Add support for [Redis Sentinel](https://redis.io/topics/sentinel). ([@accessd]
|
15
|
+
- [#2](https://github.com/anycable/anycable/issues/2) Add support for [Redis Sentinel](https://redis.io/topics/sentinel). ([@accessd][])
|
12
16
|
|
13
17
|
- [#28](https://github.com/anycable/anycable/issues/28) Support arbitrary headers. ([@palkan][])
|
14
18
|
|
@@ -91,3 +95,5 @@ Implement `Disconnect` handler, which invokes `Connection#disconnect` (along wit
|
|
91
95
|
|
92
96
|
[@palkan]: https://github.com/palkan
|
93
97
|
[@sadovnik]: https://github.com/sadovnik
|
98
|
+
[@accessd]: https://github.com/accessd
|
99
|
+
[@DarthSim]: https://github.com/DarthSim
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
[](https://gitpitch.com/anycable/anycable/master?grs=github) [](https://rubygems.org/gems/anycable) [](https://travis-ci.org/anycable/anycable) [](https://circleci.com/gh/anycable/anycable/tree/master)
|
2
|
-
[](https://dependencyci.com/github/anycable/anycable)
|
3
2
|
[](https://gitter.im/anycable/Lobby)
|
4
3
|
|
5
4
|
# Anycable
|
@@ -47,6 +46,8 @@ Read our [Wiki](https://github.com/anycable/anycable/wiki) for more.
|
|
47
46
|
|
48
47
|
## Talks
|
49
48
|
|
49
|
+
- One cable to rule them all, RubyKaigi 2018, [slides](https://speakerdeck.com/palkan/rubykaigi-2018-anycable-one-cable-to-rule-them-all) and [video](https://www.youtube.com/watch?v=jXCPuNICT8s) (EN)
|
50
|
+
|
50
51
|
- Wroc_Love.rb 2018 [slides](https://speakerdeck.com/palkan/wroc-love-dot-rb-2018-cables-cables-cables) and [video](https://www.youtube.com/watch?v=AUxFFOehiy0) (EN)
|
51
52
|
|
52
53
|
- RubyConfMY 2017 [slides](https://speakerdeck.com/palkan/rubyconf-malaysia-2017-anycable) and [video](https://www.youtube.com/watch?v=j5oFx525zNw) (EN)
|
data/anycable.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "rake", ">= 10.0"
|
27
27
|
spec.add_development_dependency "rack", "~> 2.0"
|
28
28
|
spec.add_development_dependency "rspec", ">= 3.5"
|
29
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
29
|
+
spec.add_development_dependency "rubocop", "~> 0.58.0"
|
30
30
|
spec.add_development_dependency "simplecov", ">= 0.3.8"
|
31
31
|
spec.add_development_dependency "pry-byebug"
|
32
32
|
end
|
data/lib/anycable/config.rb
CHANGED
@@ -14,7 +14,8 @@ module Anycable
|
|
14
14
|
log_file: nil,
|
15
15
|
log_level: :info,
|
16
16
|
log_grpc: false,
|
17
|
-
debug: false # Shortcut to enable GRPC logging and debug level
|
17
|
+
debug: false, # Shortcut to enable GRPC logging and debug level
|
18
|
+
http_health_port: nil
|
18
19
|
|
19
20
|
def initialize(*)
|
20
21
|
super
|
@@ -23,5 +24,9 @@ module Anycable
|
|
23
24
|
self.log_level = :debug
|
24
25
|
self.log_grpc = true
|
25
26
|
end
|
27
|
+
|
28
|
+
def http_health_port_provided?
|
29
|
+
!http_health_port.nil? && http_health_port != ""
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'webrick'
|
4
|
+
require 'anycable/server'
|
5
|
+
|
6
|
+
module Anycable
|
7
|
+
# Server for HTTP healthchecks
|
8
|
+
module HealthServer
|
9
|
+
class << self
|
10
|
+
def start(port)
|
11
|
+
return if running?
|
12
|
+
|
13
|
+
@health_server ||= build_server(port)
|
14
|
+
Thread.new { @health_server.start }
|
15
|
+
|
16
|
+
Anycable.logger.info "HTTP health server is listening on #{port}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def stop
|
20
|
+
return unless running?
|
21
|
+
@health_server.shutdown
|
22
|
+
end
|
23
|
+
|
24
|
+
def running?
|
25
|
+
@health_server&.status == :Running
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
SUCCESS_RESPONSE = [200, "Ready"].freeze
|
31
|
+
FAILURE_RESPONSE = [503, "Not Ready"].freeze
|
32
|
+
|
33
|
+
def build_server(port)
|
34
|
+
WEBrick::HTTPServer.new(
|
35
|
+
Port: port,
|
36
|
+
Logger: Anycable.logger,
|
37
|
+
AccessLog: []
|
38
|
+
).tap do |server|
|
39
|
+
server.mount_proc '/health' do |_, res|
|
40
|
+
res.status, res.body = Anycable::Server.running? ? SUCCESS_RESPONSE : FAILURE_RESPONSE
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/anycable/server.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'grpc'
|
4
4
|
require 'anycable/rpc_handler'
|
5
|
+
require 'anycable/health_server'
|
5
6
|
|
6
7
|
module Anycable
|
7
8
|
# Wrapper over GRPC server
|
@@ -11,11 +12,9 @@ module Anycable
|
|
11
12
|
|
12
13
|
def start
|
13
14
|
log_grpc! if Anycable.config.log_grpc
|
14
|
-
@grpc_server ||= build_server
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
grpc_server.run_till_terminated
|
16
|
+
start_http_health_server
|
17
|
+
start_grpc_server
|
19
18
|
end
|
20
19
|
|
21
20
|
def stop
|
@@ -34,12 +33,27 @@ module Anycable
|
|
34
33
|
|
35
34
|
private
|
36
35
|
|
36
|
+
def start_grpc_server
|
37
|
+
@grpc_server ||= build_server
|
38
|
+
|
39
|
+
Anycable.logger.info "RPC server is listening on #{Anycable.config.rpc_host}"
|
40
|
+
Anycable.logger.info "Broadcasting Redis channel: #{Anycable.config.redis_channel}"
|
41
|
+
|
42
|
+
grpc_server.run_till_terminated
|
43
|
+
end
|
44
|
+
|
37
45
|
def build_server
|
38
46
|
GRPC::RpcServer.new.tap do |server|
|
39
47
|
server.add_http2_port(Anycable.config.rpc_host, :this_port_is_insecure)
|
40
48
|
server.handle(Anycable::RPCHandler)
|
41
49
|
end
|
42
50
|
end
|
51
|
+
|
52
|
+
def start_http_health_server
|
53
|
+
return unless Anycable.config.http_health_port_provided?
|
54
|
+
Anycable::HealthServer.start(Anycable.config.http_health_port)
|
55
|
+
at_exit { Anycable::HealthServer.stop }
|
56
|
+
end
|
43
57
|
end
|
44
58
|
end
|
45
59
|
end
|
data/lib/anycable/version.rb
CHANGED
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.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06
|
11
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -120,14 +120,14 @@ dependencies:
|
|
120
120
|
requirements:
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
123
|
+
version: 0.58.0
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
130
|
+
version: 0.58.0
|
131
131
|
- !ruby/object:Gem::Dependency
|
132
132
|
name: simplecov
|
133
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,6 +201,7 @@ files:
|
|
201
201
|
- lib/anycable.rb
|
202
202
|
- lib/anycable/config.rb
|
203
203
|
- lib/anycable/handler/exceptions_handling.rb
|
204
|
+
- lib/anycable/health_server.rb
|
204
205
|
- lib/anycable/pubsub.rb
|
205
206
|
- lib/anycable/rpc/rpc_pb.rb
|
206
207
|
- lib/anycable/rpc/rpc_services_pb.rb
|