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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c51b232898a2b8b008b4de2d02600c7fe1e49498d9928788ff7f8a57c91cdee2
4
- data.tar.gz: 302ffaeb0c448bd5e1c660bb614239bcd94dccf8df387228c739f5093b041290
3
+ metadata.gz: 7d3e0f698d59a4a8427356e2581d63cc0d1caa54581e58ee48d3614f0a3c1b21
4
+ data.tar.gz: 457f47fb4eb8a2c2918dac9cade910849b1de2a1a77ab398ee293ac91c4c03f8
5
5
  SHA512:
6
- metadata.gz: 9c0fa8bb0b5abc00291d101ddc4f8e77a2652d955c9c838151d0ae6ab94d8458af00100f64fc54da5247b75c037f07b54e59477fae2c5bae4782dc872dc353ed
7
- data.tar.gz: 9934985ab2c5e87607b4f2caa32683e0e4f143a9d8666a37a3f0367e99383e03c6c66869f0a2e7998093689bc45f65c722173fc6d87ff124a41845ef38dc71ee
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
- - `grpc_method` representing the called method
51
- - `grpc_service` representing the service
52
- - `grpc_type` representing the gRPC kind of method
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::OpenTelemetryTracingInstrument.new
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::OpenTelemetryTracingInstrument.new
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 '../client'
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::Client::KIND, &block
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::Client::KIND, &block
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 '../client'
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::Client::KIND, attributes: attributes
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::Client::KIND, attributes: attributes
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.level == ::Logger::Severity::DEBUG && !response.nil? && !response.is_a?(Enumerator)
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
- if logger.level == ::Logger::Severity::INFO
77
+ level = normalized_level(logger)
78
+ if level == ::Logger::Severity::INFO
53
79
  logger.info(payload)
54
- elsif logger.level == ::Logger::Severity::DEBUG
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,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrpcInterceptors
4
- module Client
5
- KIND = :client
4
+ module Kind
5
+ CLIENT = :client
6
+ SERVER = :server
6
7
  end
7
8
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../client'
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::Server::KIND, &block
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 '../client'
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::Server::KIND,
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.0
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/server.rb
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.3
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: []
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GrpcInterceptors
4
- module Server
5
- KIND = :server
6
- end
7
- end