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 +4 -4
- data/lib/sqreen/metrics/base.rb +1 -1
- data/lib/sqreen/metrics/binning.rb +11 -22
- data/lib/sqreen/metrics_store.rb +4 -1
- data/lib/sqreen/performance_notifications/binned_metrics.rb +26 -10
- data/lib/sqreen/runner.rb +7 -6
- data/lib/sqreen/version.rb +1 -1
- 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: a44b9da6464b0a61db469f75d4b2ff4409aaa60c994c5770b30067c374fbf5c4
|
4
|
+
data.tar.gz: c8f6c266dc33f646c647dd614706acc496c8140325fc03b1401f1d0151750cdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e610db595536d1370a6f4c56da23dc2144332fba297f65b1e64187d53a535857e9bb6769fd4653f8fe18d866fa2b96d93641f02d51c067ca0012bcfe9820029d
|
7
|
+
data.tar.gz: 618f2a1454edab5fe1df062506c3cdb766e32579ae7874fb47f938e53d326a463415b7729c275aded79f2cb073b1c7b13c1af6f4ed6c628b496445d6bd7cdd65
|
data/lib/sqreen/metrics/base.rb
CHANGED
@@ -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(
|
12
|
-
|
13
|
-
@base =
|
14
|
-
@factor =
|
15
|
-
|
16
|
-
|
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
|
data/lib/sqreen/metrics_store.rb
CHANGED
@@ -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
|
-
|
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' => '
|
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' => '
|
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
|
-
|
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' => '
|
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 =
|
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
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
data/lib/sqreen/runner.rb
CHANGED
@@ -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
|
data/lib/sqreen/version.rb
CHANGED
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.
|
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-
|
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
|