kumonos 0.18.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9d8e70b585fb2808b2d3f92d44595ad1662230c4c15f7f3d653b0385ceb98e1
4
- data.tar.gz: 97df76a08e71b7f9297a89a0354d96beaefc21471bdd4e4a612fb45980f8b638
3
+ metadata.gz: 5ad34c03f753a4743846d5133b14ce0ac2d932a4ff1c2cf1a7cceb7933763ab9
4
+ data.tar.gz: 1b2bf98aab7f7adbc5fcaee56a875b6c54d8bd394c68ee162d62edeaaf8438e6
5
5
  SHA512:
6
- metadata.gz: 82ebb28e772af08d06f014223711bd81f6e43fed8259c9f41834ced770cbe2882e2dcb2ecbf5ec5bf3602b3de30440e54d0a806c9e8b9b8e24abb05f43cd88b4
7
- data.tar.gz: ceebdbab976f00c99b3717168451a52c6ebba6d70c841d8a319c71a548b908d2ec9022d233d3da61c567e31a749eddcb2d5242b788d01243afc025ffd07a8bfd
6
+ metadata.gz: e1eb30a96aada1267584b1582d844df9adea466d04efca71f9c29fb85026232a53c8b98df73e7cb8352088db753f70f82adfdf2b95eb031aa9d563749f49d90c
7
+ data.tar.gz: f46169d86632de1a48b24960739d659da3fc4f16d9f85b895f8539379c63524b287a2385d80da1dc20142725b00b7d535e159bc585759a04fdb2518401b13029
data/example/book.jsonnet CHANGED
@@ -21,7 +21,19 @@ local routes = import 'routes.libsonnet';
21
21
  tls: false,
22
22
  connect_timeout_ms: 250,
23
23
  circuit_breaker: circuit_breaker,
24
- routes: [routes.root],
24
+ routes: [
25
+ routes.root,
26
+ {
27
+ path: '/grpc.health.v1.Health/Check',
28
+ method: 'POST',
29
+ timeout_ms: 3000,
30
+ retry_policy: {
31
+ retry_on: '5xx,connect-failure,refused-stream,cancelled,deadline-exceeded,resource-exhausted',
32
+ num_retries: 3,
33
+ per_try_timeout_ms: 700,
34
+ },
35
+ },
36
+ ],
25
37
  },
26
38
  ],
27
39
  }
@@ -23,15 +23,23 @@ module Kumonos
23
23
 
24
24
  def to_h
25
25
  h = super
26
- h[:routes] = routes.flat_map { |r| [r.to_h_with_retry, r.to_h] }
26
+ h[:routes] = routes.flat_map do |r|
27
+ # i.e. retry with gRPC request (HTTP POST)
28
+ if r.method
29
+ [r.to_h_with_retry]
30
+ else
31
+ [r.to_h_with_retry, r.to_h]
32
+ end
33
+ end
27
34
  h
28
35
  end
29
36
  end
30
37
 
31
- Route = Struct.new(:prefix, :cluster, :timeout_ms, :retry_policy, :host_header) do
38
+ Route = Struct.new(:prefix, :path, :method, :cluster, :timeout_ms, :retry_policy, :host_header) do
32
39
  class << self
33
40
  def build(h, cluster, host_header)
34
- new(h.fetch('prefix'), cluster, h.fetch('timeout_ms'), RetryPolicy.build(h.fetch('retry_policy')), host_header)
41
+ new(h['prefix'], h['path'], h['method'], cluster, h.fetch('timeout_ms'),
42
+ RetryPolicy.build(h.fetch('retry_policy')), host_header)
35
43
  end
36
44
  end
37
45
 
@@ -39,6 +47,18 @@ module Kumonos
39
47
  h = super
40
48
  h.delete(:retry_policy)
41
49
  h.delete(:host_header)
50
+ h.delete(:method)
51
+
52
+ if prefix
53
+ h.delete(:path)
54
+ h[:prefix] = prefix
55
+ elsif path
56
+ h.delete(:prefix)
57
+ h[:path] = path
58
+ else
59
+ raise '`path` or `prefix` is required'
60
+ end
61
+
42
62
  if host_header
43
63
  h[:host_rewrite] = host_header
44
64
  else
@@ -47,10 +67,22 @@ module Kumonos
47
67
  h
48
68
  end
49
69
 
70
+ ALLOWED_METHODS = %w[GET HEAD POST PUT DELETE].freeze
50
71
  def to_h_with_retry
51
72
  h = to_h
52
73
  h[:retry_policy] = retry_policy.to_h
53
- h[:headers] = [{ name: ':method', value: '(GET|HEAD)', regex: true }]
74
+
75
+ if method
76
+ m = method.upcase
77
+ unless ALLOWED_METHODS.include?(m)
78
+ raise "method must be one of #{ALLOWED_METHODS.join(',')}: given `#{m}`"
79
+ end
80
+
81
+ h[:headers] = [{ name: ':method', value: m, regex: false }]
82
+ else
83
+ h[:headers] = [{ name: ':method', value: '(GET|HEAD)', regex: true }]
84
+ end
85
+
54
86
  h
55
87
  end
56
88
  end
@@ -1,3 +1,3 @@
1
1
  module Kumonos
2
- VERSION = '0.18.0'.freeze
2
+ VERSION = '0.19.0'.freeze
3
3
  end
@@ -93,9 +93,8 @@
93
93
  "items": {
94
94
  "type": "object",
95
95
  "id": "/properties/dependencies/items/properties/routes/items",
96
- "additionalProperties": false,
96
+ "additionalProperties": true,
97
97
  "required": [
98
- "prefix",
99
98
  "timeout_ms",
100
99
  "retry_policy"
101
100
  ],
@@ -105,6 +104,16 @@
105
104
  "id": "/properties/dependencies/items/properties/routes/items/properties/prefix",
106
105
  "default": "/"
107
106
  },
107
+ "path": {
108
+ "type": "string",
109
+ "id": "/properties/dependencies/items/properties/routes/items/properties/path",
110
+ "default": "/"
111
+ },
112
+ "method": {
113
+ "type": "string",
114
+ "id": "/properties/dependencies/items/properties/routes/items/properties/method",
115
+ "default": "/"
116
+ },
108
117
  "timeout_ms": {
109
118
  "type": "integer",
110
119
  "id": "/properties/dependencies/items/properties/routes/items/properties/timeout_ms",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumonos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-11 00:00:00.000000000 Z
11
+ date: 2018-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema