upfluence-utils 0.6.2 → 0.8.0
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/lib/upfluence/http/endpoint/api_endpoint.rb +18 -6
- data/lib/upfluence/http/middleware/prometheus.rb +19 -13
- data/lib/upfluence/peer.rb +30 -0
- data/lib/upfluence/utils/version.rb +1 -1
- data/rbutils.gemspec +4 -3
- metadata +24 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ceaeab38d91b29c5642efd418464634aff70d4b856e81838119cfb9bb51ea07
|
|
4
|
+
data.tar.gz: d1bfcabd937fd21089a5a612c978975bfb076c247281b7e120be395898a85fc4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dc7bca3bd0914d787e15e30900705037a845f98311df404e4a40f0f016241bd014691a235c340b543a30b51fc477eca413cadd49889e9ed36bf6c30e4a2bf4eb
|
|
7
|
+
data.tar.gz: 14d6565989fff758bb50662eb7dfbb2e2e9423469f85656a4cf78c3eac0ca7ceaaa6ed620f72335c3c747ceb495bd96bf85c9c1e8d28733359e2c70d04fc9c86
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require 'sinatra'
|
|
2
|
+
require 'active_record'
|
|
3
|
+
require 'active_support/hash_with_indifferent_access'
|
|
2
4
|
|
|
3
5
|
module Upfluence
|
|
4
6
|
module HTTP
|
|
@@ -31,9 +33,9 @@ module Upfluence
|
|
|
31
33
|
token = params[:access_token]
|
|
32
34
|
|
|
33
35
|
unless token
|
|
34
|
-
pattern
|
|
35
|
-
header
|
|
36
|
-
token
|
|
36
|
+
pattern = /^Bearer /
|
|
37
|
+
header = request.env['HTTP_AUTHORIZATION']
|
|
38
|
+
token = header.gsub(pattern, '') if header&.match(pattern)
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
token
|
|
@@ -50,13 +52,17 @@ module Upfluence
|
|
|
50
52
|
opts = args.first || {}
|
|
51
53
|
|
|
52
54
|
result = if resource.is_a? Enumerable
|
|
53
|
-
USerializer::ArraySerializer.new(
|
|
55
|
+
USerializer::ArraySerializer.new(
|
|
56
|
+
resource, *args
|
|
57
|
+
).to_json
|
|
54
58
|
elsif opts[:serializer]
|
|
55
59
|
opts[:serializer].new(resource, *args).to_json
|
|
56
60
|
elsif resource.respond_to?(:serialize)
|
|
57
61
|
resource.serialize(*args).to_json
|
|
58
62
|
else
|
|
59
|
-
USerializer.serializer_for(resource).new(
|
|
63
|
+
USerializer.serializer_for(resource).new(
|
|
64
|
+
resource, *args
|
|
65
|
+
).to_json
|
|
60
66
|
end
|
|
61
67
|
end
|
|
62
68
|
|
|
@@ -64,7 +70,9 @@ module Upfluence
|
|
|
64
70
|
end
|
|
65
71
|
|
|
66
72
|
def json_params
|
|
67
|
-
ActiveSupport::HashWithIndifferentAccess.new(
|
|
73
|
+
ActiveSupport::HashWithIndifferentAccess.new(
|
|
74
|
+
JSON.parse(request_body)
|
|
75
|
+
)
|
|
68
76
|
end
|
|
69
77
|
end
|
|
70
78
|
|
|
@@ -84,6 +92,10 @@ module Upfluence
|
|
|
84
92
|
Sinatra::Base.not_found do
|
|
85
93
|
[404, {}, { error: 'not_found' }.to_json]
|
|
86
94
|
end
|
|
95
|
+
|
|
96
|
+
Sinatra::Base.error ActiveRecord::RecordInvalid do |e|
|
|
97
|
+
[422, Base::Exceptions::ValidationError.from_model(e.record).to_json]
|
|
98
|
+
end
|
|
87
99
|
end
|
|
88
100
|
end
|
|
89
101
|
end
|
|
@@ -5,6 +5,8 @@ module Upfluence
|
|
|
5
5
|
module HTTP
|
|
6
6
|
module Middleware
|
|
7
7
|
class Prometheus
|
|
8
|
+
LABELS = %i[path method env].freeze
|
|
9
|
+
|
|
8
10
|
def initialize(app, registry = ::Prometheus::Client.registry)
|
|
9
11
|
@registry = registry
|
|
10
12
|
|
|
@@ -12,14 +14,16 @@ module Upfluence
|
|
|
12
14
|
:uhttp_handler_requests_total
|
|
13
15
|
) || @registry.counter(
|
|
14
16
|
:uhttp_handler_requests_total,
|
|
15
|
-
'Histogram of processed items',
|
|
17
|
+
docstring: 'Histogram of processed items',
|
|
18
|
+
labels: LABELS + %i[status]
|
|
16
19
|
)
|
|
17
20
|
|
|
18
21
|
@request_histogram = @registry.get(
|
|
19
22
|
:uhttp_handler_requests_duration_second
|
|
20
23
|
) || @registry.histogram(
|
|
21
24
|
:uhttp_handler_requests_duration_second,
|
|
22
|
-
'Histogram of processing time',
|
|
25
|
+
docstring: 'Histogram of processing time',
|
|
26
|
+
labels: LABELS
|
|
23
27
|
)
|
|
24
28
|
|
|
25
29
|
@app = app
|
|
@@ -41,19 +45,21 @@ module Upfluence
|
|
|
41
45
|
|
|
42
46
|
def record(env, code, duration)
|
|
43
47
|
@request_total_count.increment(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
labels: {
|
|
49
|
+
path: parse_route(env),
|
|
50
|
+
method: env['REQUEST_METHOD'].downcase,
|
|
51
|
+
status: code,
|
|
52
|
+
env: Upfluence.env.to_s
|
|
53
|
+
}
|
|
48
54
|
)
|
|
49
55
|
|
|
50
56
|
@request_histogram.observe(
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
duration,
|
|
58
|
+
labels: {
|
|
59
|
+
path: parse_route(env),
|
|
53
60
|
method: env['REQUEST_METHOD'].downcase,
|
|
54
|
-
env:
|
|
55
|
-
}
|
|
56
|
-
duration
|
|
61
|
+
env: Upfluence.env.to_s
|
|
62
|
+
}
|
|
57
63
|
)
|
|
58
64
|
end
|
|
59
65
|
|
|
@@ -75,8 +81,8 @@ module Upfluence
|
|
|
75
81
|
|
|
76
82
|
path = Rack::Request.new(env).path
|
|
77
83
|
|
|
78
|
-
splitted_template = route.split(' ').last.split('/').
|
|
79
|
-
v
|
|
84
|
+
splitted_template = route.split(' ').last.split('/').rejext do |v|
|
|
85
|
+
v.eql?('')
|
|
80
86
|
end.reverse
|
|
81
87
|
|
|
82
88
|
path.split('/').reverse.map.with_index do |part, i|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Upfluence
|
|
2
|
+
class Peer
|
|
3
|
+
attr_reader :environment, :authority, :instance_name, :project_name,
|
|
4
|
+
:app_name
|
|
5
|
+
|
|
6
|
+
def initialize(opts = {})
|
|
7
|
+
@authority = opts[:authority] || 'local'
|
|
8
|
+
@instance_name = opts[:instance_name] || 'unknown-server'
|
|
9
|
+
@app_name = opts[:app_name] || 'unknown-name'
|
|
10
|
+
@project_name = opts[:project_name] || 'unknown-app'
|
|
11
|
+
@environment = opts[:environment] || 'development'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_url
|
|
15
|
+
"peer://#{@environment}@#{@authority}/#{@instance_name}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
def from_env
|
|
20
|
+
Peer.new(
|
|
21
|
+
authority: ENV['AUTHORITY'],
|
|
22
|
+
instance_name: ENV['INSTANCE_NAME'],
|
|
23
|
+
app_name: ENV['APP_NAME'],
|
|
24
|
+
project_name: ENV['PROJECT_NAME'],
|
|
25
|
+
environment: ENV['ENV']
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/rbutils.gemspec
CHANGED
|
@@ -17,9 +17,9 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
spec.require_paths = ["lib"]
|
|
18
18
|
|
|
19
19
|
spec.add_development_dependency "bundler", "~> 1.12"
|
|
20
|
-
spec.add_development_dependency "rake", "
|
|
20
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
21
21
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
22
|
-
spec.add_runtime_dependency 'upfluence-thrift', '~>
|
|
22
|
+
spec.add_runtime_dependency 'upfluence-thrift', '~> 2.1'
|
|
23
23
|
spec.add_runtime_dependency 'base-thrift', '>= 0.1.0'
|
|
24
24
|
spec.add_runtime_dependency 'sinatra'
|
|
25
25
|
spec.add_runtime_dependency 'redis'
|
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.add_runtime_dependency 'puma'
|
|
30
30
|
spec.add_runtime_dependency 'rack'
|
|
31
31
|
spec.add_runtime_dependency 'stackprof'
|
|
32
|
-
spec.add_runtime_dependency 'prometheus-client'
|
|
32
|
+
spec.add_runtime_dependency 'prometheus-client', '~> 2.1'
|
|
33
33
|
spec.add_runtime_dependency 'userializer'
|
|
34
|
+
spec.add_runtime_dependency 'activerecord'
|
|
34
35
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: upfluence-utils
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Upfluence
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-11-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -28,16 +28,16 @@ dependencies:
|
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 12.3.3
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: 12.3.3
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -58,20 +58,14 @@ dependencies:
|
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '1
|
|
62
|
-
- - ">="
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: 1.0.3
|
|
61
|
+
version: '2.1'
|
|
65
62
|
type: :runtime
|
|
66
63
|
prerelease: false
|
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
68
65
|
requirements:
|
|
69
66
|
- - "~>"
|
|
70
67
|
- !ruby/object:Gem::Version
|
|
71
|
-
version: '1
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: 1.0.3
|
|
68
|
+
version: '2.1'
|
|
75
69
|
- !ruby/object:Gem::Dependency
|
|
76
70
|
name: base-thrift
|
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -200,6 +194,20 @@ dependencies:
|
|
|
200
194
|
version: '0'
|
|
201
195
|
- !ruby/object:Gem::Dependency
|
|
202
196
|
name: prometheus-client
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - "~>"
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '2.1'
|
|
202
|
+
type: :runtime
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - "~>"
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '2.1'
|
|
209
|
+
- !ruby/object:Gem::Dependency
|
|
210
|
+
name: userializer
|
|
203
211
|
requirement: !ruby/object:Gem::Requirement
|
|
204
212
|
requirements:
|
|
205
213
|
- - ">="
|
|
@@ -213,7 +221,7 @@ dependencies:
|
|
|
213
221
|
- !ruby/object:Gem::Version
|
|
214
222
|
version: '0'
|
|
215
223
|
- !ruby/object:Gem::Dependency
|
|
216
|
-
name:
|
|
224
|
+
name: activerecord
|
|
217
225
|
requirement: !ruby/object:Gem::Requirement
|
|
218
226
|
requirements:
|
|
219
227
|
- - ">="
|
|
@@ -262,6 +270,7 @@ files:
|
|
|
262
270
|
- lib/upfluence/logger.rb
|
|
263
271
|
- lib/upfluence/mixin/pagination.rb
|
|
264
272
|
- lib/upfluence/mixin/strong_parameters.rb
|
|
273
|
+
- lib/upfluence/peer.rb
|
|
265
274
|
- lib/upfluence/pool.rb
|
|
266
275
|
- lib/upfluence/utils.rb
|
|
267
276
|
- lib/upfluence/utils/http/middleware/null.rb
|