upfluence-utils 0.5.2 → 0.5.3

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
  SHA1:
3
- metadata.gz: b23e691f998914c5bc1d98d97af634f4361f3587
4
- data.tar.gz: 0244e8237ceda7c2dcc463fc704ecb2aab689f47
3
+ metadata.gz: 96b4ca9a69d062c47d1338e7abed5ecc8077cb39
4
+ data.tar.gz: 2fb9fb60bfb19b53fb9204e36dc2cf46adf64aa9
5
5
  SHA512:
6
- metadata.gz: e3fbb887339d789a60cdec17461fb64e9c00142585f752e9ea472cea509871d6173376d70d895e1bb4bfeb6fa9efd9670a16200bd44f5aea7d988bfa2bc672cf
7
- data.tar.gz: 488d26965cfd791f160376afcaa493e956cc26cffe74bce0c2e511d429da3a9089cba42b68e0102ef37b0dd1f2717cf9f639f28a76b07638f793cab41ce584a1
6
+ metadata.gz: 777f3f18e6305964baebe31806b43e397b381eceea0ec98fb4397466dd5b1a928a70b7a4424a7670bbdab50cc8180557105a278ac942bf0bd5b8010e2251df93
7
+ data.tar.gz: c46b9b7d281e884b719bad94d214247393512b8698c4366e1147739d049ff7b30136328423ed42460cd0182a213908da768f262d19eda72a315921e937ad84a4
@@ -0,0 +1,51 @@
1
+ require 'stackprof'
2
+
3
+ module Upfluence
4
+ module HTTP
5
+ module Endpoint
6
+ class Profiler
7
+ def initialize(opts = {})
8
+ @interval = opts[:interval] || 50
9
+ @mode = opts[:mode] || :cpu
10
+ @mapping = Rack::URLMap.new(
11
+ '/start' => lambda { |env| start(env) },
12
+ '/stop' => lambda { |env| stop(env) },
13
+ '/profile' => lambda { |env| profile(env) }
14
+ )
15
+ end
16
+
17
+ def call(env)
18
+ @mapping.call(env)
19
+ end
20
+
21
+ private
22
+
23
+ def stop(env)
24
+ StackProf.stop
25
+ return ok
26
+ end
27
+
28
+ def start(env)
29
+ StackProf.start(mode: @mode, interval: @interval, raw: false)
30
+ return ok
31
+ end
32
+
33
+ def profile(env)
34
+ results = StackProf.results
35
+ @last_results = Marshal.dump(results) if results
36
+
37
+ return [200, {}, [@last_results]] if @last_results
38
+ return [404, {}, ['No profile available']]
39
+ end
40
+
41
+ def ok
42
+ [200, {}, ['ok']]
43
+ end
44
+
45
+ def path(env)
46
+ Rack::Request.new(env).path
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -8,6 +8,7 @@ require 'upfluence/error_logger'
8
8
 
9
9
  require 'upfluence/http/builder'
10
10
  require 'upfluence/http/endpoint/healthcheck'
11
+ require 'upfluence/http/endpoint/profiler'
11
12
  require 'upfluence/http/middleware/logger'
12
13
  require 'upfluence/http/middleware/application_headers'
13
14
  require 'upfluence/http/middleware/handle_exception'
@@ -26,7 +27,8 @@ module Upfluence
26
27
  push_gateway_url: ENV['PUSH_GATEWAY_URL'],
27
28
  push_gateway_interval: 15, # sec
28
29
  app_name: ENV['APP_NAME'] || 'uhttp-rb-server',
29
- unit_name: ENV['UNIT_NAME'] || 'uhttp-rb-server-anonymous'
30
+ unit_name: ENV['UNIT_NAME'] || 'uhttp-rb-server-anonymous',
31
+ debug: ENV['DEBUG']
30
32
  }.freeze
31
33
 
32
34
  def initialize(options = {}, &block)
@@ -54,6 +56,10 @@ module Upfluence
54
56
  run_thrift Base::Base_service::BaseService::Processor, base_handler
55
57
  end
56
58
 
59
+ map '/debug' do
60
+ run Endpoint::Profiler.new
61
+ end if opts[:debug]
62
+
57
63
  instance_eval(&block)
58
64
  end
59
65
 
@@ -1,5 +1,5 @@
1
1
  module Upfluence
2
2
  module Utils
3
- VERSION = '0.5.2'.freeze
3
+ VERSION = '0.5.3'.freeze
4
4
  end
5
5
  end
data/rbutils.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency 'activesupport'
29
29
  spec.add_runtime_dependency 'puma'
30
30
  spec.add_runtime_dependency 'rack'
31
+ spec.add_runtime_dependency 'stackprof'
31
32
  spec.add_runtime_dependency 'prometheus-client'
32
33
  spec.add_runtime_dependency 'active_model_serializers', '~> 0.9.0'
33
34
  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.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Upfluence
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-21 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -184,6 +184,20 @@ dependencies:
184
184
  - - ">="
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: stackprof
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :runtime
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
187
201
  - !ruby/object:Gem::Dependency
188
202
  name: prometheus-client
189
203
  requirement: !ruby/object:Gem::Requirement
@@ -238,6 +252,7 @@ files:
238
252
  - lib/upfluence/http/builder.rb
239
253
  - lib/upfluence/http/endpoint/api_endpoint.rb
240
254
  - lib/upfluence/http/endpoint/healthcheck.rb
255
+ - lib/upfluence/http/endpoint/profiler.rb
241
256
  - lib/upfluence/http/middleware/application_headers.rb
242
257
  - lib/upfluence/http/middleware/handle_exception.rb
243
258
  - lib/upfluence/http/middleware/logger.rb