sqreen 1.14.0 → 1.14.1

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
  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