sqreen 1.14.0 → 1.14.1

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: f6b572a1d9fe1440b268e4edcdcaab29a177edb3d7d6f915b100d57f77219ad5
4
- data.tar.gz: b05840f3d4cbc358d089b50299ccfdc7da0947a52f2603e34d572a97acb1c946
3
+ metadata.gz: a44b9da6464b0a61db469f75d4b2ff4409aaa60c994c5770b30067c374fbf5c4
4
+ data.tar.gz: c8f6c266dc33f646c647dd614706acc496c8140325fc03b1401f1d0151750cdf
5
5
  SHA512:
6
- metadata.gz: be7806a0578560be5926fa04bb3201440072237ce377f4aba73fe4a3b763b2bcf75d585fff195238e8acad6986ef1112635837d1d40d800ad4a6a5df002edb13
7
- data.tar.gz: b5d2cf720663a12d7add7b1f5f3ccf23bea712403898b97e10c45e741a1883fd9025b605f3ed2d02fd08f172ef2948b86f15e3e4defc2df6c2f3140e76d1d8da
6
+ metadata.gz: e610db595536d1370a6f4c56da23dc2144332fba297f65b1e64187d53a535857e9bb6769fd4653f8fe18d866fa2b96d93641f02d51c067ca0012bcfe9820029d
7
+ data.tar.gz: 618f2a1454edab5fe1df062506c3cdb766e32579ae7874fb47f938e53d326a463415b7729c275aded79f2cb073b1c7b13c1af6f4ed6c628b496445d6bd7cdd65
@@ -10,7 +10,7 @@ module Sqreen
10
10
  FINISH_KEY = 'finish'.freeze
11
11
  # Base interface for a metric
12
12
  class Base
13
- def initialize
13
+ def initialize(_opts={})
14
14
  @sample = nil
15
15
  end
16
16
 
@@ -6,14 +6,18 @@ require 'sqreen/metrics/base'
6
6
  module Sqreen
7
7
  module Metric
8
8
  # Takes numbers as samples and bins them (effectively, rounds them).
9
+ # Also collect max values
9
10
  class Binning < Base
11
+ BASE_KEY = 'base'.freeze
12
+ FACTOR_KEY = 'factor'.freeze
10
13
  # upper bound of i-th bin is factor * base^(i-1)
11
- def initialize(base, factor)
12
- super()
13
- @base = base
14
- @factor = factor
15
- log_base = Math.log(base)
16
- log_factor = Math.log(factor)
14
+ def initialize(opts={})
15
+ options = opts.dup
16
+ @base = options.delete(BASE_KEY)
17
+ @factor = options.delete(FACTOR_KEY)
18
+ super(options)
19
+ log_base = Math.log(@base)
20
+ log_factor = Math.log(@factor)
17
21
  @inv_log_base = 1 / log_base
18
22
  @add_parcel = - log_factor / log_base
19
23
  new_sample(Time.now.utc)
@@ -23,6 +27,7 @@ module Sqreen
23
27
  h = @sample[OBSERVATION_KEY]
24
28
  bin = bin_no(x)
25
29
  h[bin] += 1
30
+ h['max'] = x if x > h['max']
26
31
  end
27
32
 
28
33
  def next_sample(time)
@@ -54,21 +59,5 @@ module Sqreen
54
59
  res < 1 ? 1 : res
55
60
  end
56
61
  end
57
-
58
- # overrides the constructor
59
- class ParameterizedBinning < Binning
60
- def initialize
61
- raise 'Not configured' unless self.class.base && self.class.factor
62
- super(self.class.base, self.class.factor)
63
- end
64
-
65
- class << self
66
- attr_reader :base, :factor
67
- def parameters(opts)
68
- @base = opts[:base]
69
- @factor = opts[:factor]
70
- end
71
- end
72
- end
73
62
  end
74
63
  end
@@ -20,6 +20,7 @@ module Sqreen
20
20
  NAME_KEY = 'name'.freeze
21
21
  KIND_KEY = 'kind'.freeze
22
22
  PERIOD_KEY = 'period'.freeze
23
+ OPTIONS_KEY = 'options'.freeze
23
24
 
24
25
  # Currently ready samples
25
26
  attr_reader :store
@@ -38,7 +39,9 @@ module Sqreen
38
39
  name = definition[NAME_KEY]
39
40
  kind = definition[KIND_KEY]
40
41
  klass = valid_metric(kind, name)
41
- metric = mklass || klass.new
42
+
43
+ opts = definition[OPTIONS_KEY]
44
+ metric = mklass || klass.new(opts)
42
45
  @metrics[name] = [
43
46
  metric,
44
47
  definition[PERIOD_KEY],
@@ -8,26 +8,36 @@ module Sqreen
8
8
  module PerformanceNotifications
9
9
  # Logs callback performance
10
10
  class BinnedMetrics
11
+ DEFAULT_PERF_BASE = 2.0
12
+ DEFAULT_PERF_UNIT = 0.1 # ms
13
+ DEFAULT_PERF_PCT_BASE = 1.3
14
+ DEFAULT_PERF_PCT_UNIT = 1.0 # %
11
15
  EVENT_REQ = 'req'.freeze # request total time
12
16
  EVENT_TOTAL_TIME = 'sq'.freeze # sqreen total overhead callback time
17
+ EVENT_PERCENT = 'pct'.freeze # sqreen total overhead percent of time
13
18
 
14
19
  EVT_NAME_REGEXP = %r{\ACallbacks/([^/]+)/([^/]+)\z}
15
20
 
16
21
  # @param metrics_store [Sqreen::MetricsStore]
17
- def initialize(metrics_store, period)
22
+ def initialize(metrics_store, period, perf_metric_opts, perf_metric_percent_opts)
18
23
  @metrics_store = metrics_store
19
24
  @period = period
20
25
  @subid = nil
26
+ @perf_metric_opts = perf_metric_opts
27
+ @perf_metric_percent_opts = perf_metric_percent_opts
21
28
  end
22
29
 
23
30
  def enable
24
31
  return unless @subid.nil?
25
32
 
26
33
  metrics_store.create_metric(
27
- 'name' => EVENT_REQ, 'period' => period, 'kind' => 'ParameterizedBinning'
34
+ 'name' => EVENT_REQ, 'period' => period, 'kind' => 'Binning', 'options' => @perf_metric_opts
28
35
  )
29
36
  metrics_store.create_metric(
30
- 'name' => EVENT_TOTAL_TIME, 'period' => period, 'kind' => 'ParameterizedBinning'
37
+ 'name' => EVENT_TOTAL_TIME, 'period' => period, 'kind' => 'Binning', 'options' => @perf_metric_opts
38
+ )
39
+ metrics_store.create_metric(
40
+ 'name' => EVENT_PERCENT, 'period' => period, 'kind' => 'Binning', 'options' => @perf_metric_percent_opts
31
41
  )
32
42
 
33
43
  @subid = Sqreen::PerformanceNotifications.subscribe(&method(:log))
@@ -67,9 +77,15 @@ module Sqreen
67
77
  Sqreen.observations_queue.push(
68
78
  [EVENT_REQ, nil, duration_millis, finish_time_obj]
69
79
  )
80
+ total_t = SharedStorage[:sqreen_request_time]
70
81
  Sqreen.observations_queue.push(
71
82
  [EVENT_TOTAL_TIME, nil,
72
- SharedStorage[:sqreen_request_time], finish_time_obj]
83
+ total_t, finish_time_obj]
84
+ )
85
+ return if !duration_millis or total_t >= duration_millis
86
+ Sqreen.observations_queue.push(
87
+ [EVENT_PERCENT, nil,
88
+ (total_t*100.0)/(duration_millis-total_t), finish_time_obj]
73
89
  )
74
90
  end
75
91
 
@@ -82,7 +98,7 @@ module Sqreen
82
98
  def ensure_metric(metric_name)
83
99
  return if metrics_store.metric?(metric_name)
84
100
  metrics_store.create_metric(
85
- 'name' => metric_name, 'period' => period, 'kind' => 'ParameterizedBinning'
101
+ 'name' => metric_name, 'period' => period, 'kind' => 'Binning', 'options' => @perf_metric_opts
86
102
  )
87
103
  end
88
104
 
@@ -90,12 +106,12 @@ module Sqreen
90
106
  class << self
91
107
  # @return [Sqreen::PerformanceNotifications::BinnedMetrics]
92
108
  attr_reader :instance
93
- def enable(metrics_store, period = 60, base = 2.0, factor = 0.1)
109
+ def enable(metrics_store, period = 60, base = DEFAULT_PERF_BASE, factor = DEFAULT_PERF_UNIT, base_pct = DEFAULT_PERF_PCT_BASE, factor_pct = DEFAULT_PERF_PCT_UNIT)
94
110
  disable
95
- Sqreen::Metric::ParameterizedBinning.parameters(
96
- :base => base, :factor => factor
97
- )
98
- @instance = new(metrics_store, period).tap(&:enable)
111
+ @instance = new(metrics_store, period,
112
+ {'base'=> base, 'factor' => factor},
113
+ {'base' => base_pct, 'factor' => factor_pct}
114
+ ).tap(&:enable)
99
115
  end
100
116
 
101
117
  def disable
@@ -33,8 +33,6 @@ module Sqreen
33
33
 
34
34
  PERF_METRICS_PERIOD = 60 # 1 min
35
35
  DEFAULT_PERF_LEVEL = 0 # disabled
36
- DEFAULT_PERF_UNIT = 0.1 # ms
37
- DEFAULT_PERF_BASE = 2.0
38
36
 
39
37
  class << self
40
38
  attr_reader :features
@@ -213,7 +211,7 @@ module Sqreen
213
211
  end
214
212
  end
215
213
 
216
- def config_binned_metrics(level, base, factor)
214
+ def config_binned_metrics(level, base, factor, base_pct, factor_pct)
217
215
  level = level.to_i
218
216
  if level <= 0
219
217
  Sqreen.log.debug('Disabling binned metrics')
@@ -221,7 +219,7 @@ module Sqreen
221
219
  else
222
220
  Sqreen.log.warn("Unknown value for perf_level: #{level}. Treating as 1") unless level == 1
223
221
  PerformanceNotifications::BinnedMetrics.enable(
224
- metrics_engine, PERF_METRICS_PERIOD, base.to_f, factor.to_f
222
+ metrics_engine, PERF_METRICS_PERIOD, base.to_f, factor.to_f, base_pct.to_f, factor_pct.to_f
225
223
  )
226
224
  end
227
225
  end
@@ -306,8 +304,11 @@ module Sqreen
306
304
  session.request_compression = features['request_compression'] if session
307
305
  self.performance_metrics_period = features['performance_metrics_period']
308
306
  config_binned_metrics(features['perf_level'] || DEFAULT_PERF_LEVEL,
309
- features['perf_base'] || DEFAULT_PERF_BASE,
310
- features['perf_unit'] || DEFAULT_PERF_UNIT)
307
+ features['perf_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_BASE,
308
+ features['perf_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_UNIT,
309
+ features['perf_pct_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_BASE,
310
+ features['perf_pct_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_UNIT,
311
+ )
311
312
  self.call_counts_metrics_period = features['call_counts_metrics_period']
312
313
  hd = features['heartbeat_delay'].to_i
313
314
  self.heartbeat_delay = hd if hd > 0
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2015 Sqreen. All Rights Reserved.
2
2
  # Please refer to our terms for more information: https://www.sqreen.io/terms.html
3
3
  module Sqreen
4
- VERSION = '1.14.0'.freeze
4
+ VERSION = '1.14.1'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqreen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sqreen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-13 00:00:00.000000000 Z
11
+ date: 2018-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sq_mini_racer