grpc_interceptors 0.2.0 → 0.2.2.rc1
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/README.md +6 -7
- data/lib/grpc_interceptors/client/logging_interceptor.rb +3 -3
- data/lib/grpc_interceptors/client/opentelemetry_tracing_interceptor.rb +3 -3
- data/lib/grpc_interceptors/common/logging.rb +29 -3
- data/lib/grpc_interceptors/{client.rb → kind.rb} +3 -2
- data/lib/grpc_interceptors/server/logging_interceptor.rb +2 -2
- data/lib/grpc_interceptors/server/opentelemetry_tracing_interceptor.rb +2 -2
- metadata +17 -4
- data/lib/grpc_interceptors/server.rb +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d3e0f698d59a4a8427356e2581d63cc0d1caa54581e58ee48d3614f0a3c1b21
|
|
4
|
+
data.tar.gz: 457f47fb4eb8a2c2918dac9cade910849b1de2a1a77ab398ee293ac91c4c03f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f04eb0f20362428f5b20b52fffd2b384520667096f891963b11c11154dad8a6c2e9516bc2014586187ddfdb205b7a97a92132f6f0cea62e4b37a09e758cc97c0
|
|
7
|
+
data.tar.gz: e9ee7ed6d174803126f2bd7c10c4aa98e4e3a55d9d055f821158a424e6006a71706c49d53abe8cb83919af8b9938bf005e28498e9d51a6ee7bcb7fedf85c85be
|
data/README.md
CHANGED
|
@@ -33,8 +33,6 @@ When the `LOG_LEVEL` env variable is set to `INFO` then the server logs out.
|
|
|
33
33
|
|
|
34
34
|
When the `LOG_LEVEL` env variable is set to `DEBUG` then the server additionally adds the request to the log message. (Note, adding the response is currently blocked by [this gRPC issue](https://github.com/grpc/grpc/pull/26547).)
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
36
|
### StatsD metrics
|
|
39
37
|
|
|
40
38
|
```ruby
|
|
@@ -47,11 +45,12 @@ GRPC::RpcServer.new(
|
|
|
47
45
|
|
|
48
46
|
The server emits a histogram metric called `grpc_latency_seconds` with the following tags:
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
- `grpc_method` representing the called method
|
|
49
|
+
- `grpc_service` representing the service
|
|
50
|
+
- `grpc_type` representing the gRPC kind of method
|
|
53
51
|
|
|
54
52
|
#### [Experimental] A gauge metric of the server jobs queue
|
|
53
|
+
|
|
55
54
|
```
|
|
56
55
|
# https://github.com/grpc/grpc/blob/v1.62.0/src/ruby/lib/grpc/generic/rpc_server.rb#L43C9-L43C21
|
|
57
56
|
server.instance_variable_get(:@pool).jobs_waiting
|
|
@@ -62,7 +61,7 @@ server.instance_variable_get(:@pool).jobs_waiting
|
|
|
62
61
|
```ruby
|
|
63
62
|
GRPC::RpcServer.new(
|
|
64
63
|
interceptors: [
|
|
65
|
-
GrpcInterceptors::Server::
|
|
64
|
+
GrpcInterceptors::Server::OpenTelemetryTracingInterceptor.new
|
|
66
65
|
]
|
|
67
66
|
)
|
|
68
67
|
```
|
|
@@ -76,7 +75,7 @@ GRPC::RpcServer.new(
|
|
|
76
75
|
```ruby
|
|
77
76
|
GRPC::RpcServer.new(
|
|
78
77
|
interceptors: [
|
|
79
|
-
GrpcInterceptors::Client::
|
|
78
|
+
GrpcInterceptors::Client::OpenTelemetryTracingInterceptor.new
|
|
80
79
|
]
|
|
81
80
|
)
|
|
82
81
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../kind'
|
|
4
4
|
require_relative '../common/grpc_helper'
|
|
5
5
|
require_relative '../common/logging'
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ module GrpcInterceptors
|
|
|
18
18
|
)
|
|
19
19
|
Common::Logging.yield_and_log(
|
|
20
20
|
logger: @logger, request: request, method: method,
|
|
21
|
-
method_type: 'unary', kind: GrpcInterceptors::
|
|
21
|
+
method_type: 'unary', kind: GrpcInterceptors::Kind::CLIENT, &block
|
|
22
22
|
)
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -37,7 +37,7 @@ module GrpcInterceptors
|
|
|
37
37
|
)
|
|
38
38
|
Common::Logging.yield_and_log(
|
|
39
39
|
logger: @logger, request: request, method: method,
|
|
40
|
-
method_type: 'server_stream', kind: GrpcInterceptors::
|
|
40
|
+
method_type: 'server_stream', kind: GrpcInterceptors::Kind::CLIENT, &block
|
|
41
41
|
)
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../kind'
|
|
4
4
|
require_relative '../common/grpc_helper'
|
|
5
5
|
require_relative '../common/opentelemetry_helper'
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ module GrpcInterceptors
|
|
|
11
11
|
attributes = Common::OpenTelemetryHelper.tracing_attributes(method)
|
|
12
12
|
|
|
13
13
|
Common::OpenTelemetryHelper.tracer.in_span(
|
|
14
|
-
method, kind: GrpcInterceptors::
|
|
14
|
+
method, kind: GrpcInterceptors::Kind::CLIENT, attributes: attributes
|
|
15
15
|
) do
|
|
16
16
|
OpenTelemetry.propagation.inject(metadata)
|
|
17
17
|
yield
|
|
@@ -26,7 +26,7 @@ module GrpcInterceptors
|
|
|
26
26
|
attributes = Common::OpenTelemetryHelper.tracing_attributes(method)
|
|
27
27
|
|
|
28
28
|
Common::OpenTelemetryHelper.tracer.in_span(
|
|
29
|
-
method, kind: GrpcInterceptors::
|
|
29
|
+
method, kind: GrpcInterceptors::Kind::CLIENT, attributes: attributes
|
|
30
30
|
) do
|
|
31
31
|
OpenTelemetry.propagation.inject(metadata)
|
|
32
32
|
yield
|
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'logger'
|
|
4
|
+
|
|
3
5
|
module GrpcInterceptors
|
|
4
6
|
module Common
|
|
5
7
|
module Logging
|
|
8
|
+
SYMBOL_TO_SEVERITY = {
|
|
9
|
+
trace: ::Logger::Severity::DEBUG,
|
|
10
|
+
debug: ::Logger::Severity::DEBUG,
|
|
11
|
+
info: ::Logger::Severity::INFO,
|
|
12
|
+
warn: ::Logger::Severity::WARN,
|
|
13
|
+
error: ::Logger::Severity::ERROR,
|
|
14
|
+
fatal: ::Logger::Severity::FATAL
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
17
|
+
# Some logger implementations (e.g. SemanticLogger-backed CasinoLogger)
|
|
18
|
+
# expose #level as a Symbol rather than the ::Logger::Severity Integer
|
|
19
|
+
# constants this module compares against. Normalize here so any logger
|
|
20
|
+
# duck-typed with #level/#info/#debug works without a per-service wrapper.
|
|
21
|
+
def self.normalized_level(logger)
|
|
22
|
+
raw = logger.respond_to?(:level) ? logger.level : ::Logger::Severity::INFO
|
|
23
|
+
|
|
24
|
+
case raw
|
|
25
|
+
when Integer then raw
|
|
26
|
+
when Symbol then SYMBOL_TO_SEVERITY.fetch(raw, ::Logger::Severity::INFO)
|
|
27
|
+
else ::Logger::Severity::INFO
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
6
31
|
def self.yield_and_log(
|
|
7
32
|
logger: nil, request: nil, method: nil, method_type: nil, kind: nil
|
|
8
33
|
)
|
|
@@ -21,7 +46,7 @@ module GrpcInterceptors
|
|
|
21
46
|
extra_fields ||= {}
|
|
22
47
|
extra_fields['grpc.code'] = grpc_code
|
|
23
48
|
|
|
24
|
-
if logger
|
|
49
|
+
if normalized_level(logger) == ::Logger::Severity::DEBUG && !response.nil? && !response.is_a?(Enumerator)
|
|
25
50
|
extra_fields['response'] = Common::GrpcHelper.proto_to_h(response)
|
|
26
51
|
end
|
|
27
52
|
|
|
@@ -49,9 +74,10 @@ module GrpcInterceptors
|
|
|
49
74
|
payload = build_payload(method, method_type, kind)
|
|
50
75
|
payload.merge!(extra_fields)
|
|
51
76
|
|
|
52
|
-
|
|
77
|
+
level = normalized_level(logger)
|
|
78
|
+
if level == ::Logger::Severity::INFO
|
|
53
79
|
logger.info(payload)
|
|
54
|
-
elsif
|
|
80
|
+
elsif level == ::Logger::Severity::DEBUG
|
|
55
81
|
payload['request'] = Common::GrpcHelper.proto_to_h(request) unless request.nil?
|
|
56
82
|
logger.debug(payload)
|
|
57
83
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../kind'
|
|
4
4
|
require_relative '../common/grpc_helper'
|
|
5
5
|
require_relative '../common/logging'
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ module GrpcInterceptors
|
|
|
16
16
|
def request_response(request: nil, call: nil, method: nil, &block)
|
|
17
17
|
Common::Logging.yield_and_log(
|
|
18
18
|
logger: @logger, request: request, method: method,
|
|
19
|
-
method_type: 'unary', kind: GrpcInterceptors::
|
|
19
|
+
method_type: 'unary', kind: GrpcInterceptors::Kind::SERVER, &block
|
|
20
20
|
)
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../kind'
|
|
4
4
|
require_relative '../common/grpc_helper'
|
|
5
5
|
require_relative '../common/opentelemetry_helper'
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ module GrpcInterceptors
|
|
|
17
17
|
Common::OpenTelemetryHelper.tracer.in_span(
|
|
18
18
|
route_name,
|
|
19
19
|
attributes: attributes,
|
|
20
|
-
kind: GrpcInterceptors::
|
|
20
|
+
kind: GrpcInterceptors::Kind::SERVER,
|
|
21
21
|
&block
|
|
22
22
|
)
|
|
23
23
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grpc_interceptors
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- michal-kazmierczak
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '2.4'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: logger
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '1.7'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '1.7'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: minitest
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -257,14 +271,13 @@ files:
|
|
|
257
271
|
- LICENSE
|
|
258
272
|
- README.md
|
|
259
273
|
- lib/grpc_interceptors.rb
|
|
260
|
-
- lib/grpc_interceptors/client.rb
|
|
261
274
|
- lib/grpc_interceptors/client/logging_interceptor.rb
|
|
262
275
|
- lib/grpc_interceptors/client/opentelemetry_tracing_interceptor.rb
|
|
263
276
|
- lib/grpc_interceptors/common/grpc_helper.rb
|
|
264
277
|
- lib/grpc_interceptors/common/log_payload.rb
|
|
265
278
|
- lib/grpc_interceptors/common/logging.rb
|
|
266
279
|
- lib/grpc_interceptors/common/opentelemetry_helper.rb
|
|
267
|
-
- lib/grpc_interceptors/
|
|
280
|
+
- lib/grpc_interceptors/kind.rb
|
|
268
281
|
- lib/grpc_interceptors/server/logging_interceptor.rb
|
|
269
282
|
- lib/grpc_interceptors/server/opentelemetry_tracing_interceptor.rb
|
|
270
283
|
- lib/grpc_interceptors/server/statsd_metrics.rb
|
|
@@ -288,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
288
301
|
- !ruby/object:Gem::Version
|
|
289
302
|
version: '0'
|
|
290
303
|
requirements: []
|
|
291
|
-
rubygems_version: 4.0.
|
|
304
|
+
rubygems_version: 4.0.10
|
|
292
305
|
specification_version: 4
|
|
293
306
|
summary: A collection of Ruby interceptors (middlewares) for gRPC servers and clients.
|
|
294
307
|
test_files: []
|