griffin 0.1.3 → 0.1.4
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/examples/routeguide_client.rb +8 -16
- data/examples/routeguide_server.rb +6 -21
- data/griffin.gemspec +2 -1
- data/lib/griffin/engine.rb +1 -1
- data/lib/griffin/logger.rb +15 -1
- data/lib/griffin/server.rb +10 -5
- data/lib/griffin/server_config_builder.rb +9 -4
- data/lib/griffin/thread_pool.rb +4 -1
- data/lib/griffin/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 307fd7dcba526d6bb562bf97d4d7c31c0f82d1fdfb488de21a5fb1040cc6506e
|
4
|
+
data.tar.gz: 01a0b9ddfcd3486a9c1b378c11b22dc35856fd264f283c68e19f74973fe6f588
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8780b448b45fb336c4bd7196e23e3901a64822fd0ed9661d8b2e59fb4d437feb2527cc1388b7162a2f927f37f229e36d6c5476bf2c5af17c407a38b298ab38b9
|
7
|
+
data.tar.gz: 6026c11481574d680a0b79295109da1405656aecd63424c3f228bbc765144d1019da666d3684d2efd8e1319c578df043607efff8d44e8a933f6a3b910a33f62f
|
@@ -1,24 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Style/GlobalVars
|
4
|
-
|
5
3
|
$LOAD_PATH.unshift File.expand_path('./examples/routeguide')
|
6
4
|
|
7
5
|
require 'griffin'
|
8
|
-
require 'grpc_kit'
|
9
6
|
require 'pry'
|
10
7
|
require 'json'
|
11
|
-
require 'logger'
|
12
8
|
require 'routeguide_services_pb'
|
13
9
|
|
14
10
|
RESOURCE_PATH = './examples/routeguide/routeguide.json'
|
15
11
|
HOST = 'localhost'
|
16
12
|
PORT = 50051
|
17
13
|
|
18
|
-
$logger = Logger.new(STDOUT)
|
19
|
-
|
20
14
|
def get_feature(stub)
|
21
|
-
|
15
|
+
GRPC.logger.info('===== get_feature =====')
|
22
16
|
points = [
|
23
17
|
Routeguide::Point.new(latitude: 409_146_138, longitude: -746_188_906),
|
24
18
|
Routeguide::Point.new(latitude: 0, longitude: 0)
|
@@ -27,15 +21,15 @@ def get_feature(stub)
|
|
27
21
|
points.each do |pt|
|
28
22
|
feature = stub.get_feature(pt)
|
29
23
|
if feature.name == ''
|
30
|
-
|
24
|
+
GRPC.logger.info("Found nothing at #{feature.inspect}")
|
31
25
|
else
|
32
|
-
|
26
|
+
GRPC.logger.info("Found '#{feature.name}' at #{feature.location.inspect}")
|
33
27
|
end
|
34
28
|
end
|
35
29
|
end
|
36
30
|
|
37
31
|
def list_features(stub)
|
38
|
-
|
32
|
+
GRPC.logger.info('===== list_features =====')
|
39
33
|
rect = Routeguide::Rectangle.new(
|
40
34
|
lo: Routeguide::Point.new(latitude: 400_000_000, longitude: -750_000_000),
|
41
35
|
hi: Routeguide::Point.new(latitude: 420_000_000, longitude: -730_000_000),
|
@@ -45,12 +39,12 @@ def list_features(stub)
|
|
45
39
|
|
46
40
|
loop do
|
47
41
|
r = stream.recv
|
48
|
-
|
42
|
+
GRPC.logger.info("Found #{r.name} at #{r.location.inspect}")
|
49
43
|
end
|
50
44
|
end
|
51
45
|
|
52
46
|
def record_route(stub, size)
|
53
|
-
|
47
|
+
GRPC.logger.info('===== record_route =====')
|
54
48
|
|
55
49
|
features = File.open(RESOURCE_PATH) do |f|
|
56
50
|
JSON.parse(f.read)
|
@@ -80,14 +74,14 @@ ROUTE_CHAT_NOTES = [
|
|
80
74
|
].freeze
|
81
75
|
|
82
76
|
def route_chat(stub)
|
83
|
-
|
77
|
+
GRPC.logger.info('===== route_chat =====')
|
84
78
|
|
85
79
|
call = stub.route_chat({})
|
86
80
|
|
87
81
|
t = Thread.new do
|
88
82
|
loop do
|
89
83
|
rn = call.recv
|
90
|
-
|
84
|
+
GRPC.logger.info("Got message #{rn.message} at point point(#{rn.location.latitude}, #{rn.location.longitude})")
|
91
85
|
end
|
92
86
|
end
|
93
87
|
|
@@ -116,5 +110,3 @@ get_feature(stub)
|
|
116
110
|
list_features(stub)
|
117
111
|
record_route(stub, 10)
|
118
112
|
route_chat(stub)
|
119
|
-
|
120
|
-
# rubocop:enable Style/GlobalVars
|
@@ -6,13 +6,11 @@ require 'griffin'
|
|
6
6
|
require 'pry'
|
7
7
|
require 'json'
|
8
8
|
require 'routeguide_services_pb'
|
9
|
-
require 'logger'
|
10
9
|
|
11
10
|
class Server < Routeguide::RouteGuide::Service
|
12
11
|
RESOURCE_PATH = './examples/routeguide/routeguide.json'
|
13
12
|
|
14
13
|
def initialize
|
15
|
-
@logger = Logger.new(STDOUT)
|
16
14
|
File.open(RESOURCE_PATH) do |f|
|
17
15
|
features = JSON.parse(f.read)
|
18
16
|
@features = Hash[features.map { |x| [x['location'], x['name']] }]
|
@@ -23,12 +21,12 @@ class Server < Routeguide::RouteGuide::Service
|
|
23
21
|
|
24
22
|
def get_feature(point, ctx)
|
25
23
|
name = @features.fetch({ 'longitude' => point.longitude, 'latitude' => point.latitude }, '')
|
26
|
-
|
24
|
+
GRPC.logger.info("Point longitude=#{point.longitude}, latitude=#{point.latitude}, metadata=#{ctx.metadata}")
|
27
25
|
Routeguide::Feature.new(location: point, name: name)
|
28
26
|
end
|
29
27
|
|
30
28
|
def list_features(rect, stream)
|
31
|
-
|
29
|
+
GRPC.logger.info('===== list_features =====')
|
32
30
|
|
33
31
|
@features.each do |location, name|
|
34
32
|
if name.nil? || name == '' || !in_range(location, rect)
|
@@ -37,13 +35,13 @@ class Server < Routeguide::RouteGuide::Service
|
|
37
35
|
|
38
36
|
pt = Routeguide::Point.new(location)
|
39
37
|
resp = Routeguide::Feature.new(location: pt, name: name)
|
40
|
-
|
38
|
+
GRPC.logger.info(resp)
|
41
39
|
stream.send_msg(resp)
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
45
43
|
def record_route(stream)
|
46
|
-
|
44
|
+
GRPC.logger.info('===== record_route =====')
|
47
45
|
distance = 0
|
48
46
|
count = 0
|
49
47
|
features = 0
|
@@ -52,7 +50,7 @@ class Server < Routeguide::RouteGuide::Service
|
|
52
50
|
|
53
51
|
loop do
|
54
52
|
point = stream.recv # XXX: raise StopIteration
|
55
|
-
|
53
|
+
GRPC.logger.info(point)
|
56
54
|
|
57
55
|
count += 1
|
58
56
|
name = @features.fetch({ 'longitude' => point.longitude, 'latitude' => point.latitude }, '')
|
@@ -75,7 +73,7 @@ class Server < Routeguide::RouteGuide::Service
|
|
75
73
|
def route_chat(call)
|
76
74
|
loop do
|
77
75
|
rn = call.recv
|
78
|
-
|
76
|
+
GRPC.logger.info("route_note location=#{rn.location.inspect}, message=#{rn.message}")
|
79
77
|
key = "#{rn.location.latitude} #{rn.location.longitude}"
|
80
78
|
saved_msgs = @route_notes[key]
|
81
79
|
@route_notes[key] << rn.message
|
@@ -116,17 +114,6 @@ class Server < Routeguide::RouteGuide::Service
|
|
116
114
|
end
|
117
115
|
end
|
118
116
|
|
119
|
-
# require 'griffin/interceptors/server/payload_interceptor'
|
120
|
-
require 'griffin/interceptors/server/filtered_payload_interceptor'
|
121
|
-
require 'griffin/interceptors/server/logging_interceptor'
|
122
|
-
require 'griffin/interceptors/server/x_request_id_interceptor'
|
123
|
-
|
124
|
-
interceptors = [
|
125
|
-
Griffin::Interceptors::Server::FilteredPayloadInterceptor.new,
|
126
|
-
Griffin::Interceptors::Server::LoggingInterceptor.new,
|
127
|
-
Griffin::Interceptors::Server::XRequestIdInterceptor.new,
|
128
|
-
]
|
129
|
-
|
130
117
|
Griffin::Server.configure do |c|
|
131
118
|
c.bind '127.0.0.1'
|
132
119
|
|
@@ -134,8 +121,6 @@ Griffin::Server.configure do |c|
|
|
134
121
|
|
135
122
|
c.services Server.new
|
136
123
|
|
137
|
-
c.interceptors interceptors
|
138
|
-
|
139
124
|
c.workers 2
|
140
125
|
end
|
141
126
|
|
data/griffin.gemspec
CHANGED
@@ -23,11 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ['lib', 'pb']
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_development_dependency 'pry-byebug'
|
26
27
|
spec.add_development_dependency 'rake'
|
27
28
|
spec.add_development_dependency 'rspec'
|
28
29
|
spec.add_development_dependency 'rubocop'
|
29
30
|
|
30
31
|
spec.add_dependency 'connection_pool', '~> 2.2.2'
|
31
|
-
spec.add_dependency 'grpc_kit', '~> 0.1.
|
32
|
+
spec.add_dependency 'grpc_kit', '~> 0.1.12'
|
32
33
|
spec.add_dependency 'serverengine', '~> 2.0.7'
|
33
34
|
end
|
data/lib/griffin/engine.rb
CHANGED
@@ -9,7 +9,7 @@ require 'griffin/engine/worker'
|
|
9
9
|
module Griffin
|
10
10
|
module Engine
|
11
11
|
def self.start(config, cluster: false)
|
12
|
-
Griffin
|
12
|
+
Griffin::Logger.setup(config)
|
13
13
|
|
14
14
|
if cluster
|
15
15
|
Griffin.logger.info("Griffin v#{Griffin::VERSION} starts as cluster mode")
|
data/lib/griffin/logger.rb
CHANGED
@@ -3,8 +3,22 @@
|
|
3
3
|
module Griffin
|
4
4
|
class Logger
|
5
5
|
class << self
|
6
|
+
def setup(config)
|
7
|
+
config[:logger] = Griffin::Logger.create(config)
|
8
|
+
Griffin.logger = config[:logger]
|
9
|
+
|
10
|
+
m = Module.new do
|
11
|
+
def logger
|
12
|
+
Griffin.logger
|
13
|
+
end
|
14
|
+
end
|
15
|
+
# Not to set a logger to `Grpckit.logger` since `Grpckit.logger` prints many HTTP2 layer logs
|
16
|
+
# If you want to print them, add environment variable `GRPC_KIT_LOGLEVEL=debug`
|
17
|
+
GrpcKit::GRPC.extend(m)
|
18
|
+
end
|
19
|
+
|
6
20
|
def create(config)
|
7
|
-
ServerEngine::DaemonLogger.new(logdev_from_config(config), config)
|
21
|
+
config[:logger] || ServerEngine::DaemonLogger.new(logdev_from_config(config), config)
|
8
22
|
end
|
9
23
|
|
10
24
|
def logdev_from_config(config)
|
data/lib/griffin/server.rb
CHANGED
@@ -14,9 +14,16 @@ module Griffin
|
|
14
14
|
FORCIBLE_SHUTDOWN = '1'
|
15
15
|
|
16
16
|
class << self
|
17
|
-
|
17
|
+
# @param bind [String]
|
18
|
+
# @param port [Integer,String]
|
19
|
+
def run(bind: nil, port: nil)
|
18
20
|
c = config_builder.build
|
19
|
-
|
21
|
+
if c[:services].empty?
|
22
|
+
raise 'Required at least one service to handle reqeust'
|
23
|
+
end
|
24
|
+
|
25
|
+
opts = { bind: bind, port: port }.compact
|
26
|
+
Griffin::Engine.start(c.merge(opts), cluster: Integer(c[:workers]) > 1)
|
20
27
|
end
|
21
28
|
|
22
29
|
def configure
|
@@ -94,10 +101,8 @@ module Griffin
|
|
94
101
|
end
|
95
102
|
end
|
96
103
|
|
104
|
+
# Need Timeout?
|
97
105
|
@thread_pool.shutdown
|
98
|
-
# unless @sever.session_count == 0
|
99
|
-
# end
|
100
|
-
|
101
106
|
@command.close
|
102
107
|
@signal.close
|
103
108
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Griffin
|
4
4
|
class ServerConfigBuilder
|
5
|
-
SERVERENGINE_PRIMITIVE_CONFIGS = %i[workers bind port log pid_path log_level].freeze
|
5
|
+
SERVERENGINE_PRIMITIVE_CONFIGS = %i[workers bind port log pid_path log_level logger].freeze
|
6
6
|
SERVERENGINE_BLOCK_CONFIGS = %i[before_fork after_fork].freeze
|
7
7
|
# Users can't change these values
|
8
8
|
SERVERENGIEN_FIXED_CONFIGS = %i[daemonize worker_type worker_process_name].freeze
|
@@ -33,13 +33,14 @@ module Griffin
|
|
33
33
|
port: 50051,
|
34
34
|
pool_size: DEFAULT_POOL_SIZE,
|
35
35
|
interceptors: [],
|
36
|
+
services: [],
|
36
37
|
}.freeze
|
37
38
|
|
38
39
|
def initialize
|
39
40
|
@opts = DEFAULT_SERVER_CONFIG.dup
|
40
41
|
end
|
41
42
|
|
42
|
-
(SERVERENGINE_PRIMITIVE_CONFIGS + GRIFFIN_CONFIGS
|
43
|
+
(SERVERENGINE_PRIMITIVE_CONFIGS + GRIFFIN_CONFIGS).each do |name|
|
43
44
|
define_method(name) do |value|
|
44
45
|
@opts[name] = value
|
45
46
|
end
|
@@ -51,8 +52,12 @@ module Griffin
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
def
|
55
|
-
@opts[:
|
55
|
+
def interceptors(*value)
|
56
|
+
@opts[:interceptors].concat(value).flatten!
|
57
|
+
end
|
58
|
+
|
59
|
+
def services(*value)
|
60
|
+
@opts[:services].concat(value).flatten!
|
56
61
|
end
|
57
62
|
|
58
63
|
def build
|
data/lib/griffin/thread_pool.rb
CHANGED
@@ -45,7 +45,10 @@ module Griffin
|
|
45
45
|
def shutdown
|
46
46
|
@shutdown = true
|
47
47
|
@pool_size.times { @tasks.push(nil) }
|
48
|
-
|
48
|
+
until @workers.empty?
|
49
|
+
Griffin.logger.debug("#{@pool_size - @spawned} worker thread(s) shutdowned, waiting #{@spawned}")
|
50
|
+
sleep 1
|
51
|
+
end
|
49
52
|
end
|
50
53
|
|
51
54
|
private
|
data/lib/griffin/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: griffin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ganmacs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry-byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +100,14 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1.
|
103
|
+
version: 0.1.12
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1.
|
110
|
+
version: 0.1.12
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: serverengine
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|