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 +4 -4
- data/example/book.jsonnet +13 -1
- data/lib/kumonos/routes.rb +36 -4
- data/lib/kumonos/version.rb +1 -1
- data/lib/schemas/service_definition.json +11 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ad34c03f753a4743846d5133b14ce0ac2d932a4ff1c2cf1a7cceb7933763ab9
|
4
|
+
data.tar.gz: 1b2bf98aab7f7adbc5fcaee56a875b6c54d8bd394c68ee162d62edeaaf8438e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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: [
|
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
|
}
|
data/lib/kumonos/routes.rb
CHANGED
@@ -23,15 +23,23 @@ module Kumonos
|
|
23
23
|
|
24
24
|
def to_h
|
25
25
|
h = super
|
26
|
-
h[:routes] = routes.flat_map
|
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
|
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
|
-
|
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
|
data/lib/kumonos/version.rb
CHANGED
@@ -93,9 +93,8 @@
|
|
93
93
|
"items": {
|
94
94
|
"type": "object",
|
95
95
|
"id": "/properties/dependencies/items/properties/routes/items",
|
96
|
-
"additionalProperties":
|
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.
|
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
|
+
date: 2018-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|