anycable 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![GitPitch](https://gitpitch.com/assets/badge.svg)](https://gitpitch.com/anycable/anycable/master?grs=github) [![Gem Version](https://badge.fury.io/rb/anycable.svg)](https://rubygems.org/gems/anycable) [![Build Status](https://travis-ci.org/anycable/anycable.svg?branch=master)](https://travis-ci.org/anycable/anycable) [![Circle CI](https://circleci.com/gh/anycable/anycable/tree/master.svg?style=svg)](https://circleci.com/gh/anycable/anycable/tree/master)
|
2
|
-
[![Dependency Status](https://dependencyci.com/github/anycable/anycable/badge)](https://dependencyci.com/github/anycable/anycable)
|
3
2
|
[![Gitter](https://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg)](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
|