jtl 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +42 -0
- data/Rakefile +5 -0
- data/jtl.gemspec +26 -0
- data/lib/jtl.rb +8 -0
- data/lib/jtl/data_set.rb +68 -0
- data/lib/jtl/jtl.rb +119 -0
- data/lib/jtl/labeled_value.rb +9 -0
- data/lib/jtl/version.rb +3 -0
- data/spec/jtl_spec.rb +120 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/test.jtl +3400 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dd974352f7bbf4079cc561228f9c96cf4f4f807a
|
4
|
+
data.tar.gz: c68c4d052a055c16375c1d7f79e16acb84c2d024
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0cc634cbea1c9afdcd2aee945ffc5369c1c41559fde2c8bbdf9ad7610ab57ec5c3f66dfd05fcad244a5a4a3ff6dc258ea6c389ad26f795b865dfa0d52d39b044
|
7
|
+
data.tar.gz: b1290bc9dbed290529a8ed201716c7c70725b197154d61e3054554f11eea359a8099a45213641777db7b0dc304efc2d5b92c47bb76431bc8db2e082ac91ac1a2
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
test.rb
|
19
|
+
jmeter.jmx
|
20
|
+
jmeter.jtl
|
21
|
+
jmeter.log
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Genki Sugawara
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# jtl
|
2
|
+
|
3
|
+
Parse a default jtl file of [Apache JMeter](http://jmeter.apache.org/).
|
4
|
+
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/jtl.png)](http://badge.fury.io/rb/jtl)
|
6
|
+
[![Build Status](https://drone.io/bitbucket.org/winebarrel/jtl/status.png)](https://drone.io/bitbucket.org/winebarrel/jtl/latest)
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
gem 'jtl'
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install jtl
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
require 'jtl'
|
26
|
+
require 'gruff'
|
27
|
+
|
28
|
+
jtl = Jtl.new('jmeter.jtl', 10_000)
|
29
|
+
# ~~~~~~~ interval: 10s (default: 1s)
|
30
|
+
|
31
|
+
g = Gruff::Line.new
|
32
|
+
|
33
|
+
g.title = 'elapsed (avg)'
|
34
|
+
marks = jtl.scale_marks.map {|i| i.strftime('%M:%S') }
|
35
|
+
g.labels = Hash[*(0...marks.length).zip(marks).flatten]
|
36
|
+
|
37
|
+
g.data :all, jtl.elapseds {|i| i.mean }
|
38
|
+
g.data :my_label1, jtl.elapseds.my_label1 {|i| i.mean }
|
39
|
+
g.data :my_label2, jtl.elapseds.my_label2 {|i| i.mean }
|
40
|
+
|
41
|
+
g.write('elapsed.png')
|
42
|
+
```
|
data/Rakefile
ADDED
data/jtl.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'jtl/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'jtl'
|
8
|
+
spec.version = Jtl::VERSION
|
9
|
+
spec.authors = ['Genki Sugawara']
|
10
|
+
spec.email = ['sgwr_dts@yahoo.co.jp']
|
11
|
+
spec.description = %q{Parse a default jtl file of Apache JMeter.}
|
12
|
+
spec.summary = %q{Parse a default jtl file of Apache JMeter.}
|
13
|
+
spec.homepage = 'https://bitbucket.org/winebarrel/jtl'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'simple_stats'
|
22
|
+
spec.add_dependency 'orderedhash'
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 2.0'
|
26
|
+
end
|
data/lib/jtl.rb
ADDED
data/lib/jtl/data_set.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
class Jtl::DataSet
|
2
|
+
include Enumerable
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
def_delegators :@jtl, :scale_marks, :labels
|
6
|
+
|
7
|
+
def self.create(data_set, jtl)
|
8
|
+
obj = self.new(data_set, jtl)
|
9
|
+
|
10
|
+
if block_given?
|
11
|
+
obj.to_a.map {|i| yield(i) }
|
12
|
+
else
|
13
|
+
obj
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(data_set, jtl)
|
18
|
+
@data_set = data_set
|
19
|
+
@jtl = jtl
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_hash
|
23
|
+
hash = {}
|
24
|
+
|
25
|
+
@data_set.each do |mark, values|
|
26
|
+
values.each do |lv|
|
27
|
+
hash[lv.label] ||= {}
|
28
|
+
hash[lv.label][mark] ||= []
|
29
|
+
hash[lv.label][mark] << lv.value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
return hash
|
34
|
+
end
|
35
|
+
alias inspect to_hash
|
36
|
+
|
37
|
+
def [](label, &block)
|
38
|
+
new_data_set = OrderedHash.new
|
39
|
+
|
40
|
+
@data_set.each do |mark, values|
|
41
|
+
new_data_set[mark] = values.select do |lv|
|
42
|
+
if label.kind_of?(Regexp)
|
43
|
+
lv.label =~ label
|
44
|
+
else
|
45
|
+
lv.label == label.to_s
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
self.class.create(new_data_set, @jtl, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
def each
|
54
|
+
@data_set.each do |mark, values|
|
55
|
+
yield(values.map {|lv| lv.value})
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def method_missing(name, *args, &block)
|
60
|
+
if (ary = self.to_a).respond_to?(name)
|
61
|
+
ary.send(name, *args, &block)
|
62
|
+
elsif args.empty?
|
63
|
+
self[name.to_s, &block]
|
64
|
+
else
|
65
|
+
super
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/jtl/jtl.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
class Jtl
|
2
|
+
attr_accessor :interval
|
3
|
+
|
4
|
+
COLUMNS = [
|
5
|
+
:time_stamp,
|
6
|
+
:elapsed,
|
7
|
+
:label,
|
8
|
+
:response_code,
|
9
|
+
:response_message,
|
10
|
+
:thread_name,
|
11
|
+
:data_type,
|
12
|
+
:success,
|
13
|
+
:bytes,
|
14
|
+
:latency,
|
15
|
+
]
|
16
|
+
|
17
|
+
def initialize(path, interval = 1000)
|
18
|
+
path = path.path if path.kind_of?(File)
|
19
|
+
@jtl = CSV.read(path)
|
20
|
+
@interval = interval
|
21
|
+
end
|
22
|
+
|
23
|
+
def labels
|
24
|
+
@jtl.inject({}) {|r, i| r[label(i)] = true; r }.keys
|
25
|
+
end
|
26
|
+
|
27
|
+
def scale_marks
|
28
|
+
aggregate_rows.keys
|
29
|
+
end
|
30
|
+
|
31
|
+
def time_stamps(&block)
|
32
|
+
data_set = aggregate_by(:time_stamp) {|v| v.to_i }
|
33
|
+
DataSet.create(data_set, self, &block)
|
34
|
+
end
|
35
|
+
|
36
|
+
def elapseds(&block)
|
37
|
+
data_set = aggregate_by(:elapsed) {|v| v.to_i }
|
38
|
+
DataSet.create(data_set, self, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def response_codes(&block)
|
42
|
+
data_set = aggregate_by(:response_code) {|v| v.to_i }
|
43
|
+
DataSet.create(data_set, self, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def thread_names(&block)
|
47
|
+
data_set = aggregate_by(:thread_name)
|
48
|
+
DataSet.create(data_set, self, &block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def response_messages(&block)
|
52
|
+
data_set = aggregate_by(:response_message)
|
53
|
+
DataSet.create(data_set, self, &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
def data_types(&block)
|
57
|
+
data_set = aggregate_by(:data_type)
|
58
|
+
DataSet.create(data_set, self, &block)
|
59
|
+
end
|
60
|
+
|
61
|
+
def successes(&block)
|
62
|
+
data_set = aggregate_by(:success) {|v| v == 'true' }
|
63
|
+
DataSet.create(data_set, self, &block)
|
64
|
+
end
|
65
|
+
|
66
|
+
def bytes(&block)
|
67
|
+
data_set = aggregate_by(:bytes) {|v| v.to_i }
|
68
|
+
DataSet.create(data_set, self, &block)
|
69
|
+
end
|
70
|
+
|
71
|
+
def latencies(&block)
|
72
|
+
data_set = aggregate_by(:latency) {|v| v.to_i }
|
73
|
+
DataSet.create(data_set, self, &block)
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def aggregate_by(column)
|
79
|
+
idx = COLUMNS.index(column)
|
80
|
+
aggregated = OrderedHash.new
|
81
|
+
|
82
|
+
aggregate_rows.each do |mark, rows|
|
83
|
+
aggregated[mark] = rows.map do |row|
|
84
|
+
value = row[idx]
|
85
|
+
value = yield(value) if block_given?
|
86
|
+
LabeledValue.new(label(row), value)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
return aggregated
|
91
|
+
end
|
92
|
+
|
93
|
+
def aggregate_rows
|
94
|
+
aggregated = OrderedHash.new
|
95
|
+
|
96
|
+
@jtl.each do |row|
|
97
|
+
ts = row[0].to_i
|
98
|
+
ts = ts - (ts % @interval)
|
99
|
+
ts = parse_time_stamp(ts)
|
100
|
+
|
101
|
+
aggregated[ts] ||= []
|
102
|
+
aggregated[ts] << row
|
103
|
+
end
|
104
|
+
|
105
|
+
return aggregated
|
106
|
+
end
|
107
|
+
|
108
|
+
def parse_time_stamp(ts)
|
109
|
+
ts = ts.to_i
|
110
|
+
msec = (ts % 1000)
|
111
|
+
ts = ((ts - msec) / 1000).to_i
|
112
|
+
Time.at(ts, msec * 1000)
|
113
|
+
end
|
114
|
+
|
115
|
+
def label(row)
|
116
|
+
@label_index = COLUMNS.index(:label) unless @label_index
|
117
|
+
row[@label_index]
|
118
|
+
end
|
119
|
+
end
|
data/lib/jtl/version.rb
ADDED
data/spec/jtl_spec.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
describe Jtl do
|
2
|
+
let(:jtl_path) do
|
3
|
+
File.expand_path('../test.jtl', __FILE__)
|
4
|
+
end
|
5
|
+
|
6
|
+
let(:jtl_range) do
|
7
|
+
1390719751491..1390719811195
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:jtl_elapseds) do
|
11
|
+
[[458, 324, 177], [164, 165, 156, 158, 163, 332, 158, 158, 163, 151, 159, 166, 172, 169, 329, 168, 169], [159, 155, 158, 158, 159, 160, 160, 161, 177, 156, 159, 157, 326, 158, 165, 164, 166, 158, 156, 156, 156, 159, 159, 155, 156, 155, 158, 169, 335], [169, 155, 164, 165, 169, 229, 162, 160, 159, 159, 165, 167, 162, 165, 154, 166, 161, 352, 160, 172, 170, 166, 159, 160, 173, 158, 160, 160, 162, 159, 162, 167, 192, 164, 166, 166, 159, 178, 275, 163, 170], [164, 164, 164, 165, 165, 161, 169, 167, 169, 170, 170, 170, 164, 156, 178, 177, 159, 160, 160, 161, 177, 310, 177, 164, 163, 172, 171, 172, 172, 161, 160, 165, 167, 170, 167, 169, 169, 169, 168, 169, 178, 170, 169, 166, 168, 169, 169, 168, 313, 178, 202, 176, 177], [170, 168, 168, 170, 159, 160, 156, 172, 170, 171, 157, 157, 158, 162, 171, 169, 170, 184, 163, 166, 166, 162, 168, 169, 175, 173, 171, 177, 174, 183, 163, 163, 163, 163, 174, 175, 176, 167, 172, 171, 168, 175, 175, 175, 177, 177, 176, 177, 172, 171, 169, 167, 167, 169, 165, 166, 170], [161, 163, 166, 167, 183, 183, 184, 197, 197, 196, 161, 171, 161, 174, 161, 161, 161, 180, 184, 185, 160, 159, 182, 181, 160, 160, 160, 162, 164, 164, 166, 167, 159, 161, 162, 164, 166, 172, 172, 181, 181, 164, 158, 166, 166, 167, 165, 170, 180, 172, 178, 177, 168, 164, 169, 170, 188], [157, 161, 163, 169, 170, 171, 183, 179, 159, 181, 173, 162, 164, 168, 167, 180, 162, 163, 164, 163, 157, 157, 160, 160, 172, 157, 162, 158, 157, 159, 160, 175, 178, 158, 161, 169, 169, 167, 169, 167, 164, 163, 173, 177, 178, 169, 169, 170, 169, 170, 163, 158, 161, 162, 189, 189, 191, 187, 189, 190, 172], [174, 178, 177, 191, 190, 192, 196, 196, 196, 167, 164, 168, 178, 173, 172, 172, 167, 168, 168, 171, 189, 158, 167, 172, 171, 172, 184, 185, 189, 170, 183, 174, 161, 174, 173, 173, 164, 166, 175, 162, 160, 160, 158, 178, 178, 179, 176, 176, 182, 158, 171, 170, 165, 168, 167, 181, 180, 162, 180], [155, 167, 166, 168, 180, 180, 177, 177, 179, 161, 196, 169, 168, 170, 165, 165, 166, 166, 185, 171, 188, 156, 157, 169, 166, 169, 159, 173, 175, 190, 162, 178, 194, 195, 163, 162, 160, 161, 180, 180, 182, 182, 197, 205, 163, 162, 174, 163, 165, 171, 175, 173, 157, 159, 159, 159, 159, 166], [156, 173, 172, 172, 172, 162, 159, 160, 155, 162, 164, 163, 163, 163, 175, 175, 170, 165, 173, 156, 176, 167, 166, 177, 165, 168, 163, 163, 165, 165, 158, 160, 162, 158, 166, 166, 155, 163, 164, 160, 160, 166, 161, 166, 168, 166, 165, 157, 163, 165, 160, 169, 168, 170, 163, 168, 169, 169, 160, 160], [163, 160, 161, 163, 170, 174, 159, 159, 158, 160, 165, 165, 164, 162, 165, 165, 158, 162, 161, 164, 161, 163, 163, 162, 167, 168, 176, 176, 176, 177, 168, 158, 159, 158, 170, 170, 159, 160, 159, 163, 164, 159, 159, 159, 176, 176, 161, 162, 163, 162, 160, 176, 176, 175, 178, 180, 179, 177, 178, 181], [166, 163, 163, 164, 162, 154, 158, 158, 169, 158, 184, 158, 167, 168, 168, 186, 188, 185, 189, 185, 167, 173, 166, 165, 170, 161, 159, 164, 161, 164, 162, 162, 157, 158, 160, 160, 160, 164, 164, 167, 158, 159, 167, 169, 175, 159, 167, 168, 164, 163, 166, 164, 167, 172, 170, 176, 173, 176, 176, 180], [169, 168, 164, 175, 162, 158, 157, 170, 163, 165, 160, 160, 162, 155, 154, 151, 154, 155, 157, 158, 163, 164, 164, 171, 160, 155, 157, 166, 166, 171, 174, 177, 177, 155, 157, 156, 153, 171, 172, 168, 171, 179, 180, 182, 158, 169, 167, 169, 170, 164, 163, 155, 155, 158, 159, 154, 156, 162, 169, 169], [158, 154, 159, 160, 161, 155, 160, 162, 169, 165, 168, 161, 169, 171, 167, 177, 178, 180, 179, 182, 168, 175, 180, 183, 159, 173, 173, 167, 167, 170, 158, 164, 183, 168, 186, 163, 162, 171, 168, 165, 169, 157, 175, 179, 180, 160, 165, 168, 173, 195, 163, 162, 198, 206, 215, 215, 219, 164, 163], [161, 159, 160, 169, 163, 174, 164, 173, 166, 163, 158, 162, 163, 181, 177, 181, 160, 184, 180, 162, 159, 156, 157, 162, 166, 167, 167, 171, 171, 172, 166, 183, 183, 176, 176, 186, 183, 189, 187, 186, 180, 161, 163, 155, 157, 155, 157, 169, 168, 163, 173, 163, 161, 195, 192, 186, 176, 175, 195, 180, 187], [165, 177, 172, 166, 171, 183, 184, 176, 186, 189, 206, 201, 160, 169, 170, 176, 182, 187, 185, 182, 170, 178, 165, 169, 169, 166, 152, 157, 158, 154, 154, 157, 159, 171, 182, 180, 179, 179, 167, 162, 164, 164, 161, 174, 178, 180, 182, 179, 172, 184, 172, 175, 159], [168, 159, 158, 161, 160, 161, 161, 163, 163, 168, 168, 164, 164, 174, 175, 174, 173, 174, 171, 161, 155, 158, 158, 153, 166, 163, 165, 168, 167, 163, 159, 160, 161, 157, 156, 158, 158, 161, 163, 166, 162, 169, 165, 169, 164, 160, 160, 167, 178, 164, 169, 162, 170, 164, 173, 163, 166, 163, 174, 165], [157, 158, 162, 165, 163, 167, 168, 175, 172, 162, 155, 161, 156, 169, 170, 173, 173, 162, 178, 167, 158, 162, 154, 162, 166, 160, 160, 162, 168, 171, 170, 189, 188, 165, 166, 167, 170, 171, 167, 165, 162, 163, 184, 179, 178, 175, 183, 175, 172, 172, 163, 174, 156, 160, 187, 189, 192, 192, 168, 160, 147], [160, 154, 158, 164, 162, 160, 165, 165, 157, 168, 173, 186, 194, 169, 180, 179, 171, 162, 160, 178, 172, 163, 159, 158, 171, 172, 175, 182, 171, 162, 160, 161, 164, 156, 178, 167, 179, 169, 161, 168, 159, 157, 156, 156, 156, 157, 163, 173, 172, 168, 161, 169, 161, 170, 154, 164, 168, 171, 187, 157], [172, 174, 175, 174, 158, 166, 165, 167, 175, 170, 167, 169, 192, 186, 173, 155, 159, 166, 170, 172, 188, 191, 229, 230, 229, 230, 208, 199, 166, 173, 161, 167, 167, 168, 166, 169, 173, 190, 192, 188, 161, 168, 163, 176, 182, 186, 174, 174, 175, 178, 216, 206, 166, 162, 168, 162, 163], [156, 162, 163, 172, 179, 164, 161, 165, 186, 186, 173, 194, 179, 184, 185, 168, 156, 180, 206, 207, 212, 225, 220, 209, 205, 207, 210, 165, 160, 155, 166, 164, 168, 155, 162, 168, 168, 179, 158, 157, 172, 176, 172, 158, 166, 157, 163, 163, 164, 167, 172, 180, 189, 173, 173, 180], [174, 175, 165, 165, 168, 181, 170, 161, 164, 156, 154, 158, 159, 167, 167, 168, 169, 170, 166, 167, 164, 176, 178, 179, 167, 168, 167, 157, 170, 160, 167, 160, 156, 158, 160, 160, 162, 162, 161, 173, 162, 168, 178, 177, 169, 171, 172, 166, 167, 160, 162, 165, 163, 167, 161, 168, 166, 172, 172, 171, 173], [159, 160, 165, 168, 161, 172, 178, 181, 175, 185, 174, 173, 170, 159, 171, 160, 158, 159, 159, 159, 165, 155, 154, 162, 169, 170, 180, 180, 183, 169, 171, 174, 173, 164, 162, 163, 158, 161, 163, 160, 160, 156, 162, 173, 165, 168, 153, 166, 163, 163, 171, 160, 158, 170, 165, 168, 166], [165, 166, 167, 167, 167, 168, 165, 159, 160, 164, 166, 166, 173, 177, 180, 180, 157, 161, 162, 173, 159, 162, 165, 165, 165, 165, 161, 164, 167, 157, 158, 157, 159, 157, 155, 155, 166, 164, 166, 157, 156, 157, 162, 164, 167, 170, 156, 170, 169, 166, 168, 170, 157, 165, 159, 159, 166, 181, 180, 157, 166, 166], [158, 154, 157, 159, 168, 160, 161, 165, 154, 155, 168, 168, 168, 167, 161, 170, 170, 174, 178, 176, 161, 161, 162, 165, 164, 169, 170, 171, 163, 165, 151, 165, 158, 159, 163, 168, 168, 190, 190, 192, 190, 191, 199, 201, 159, 164, 171, 171, 178, 177, 190, 197, 198, 199, 189, 161, 161], [159, 157, 157, 166, 162, 159, 160, 161, 165, 160, 160, 164, 175, 157, 157, 159, 158, 161, 173, 178, 163, 154, 161, 163, 165, 155, 154, 155, 179, 181, 154, 157, 155, 156, 154, 156, 158, 166, 162, 162, 168, 177, 157, 158, 173, 159, 170, 166, 183, 185, 154, 162, 160, 158, 166, 170, 158, 162, 168, 164, 157, 161, 169, 165], [157, 159, 163, 156, 164, 164, 153, 156, 160, 173, 160, 164, 167, 169, 167, 169, 167, 159, 162, 155, 159, 158, 161, 169, 163, 167, 169, 163, 159, 158, 153, 158, 230, 222, 162, 148, 163, 163, 164, 163, 165, 167, 168, 168, 160, 174, 179, 181, 168, 163, 176, 172, 169, 172, 164, 169, 165, 163, 160, 163, 171, 173], [173, 184, 158, 166, 160, 168, 161, 170, 162, 165, 160, 164, 169, 166, 164, 166, 166, 164, 157, 164, 169, 169, 169, 163, 164, 161, 162, 164, 163, 164, 168, 164, 174, 157, 157, 157, 168, 168, 160, 163, 158, 156, 154, 161, 163, 164, 157, 163, 166, 169, 156, 165, 163, 165, 166, 162, 160, 193, 163, 163], [168, 170, 158, 159, 157, 164, 172, 168, 173, 175, 163, 163, 175, 182, 181, 167, 171, 172, 169, 171, 167, 169, 165, 163, 162, 166, 156, 161, 176, 173, 158, 158, 156, 157, 157, 155, 158, 160, 162, 162, 158, 159, 157, 157, 156, 163, 165, 158, 174, 176, 171, 171, 159, 159, 170, 162, 162, 191, 170, 172], [162, 164, 148, 161, 155, 156, 158, 165, 161, 161, 168, 170, 168, 150, 168, 172, 168, 166, 163, 170, 159, 160, 161, 162, 161, 160, 163, 170, 159, 156, 174, 178, 176, 177, 169, 172, 170, 159, 165, 164, 163, 164, 164, 165, 165, 172, 170, 168, 154, 157, 173, 173, 173, 177, 160, 159, 164, 166, 166, 169], [162, 162, 161, 163, 160, 158, 190, 166, 161, 164, 161, 164, 163, 167, 157, 158, 156, 164, 161, 162, 157, 166, 165, 165, 170, 163, 157, 156, 156, 158, 169, 157, 158, 160, 163, 164, 161, 165, 164, 175, 156, 154, 158, 163, 164, 163, 161, 184, 180, 184, 186, 189, 174, 173, 175, 194, 171, 154, 154, 157], [166, 167, 169, 166, 168, 153, 170, 161, 159, 163, 158, 162, 159, 161, 159, 163, 178, 157, 163, 163, 179, 181, 180, 180, 178, 182, 162, 169, 168, 173, 163, 162, 167, 167, 168, 185, 159, 192, 161, 163, 161, 161, 167, 164, 166, 166, 169, 169, 165, 168, 158, 167, 163, 163, 165, 151, 168, 169, 172, 175], [158, 159, 158, 162, 166, 165, 177, 184, 184, 169, 159, 165, 169, 160, 161, 167, 154, 178, 194, 197, 168, 216, 220, 222, 220, 205, 291, 417, 429, 429, 381, 318, 315, 313, 312, 195, 314, 160, 165, 167, 181, 205, 207, 197, 203, 202, 204], [158, 177, 171, 159, 166, 173, 165, 171, 178, 178, 162, 159, 160, 171, 167, 167, 166, 169, 176, 174, 169, 164, 165, 165, 165, 166, 166, 167, 158, 159, 170, 165, 167, 165, 161, 164, 168, 170, 180, 181, 176, 161, 163, 157, 156, 158, 155, 160, 166, 166, 160, 167, 162, 169, 153, 164, 169, 166, 158, 161], [162, 157, 158, 161, 159, 180, 187, 190, 173, 173, 183, 166, 169, 174, 161, 163, 172, 176, 174, 176, 176, 159, 158, 163, 155, 159, 161, 161, 160, 164, 180, 172, 176, 167, 175, 158, 156, 158, 161, 160, 159, 159, 160, 160, 160, 168, 156, 160, 160, 165, 178, 175, 178, 175, 178, 165, 157, 162, 163, 179], [167, 176, 175, 179, 179, 158, 156, 160, 153, 161, 155, 161, 164, 165, 163, 154, 165, 166, 160, 165, 161, 171, 169, 172, 173, 177, 162, 161, 160, 158, 169, 164, 172, 172, 177, 177, 186, 198, 199, 173, 160, 181, 175, 175, 176, 177, 210, 197, 195, 200, 169, 198, 197, 204, 208, 209], [174, 184, 187, 187, 153, 172, 164, 167, 169, 184, 155, 159, 161, 159, 162, 161, 162, 163, 160, 166, 162, 158, 165, 168, 159, 156, 158, 157, 160, 175, 164, 156, 167, 174, 156, 165, 165, 164, 159, 166, 165, 177, 158, 184, 220, 150, 166, 166, 164, 167, 161, 164, 155, 161, 177, 168, 153, 155, 157, 156], [163, 173, 173, 167, 160, 157, 158, 167, 173, 173, 158, 169, 172, 165, 205, 235, 214, 218, 224, 224, 218, 199, 199, 180, 171, 162, 167, 164, 168, 176, 190, 184, 190, 178, 162, 165, 163, 165, 169, 164, 159, 160, 177, 181, 162, 173, 174, 173, 173, 160, 155, 157, 173, 184, 175], [173, 177, 177, 197, 203, 205, 206, 180, 171, 178, 159, 164, 161, 164, 171, 170, 167, 169, 167, 162, 167, 167, 167, 166, 168, 168, 168, 169, 172, 171, 160, 158, 165, 166, 167, 161, 171, 164, 165, 159, 164, 174, 174, 165, 165, 159, 159, 165, 166, 167, 158, 155, 171, 165, 165, 170, 177, 179, 182, 171], [162, 163, 178, 165, 164, 168, 168, 163, 166, 161, 167, 156, 159, 154, 154, 166, 156, 162, 165, 163, 159, 170, 164, 158, 160, 160, 156, 167, 167, 174, 185, 187, 161, 162, 161, 152, 177, 176, 183, 157, 169, 169, 156, 158, 156, 163, 169, 163, 162, 167, 161, 161, 154, 161, 160, 154, 175, 171, 160, 172], [173, 174, 180, 180, 181, 180, 164, 164, 166, 176, 159, 161, 159, 160, 162, 167, 160, 171, 169, 173, 159, 160, 161, 163, 164, 157, 168, 171, 189, 187, 161, 168, 166, 165, 166, 170, 163, 161, 176, 175, 155, 159, 168, 168, 169, 167, 157, 169, 163, 173, 174, 161, 162, 162, 163, 171, 168, 166], [155, 154, 157, 160, 156, 167, 164, 159, 195, 167, 160, 164, 167, 178, 199, 199, 201, 202, 170, 162, 179, 163, 159, 162, 164, 160, 160, 167, 161, 163, 155, 157, 161, 160, 169, 167, 169, 192, 177, 164, 166, 168, 187, 172, 162, 168, 166, 163, 165, 179, 177, 176, 168, 160, 170, 170, 166, 158, 180, 168, 171], [162, 168, 169, 178, 178, 177, 165, 167, 161, 161, 162, 166, 157, 157, 160, 165, 163, 174, 155, 155, 167, 168, 168, 165, 168, 165, 165, 171, 167, 182, 165, 174, 170, 162, 161, 162, 167, 158, 159, 176, 184, 186, 185, 166, 173, 167, 156, 172, 176, 162, 183, 179, 222, 218, 177, 176, 173, 164, 161], [162, 171, 169, 171, 170, 173, 174, 177, 159, 160, 159, 169, 155, 156, 164, 164, 163, 170, 159, 164, 161, 178, 159, 161, 158, 159, 233, 185, 227, 191, 175, 154, 158, 156, 164, 161, 165, 169, 169, 180, 182, 148, 160, 154, 158, 155, 164, 154, 154, 157, 163, 161, 161, 165, 169, 165, 157, 166, 168, 167, 165], [155, 158, 163, 171, 172, 159, 158, 164, 158, 169, 157, 156, 158, 173, 171, 162, 156, 167, 166, 170, 156, 156, 173, 174, 178, 157, 154, 157, 157, 185, 185, 183, 169, 168, 170, 157, 164, 160, 162, 165, 167, 170, 165, 168, 164, 167, 160, 160, 163, 164, 166, 166, 157, 168, 168, 163, 158, 161, 160], [164, 166, 170, 161, 173, 175, 168, 168, 169, 171, 160, 160, 159, 153, 163, 166, 153, 159, 161, 169, 160, 159, 162, 164, 169, 169, 167, 161, 157, 157, 156, 156, 156, 164, 164, 160, 163, 159, 160, 161, 159, 162, 159, 157, 165, 168, 168, 169, 160, 163, 162, 165, 159, 159, 159, 160, 161, 163, 158, 157, 165, 166, 168, 166], [160, 166, 166, 167, 155, 154, 161, 163, 164, 162, 169, 168, 168, 159, 168, 173, 159, 159, 159, 162, 165, 164, 164, 165, 166, 180, 160, 160, 160, 162, 156, 165, 171, 174, 175, 162, 167, 169, 169, 167, 173, 162, 155, 155, 159, 153, 161, 160, 163, 166, 154, 159, 158, 160, 159, 160, 165, 164, 169, 170], [158, 155, 157, 161, 159, 161, 157, 157, 156, 158, 159, 165, 159, 156, 155, 157, 159, 161, 162, 163, 159, 159, 158, 169, 170, 171, 157, 157, 156, 157, 165, 164, 165, 162, 171, 175, 161, 161, 161, 159, 169, 168, 170, 159, 165, 170, 171, 171, 170, 161, 169, 168, 169, 168, 169, 176, 157, 169, 169, 171], [172, 172, 171, 174, 161, 171, 159, 165, 166, 170, 157, 159, 162, 164, 156, 175, 179, 163, 163, 182, 157, 155, 172, 177, 176, 156, 156, 167, 160, 181, 164, 165, 156, 153, 155, 165, 164, 168, 180, 159, 167, 168, 162, 163, 164, 170, 179, 167, 158, 178, 172, 174, 167, 168, 173, 162, 167, 163, 197, 169], [169, 176, 175, 175, 175, 162, 168, 166, 164, 165, 179, 171, 178, 181, 184, 157, 158, 159, 167, 158, 165, 166, 181, 164, 164, 183, 162, 190, 194, 185, 170, 169, 164, 166, 166, 165, 167, 163, 165, 167, 181, 184, 169, 178, 178, 180, 190, 191, 172, 193, 168, 163, 168, 172, 173, 173, 162, 165], [181, 162, 170, 171, 176, 163, 183, 182, 187, 186, 199, 200, 158, 170, 176, 178, 174, 173, 174, 174, 185, 185, 172, 192, 164, 166, 159, 161, 159, 163, 160, 181, 181, 178, 162, 161, 159, 161, 157, 163, 182, 192, 194, 176, 177, 178, 162, 166, 169, 172, 164, 160, 160, 164, 162, 169, 173, 174, 167, 186], [176, 159, 160, 160, 162, 165, 165, 182, 197, 168, 157, 156, 158, 172, 162, 181, 184, 169, 173, 175, 160, 161, 163, 169, 178, 157, 158, 188, 178, 184, 165, 166, 156, 171, 185, 175, 183, 171, 179, 179, 158, 166, 165, 174, 172, 173, 155, 180, 161, 186, 177, 174, 174, 159, 159, 172, 159, 165], [157, 175, 184, 178, 181, 160, 174, 161, 158, 166, 169, 186, 159, 163, 163, 160, 163, 168, 166, 160, 195, 199, 160, 161, 161, 172, 169, 170, 171, 160, 182, 190, 193, 193, 163, 194, 160, 160, 160, 158, 171, 180, 181, 184, 182, 198, 198, 183, 183, 179, 198, 167, 165, 174, 161, 161, 176, 174, 176, 182], [174, 160, 180, 166, 237, 221, 241, 221, 224, 219, 182, 189, 173, 180, 185, 188, 189, 190, 190, 189, 164, 178, 174, 168, 185, 187, 187, 189, 189, 189, 170, 161, 159, 161, 163, 165, 179, 191, 190, 191, 195, 160, 162, 161, 171, 181, 164, 164, 169, 171, 187, 176, 178, 181], [163, 160, 160, 158, 166, 164, 173, 170, 173, 171, 172, 180, 213, 216, 205, 207, 183, 170, 174, 181, 180, 182, 169, 157, 161, 161, 167, 170, 173, 160, 187, 199, 169, 165, 164, 167, 171, 170, 167, 169, 165, 162, 170, 175, 176, 173, 160, 165, 169, 169, 175, 168, 163, 160, 163, 165], [166, 164, 173, 176, 164, 163, 163, 164, 176, 165, 164, 168, 155, 164, 157, 157, 161, 153, 162, 159, 165, 161, 161, 175, 187, 186, 169, 166, 187, 166, 165, 170, 160, 304, 155, 168, 167, 182, 179, 174, 181, 177, 163, 165, 170, 173, 165, 176, 175, 166, 179, 176, 255, 161, 185], [172, 173, 167, 166, 168, 158, 171, 172, 166, 163, 163, 156, 168, 169, 174, 174, 173, 173, 162, 164, 165, 166, 162, 164, 162, 161, 168, 169, 161, 161, 170, 170, 165, 167, 166, 166, 157, 161, 183, 172, 177, 194, 176, 181, 182, 183, 182, 180, 168, 163, 160, 162, 162, 162, 161, 161, 160, 160, 175], [163, 156, 165, 161, 160, 166, 167, 166, 168, 170, 166, 164, 165, 161, 170, 183, 180, 182, 184, 166, 185, 190, 187, 192, 181, 163, 166, 168, 167, 166, 164, 163, 162, 162, 160, 160, 157, 164, 163, 172, 168, 171, 169, 175, 170, 190, 178, 172, 182, 170, 159, 156, 158, 157, 161, 153, 153, 158, 180], [159, 170, 171, 176, 184, 189, 190, 195, 191, 159, 163, 158, 157, 170, 161, 159, 158, 156, 166, 166, 170, 155, 159, 162, 163, 165, 164, 160, 163, 167, 158, 168, 153, 170, 170, 173, 187, 197, 199, 208, 170, 171, 168, 160, 160, 155, 165, 154, 160, 172, 169, 179, 177, 164, 166, 159, 170, 173, 156, 194], [159, 170, 160, 160, 162, 160, 191, 189, 183, 167, 163, 171, 173, 160, 161, 165]]
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:jtl_root_elapseds) do
|
15
|
+
[[458, 324], [165, 156, 332, 158, 158, 166, 172, 169, 329], [158, 158, 159, 160, 159, 157, 326, 158, 165, 156, 159, 159, 155, 156, 335], [164, 165, 169, 162, 160, 167, 154, 166, 161, 352, 172, 170, 158, 160, 159, 162, 167, 192, 164, 166], [164, 165, 165, 161, 169, 167, 169, 170, 159, 160, 177, 310, 177, 164, 163, 171, 172, 167, 169, 168, 169, 178, 170, 169, 166, 169, 313], [168, 170, 159, 156, 172, 170, 171, 157, 158, 169, 166, 162, 175, 171, 177, 174, 183, 163, 163, 174, 168, 175, 177, 176, 177, 172, 171, 167, 167, 170], [167, 183, 197, 197, 161, 171, 174, 161, 161, 180, 159, 160, 162, 164, 164, 159, 161, 164, 166, 181, 164, 166, 170, 180, 172, 168, 164, 169, 188], [169, 170, 179, 173, 162, 164, 167, 162, 163, 163, 160, 162, 157, 160, 175, 178, 161, 169, 167, 167, 173, 169, 170, 163, 158, 162, 189, 191, 189, 190], [178, 192, 196, 167, 164, 178, 173, 172, 167, 168, 158, 171, 184, 170, 183, 161, 174, 173, 164, 175, 160, 178, 176, 158, 171, 165, 167, 181, 180, 162], [168, 180, 179, 161, 169, 170, 165, 166, 166, 171, 157, 166, 175, 190, 162, 195, 162, 160, 161, 182, 205, 174, 165, 171, 175, 157, 159, 159, 166], [172, 162, 155, 164, 163, 163, 175, 170, 173, 156, 166, 168, 163, 158, 160, 158, 166, 155, 164, 160, 166, 166, 157, 160, 169, 168, 163, 169, 160, 160], [163, 170, 159, 165, 165, 164, 165, 158, 161, 164, 162, 168, 176, 168, 158, 159, 170, 159, 159, 163, 159, 176, 161, 160, 176, 176, 178, 177, 178, 181], [164, 158, 169, 184, 158, 168, 168, 188, 189, 185, 166, 161, 164, 162, 162, 158, 160, 160, 160, 164, 158, 167, 163, 164, 167, 172, 170, 176, 173, 176], [169, 157, 165, 160, 162, 155, 154, 151, 155, 157, 164, 157, 171, 174, 177, 155, 157, 156, 171, 172, 179, 167, 164, 163, 155, 158, 159, 154, 169, 169], [159, 155, 169, 168, 161, 171, 167, 178, 180, 182, 180, 173, 167, 158, 164, 183, 168, 162, 171, 165, 179, 165, 173, 163, 162, 206, 215, 219, 164], [161, 163, 174, 163, 162, 163, 177, 160, 184, 180, 159, 162, 167, 172, 183, 183, 186, 183, 189, 187, 180, 155, 157, 168, 163, 161, 186, 176, 175, 195, 180], [172, 183, 186, 189, 201, 170, 176, 182, 187, 178, 165, 169, 158, 154, 157, 182, 180, 179, 179, 162, 161, 174, 179, 172, 172], [159, 158, 161, 161, 163, 168, 168, 174, 174, 171, 158, 158, 153, 163, 168, 163, 159, 156, 158, 163, 169, 165, 169, 160, 167, 164, 169, 164, 166, 174], [158, 162, 167, 168, 175, 162, 155, 169, 170, 178, 162, 154, 160, 160, 162, 171, 170, 165, 166, 167, 163, 184, 178, 175, 175, 172, 163, 160, 189, 168], [160, 158, 164, 160, 165, 157, 168, 186, 180, 162, 172, 159, 158, 172, 182, 171, 162, 161, 179, 169, 159, 156, 156, 156, 163, 173, 168, 161, 164, 187], [172, 175, 174, 158, 165, 167, 170, 169, 155, 170, 191, 229, 230, 229, 208, 199, 166, 161, 166, 188, 168, 163, 176, 186, 174, 174, 178, 216, 162], [163, 172, 164, 165, 186, 186, 194, 179, 185, 156, 220, 209, 207, 165, 160, 155, 166, 164, 168, 179, 172, 158, 166, 163, 164, 167, 172, 189, 180], [174, 170, 161, 164, 154, 158, 159, 167, 168, 167, 179, 167, 170, 160, 167, 160, 158, 160, 162, 173, 168, 171, 166, 167, 162, 163, 167, 161, 166, 173], [159, 161, 178, 181, 175, 173, 170, 159, 160, 159, 165, 169, 180, 180, 183, 169, 173, 164, 163, 160, 162, 168, 153, 166, 163, 171, 160, 170, 168], [167, 167, 160, 164, 166, 166, 173, 177, 157, 161, 165, 165, 164, 157, 158, 157, 159, 157, 166, 164, 167, 170, 169, 166, 168, 170, 157, 165, 166, 181], [154, 157, 161, 165, 154, 155, 168, 167, 161, 170, 161, 162, 169, 171, 163, 165, 151, 165, 163, 168, 199, 201, 164, 171, 178, 177, 190, 197, 189, 161], [159, 160, 165, 160, 164, 175, 157, 157, 158, 173, 155, 154, 181, 154, 157, 155, 156, 154, 166, 162, 159, 170, 185, 154, 162, 160, 158, 170, 162, 168], [159, 163, 164, 153, 156, 160, 173, 164, 167, 169, 155, 169, 163, 167, 163, 159, 153, 158, 230, 163, 163, 168, 160, 174, 179, 168, 163, 172, 169, 163, 171], [173, 158, 166, 160, 168, 161, 165, 169, 164, 164, 169, 169, 163, 164, 161, 162, 164, 174, 168, 163, 158, 156, 161, 163, 164, 157, 169, 160, 193, 163], [168, 170, 158, 159, 157, 172, 173, 167, 171, 171, 167, 169, 165, 163, 166, 161, 176, 157, 158, 162, 158, 159, 157, 156, 165, 158, 176, 159, 162, 172], [162, 164, 148, 155, 156, 165, 161, 150, 168, 170, 159, 161, 162, 161, 160, 170, 159, 177, 170, 164, 163, 164, 165, 165, 172, 168, 157, 173, 159, 169], [162, 161, 163, 160, 158, 166, 164, 164, 156, 162, 157, 166, 165, 165, 163, 156, 156, 163, 161, 164, 156, 154, 158, 164, 163, 184, 180, 174, 171, 154], [166, 169, 166, 168, 170, 161, 159, 159, 159, 157, 179, 181, 180, 178, 162, 168, 173, 163, 185, 159, 161, 167, 164, 166, 169, 165, 168, 167, 151, 172], [158, 158, 162, 166, 177, 184, 169, 169, 167, 178, 168, 216, 220, 220, 291, 429, 429, 312, 314, 160, 165, 167, 181, 203, 204], [166, 173, 178, 178, 162, 159, 160, 171, 167, 166, 165, 166, 158, 159, 170, 165, 167, 165, 161, 170, 156, 160, 166, 166, 160, 167, 162, 169, 164, 169], [159, 180, 173, 173, 183, 166, 169, 174, 172, 176, 155, 159, 160, 164, 180, 172, 176, 175, 156, 158, 160, 168, 160, 165, 178, 178, 175, 178, 157, 162], [167, 158, 153, 161, 161, 164, 165, 163, 165, 166, 161, 169, 160, 158, 164, 172, 172, 177, 186, 199, 160, 176, 195, 200, 198, 197, 204, 209], [174, 187, 153, 164, 161, 159, 161, 163, 160, 166, 162, 158, 159, 156, 167, 174, 165, 164, 159, 166, 165, 177, 220, 150, 155, 161, 153, 155, 157, 156], [163, 173, 160, 157, 172, 165, 214, 218, 224, 224, 218, 199, 171, 167, 190, 178, 165, 165, 169, 164, 159, 160, 162, 174, 173, 184], [173, 177, 197, 203, 205, 206, 178, 164, 169, 167, 167, 167, 166, 168, 168, 168, 171, 165, 164, 165, 164, 174, 165, 165, 159, 159, 167, 171, 179, 182], [162, 163, 165, 164, 168, 168, 161, 159, 162, 165, 159, 170, 158, 160, 160, 156, 174, 162, 176, 183, 169, 169, 158, 156, 163, 169, 167, 161, 171, 172], [173, 174, 180, 181, 180, 164, 164, 160, 169, 173, 159, 160, 161, 163, 157, 168, 189, 166, 161, 175, 155, 159, 168, 169, 167, 157, 174, 162, 166], [155, 154, 157, 156, 164, 159, 195, 178, 201, 162, 179, 163, 159, 164, 160, 167, 161, 160, 169, 164, 166, 168, 187, 162, 168, 163, 165, 160, 166, 168, 171], [162, 168, 178, 178, 165, 167, 157, 165, 155, 155, 167, 168, 165, 168, 165, 171, 170, 162, 159, 176, 184, 186, 166, 173, 156, 172, 218, 176, 161], [162, 171, 171, 170, 173, 177, 159, 156, 163, 159, 161, 178, 159, 158, 233, 227, 191, 164, 161, 169, 182, 148, 160, 158, 164, 154, 163, 165, 165, 166, 167], [155, 158, 171, 159, 158, 169, 158, 171, 167, 166, 156, 156, 174, 157, 154, 185, 169, 170, 160, 162, 165, 167, 168, 167, 160, 166, 157, 168, 161, 160], [166, 170, 175, 168, 168, 160, 153, 166, 161, 169, 160, 159, 169, 167, 161, 156, 164, 163, 160, 161, 159, 162, 165, 168, 169, 159, 159, 160, 158, 157, 166, 168], [160, 166, 167, 163, 162, 159, 168, 173, 159, 162, 165, 164, 164, 160, 162, 165, 171, 162, 167, 169, 173, 155, 159, 161, 166, 159, 158, 159, 164, 169], [158, 161, 159, 157, 158, 159, 159, 157, 159, 162, 159, 169, 170, 157, 157, 165, 164, 175, 161, 161, 168, 159, 165, 171, 161, 168, 169, 176, 157, 169], [171, 174, 161, 166, 170, 157, 159, 175, 179, 163, 172, 177, 176, 160, 181, 164, 165, 165, 164, 180, 162, 163, 164, 167, 178, 172, 174, 162, 167, 197], [175, 175, 175, 162, 165, 179, 171, 158, 159, 167, 181, 164, 183, 190, 185, 170, 169, 164, 165, 165, 169, 178, 190, 191, 172, 168, 163, 173, 173], [162, 176, 163, 182, 186, 200, 158, 170, 174, 174, 185, 164, 166, 159, 159, 160, 181, 178, 159, 157, 194, 176, 177, 162, 166, 164, 160, 164, 167, 186], [160, 160, 162, 165, 165, 157, 156, 169, 173, 175, 163, 169, 178, 157, 158, 165, 166, 171, 179, 179, 165, 174, 172, 173, 180, 177, 174, 159], [157, 175, 178, 160, 174, 161, 166, 159, 163, 163, 160, 199, 161, 172, 169, 171, 182, 190, 193, 160, 158, 184, 182, 198, 198, 183, 198, 167, 165, 176, 174], [166, 237, 241, 221, 219, 182, 189, 180, 185, 189, 174, 185, 187, 189, 189, 170, 161, 159, 165, 191, 161, 181, 164, 169, 171, 187, 176, 181], [163, 158, 170, 172, 213, 205, 207, 183, 170, 181, 180, 161, 167, 187, 169, 165, 167, 170, 167, 169, 170, 176, 169, 175, 168, 160, 165], [166, 164, 176, 163, 164, 155, 157, 161, 162, 159, 165, 161, 175, 187, 165, 304, 155, 167, 182, 179, 174, 181, 163, 170, 176, 161], [172, 173, 167, 166, 158, 171, 172, 156, 168, 162, 164, 165, 162, 162, 161, 168, 169, 170, 165, 183, 172, 194, 176, 182, 183, 182, 180, 160, 162, 175], [163, 156, 161, 166, 167, 166, 168, 165, 170, 166, 185, 190, 187, 163, 166, 168, 167, 162, 160, 172, 168, 175, 170, 190, 178, 172, 182, 156, 158], [159, 170, 171, 189, 190, 195, 191, 159, 170, 161, 170, 155, 159, 165, 164, 160, 163, 167, 170, 170, 170, 171, 168, 155, 165, 154, 160, 172, 164, 166], [159, 170, 160, 160, 191, 189, 183, 167, 160, 161]]
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:jtl_latencies) do
|
19
|
+
[[458, 324, 177], [164, 165, 155, 158, 160, 332, 158, 158, 163, 151, 159, 165, 171, 169, 328, 168, 169], [159, 154, 158, 158, 159, 160, 160, 159, 177, 156, 159, 156, 326, 158, 165, 162, 163, 158, 156, 156, 155, 159, 159, 155, 156, 155, 157, 169, 335], [169, 155, 163, 165, 167, 229, 162, 158, 159, 158, 165, 167, 162, 161, 154, 166, 161, 350, 159, 161, 170, 166, 159, 159, 173, 158, 160, 160, 161, 159, 162, 166, 191, 162, 166, 163, 159, 178, 275, 163, 167], [163, 162, 163, 165, 165, 160, 168, 167, 168, 170, 170, 169, 164, 156, 176, 176, 158, 159, 160, 161, 177, 309, 175, 164, 162, 170, 169, 170, 172, 161, 160, 163, 167, 170, 167, 167, 168, 167, 167, 167, 178, 170, 168, 165, 168, 168, 169, 167, 313, 178, 202, 176, 177], [170, 168, 166, 170, 157, 160, 156, 172, 170, 170, 157, 157, 158, 158, 171, 168, 168, 184, 161, 166, 166, 162, 167, 168, 174, 173, 170, 177, 174, 181, 162, 162, 163, 162, 174, 173, 174, 166, 170, 171, 168, 174, 174, 174, 177, 177, 176, 162, 172, 171, 168, 167, 167, 169, 165, 166, 165], [161, 161, 163, 167, 183, 183, 182, 197, 197, 196, 161, 170, 159, 174, 159, 161, 160, 179, 184, 185, 160, 158, 182, 181, 160, 160, 160, 161, 164, 162, 163, 167, 159, 159, 162, 164, 163, 171, 172, 170, 181, 164, 156, 165, 166, 164, 165, 170, 180, 172, 169, 177, 168, 163, 168, 170, 188], [154, 161, 160, 169, 170, 169, 168, 179, 159, 181, 170, 160, 163, 166, 167, 167, 162, 161, 163, 163, 157, 157, 158, 160, 159, 157, 162, 155, 157, 159, 160, 174, 175, 157, 161, 169, 169, 167, 169, 167, 164, 163, 161, 177, 178, 167, 167, 167, 169, 168, 163, 158, 161, 162, 189, 189, 191, 187, 189, 190, 172], [174, 178, 177, 176, 190, 192, 196, 196, 196, 167, 163, 168, 166, 173, 172, 172, 167, 168, 168, 171, 189, 158, 167, 170, 171, 172, 184, 185, 189, 170, 169, 172, 153, 172, 173, 171, 164, 163, 175, 162, 160, 158, 156, 178, 178, 178, 176, 174, 182, 158, 171, 170, 165, 168, 167, 181, 180, 158, 177], [155, 166, 164, 165, 180, 180, 177, 177, 179, 161, 195, 169, 168, 167, 165, 165, 166, 166, 185, 171, 188, 156, 156, 156, 164, 166, 159, 173, 175, 190, 162, 178, 193, 195, 163, 162, 160, 161, 180, 179, 182, 182, 195, 205, 162, 162, 174, 163, 165, 162, 175, 173, 156, 158, 159, 159, 159, 166], [155, 173, 172, 172, 172, 162, 159, 160, 155, 162, 163, 163, 162, 163, 175, 175, 170, 164, 171, 156, 176, 167, 166, 177, 165, 168, 163, 163, 164, 165, 158, 160, 162, 157, 166, 164, 155, 162, 164, 160, 160, 166, 160, 166, 167, 166, 165, 157, 163, 165, 160, 169, 168, 170, 163, 165, 168, 169, 160, 160], [162, 159, 159, 159, 170, 174, 159, 158, 158, 159, 165, 164, 163, 162, 165, 165, 158, 162, 161, 164, 161, 163, 163, 162, 166, 168, 176, 176, 176, 177, 168, 156, 159, 157, 168, 169, 159, 160, 159, 163, 164, 159, 157, 159, 175, 176, 160, 160, 163, 162, 159, 176, 176, 174, 178, 180, 179, 176, 178, 179], [166, 162, 163, 164, 160, 154, 158, 158, 168, 158, 184, 158, 167, 168, 166, 186, 188, 185, 189, 184, 167, 173, 165, 165, 170, 161, 159, 164, 161, 164, 162, 162, 157, 156, 160, 160, 160, 163, 164, 167, 156, 157, 165, 167, 175, 159, 164, 168, 164, 163, 166, 164, 165, 172, 170, 176, 173, 176, 176, 180], [169, 168, 160, 174, 162, 157, 157, 170, 163, 162, 160, 160, 162, 155, 154, 151, 154, 155, 157, 158, 162, 162, 164, 171, 160, 155, 156, 165, 165, 170, 174, 177, 177, 154, 156, 156, 152, 171, 171, 168, 171, 179, 180, 182, 158, 168, 167, 169, 170, 164, 162, 154, 155, 158, 158, 154, 156, 161, 167, 168], [158, 154, 159, 160, 159, 155, 159, 162, 167, 163, 167, 161, 169, 171, 167, 175, 176, 180, 178, 182, 168, 175, 180, 183, 159, 173, 172, 167, 166, 170, 158, 163, 183, 167, 186, 162, 162, 171, 168, 165, 169, 153, 175, 179, 180, 159, 165, 168, 173, 195, 162, 162, 198, 206, 215, 215, 219, 164, 163], [157, 157, 159, 168, 161, 174, 162, 172, 166, 163, 157, 162, 163, 181, 177, 180, 160, 184, 180, 161, 158, 155, 156, 162, 162, 163, 161, 171, 171, 172, 166, 183, 183, 173, 175, 185, 183, 189, 187, 184, 180, 161, 162, 155, 157, 154, 157, 169, 168, 163, 173, 163, 160, 195, 192, 186, 176, 175, 195, 180, 187], [165, 177, 171, 166, 171, 183, 184, 176, 186, 189, 206, 201, 160, 168, 170, 176, 182, 187, 184, 182, 170, 178, 165, 169, 169, 163, 152, 156, 158, 153, 154, 156, 159, 171, 182, 180, 179, 179, 167, 162, 164, 164, 160, 174, 178, 180, 182, 178, 172, 183, 171, 174, 159], [168, 159, 158, 161, 159, 161, 159, 161, 162, 168, 166, 164, 164, 174, 175, 174, 173, 174, 171, 161, 155, 158, 158, 153, 165, 163, 165, 168, 164, 163, 159, 159, 161, 157, 156, 157, 157, 161, 162, 164, 162, 168, 165, 169, 163, 159, 160, 167, 178, 164, 169, 162, 170, 164, 173, 162, 166, 162, 174, 165], [157, 158, 162, 165, 162, 167, 168, 175, 169, 162, 155, 161, 156, 167, 169, 171, 171, 162, 178, 166, 158, 161, 153, 162, 164, 160, 158, 160, 168, 171, 170, 179, 188, 165, 166, 166, 167, 168, 165, 165, 161, 163, 184, 179, 178, 175, 180, 175, 172, 170, 163, 174, 155, 160, 186, 188, 192, 191, 167, 160, 147], [160, 152, 158, 164, 162, 158, 165, 165, 157, 167, 173, 186, 194, 169, 168, 178, 171, 162, 160, 178, 172, 163, 159, 158, 169, 170, 175, 182, 171, 162, 160, 161, 164, 156, 176, 166, 179, 169, 161, 168, 159, 157, 156, 156, 156, 156, 161, 173, 172, 168, 161, 169, 160, 169, 153, 162, 167, 170, 186, 157], [170, 174, 175, 173, 157, 166, 165, 166, 173, 168, 166, 169, 192, 186, 173, 155, 159, 166, 170, 171, 188, 191, 224, 227, 229, 230, 208, 199, 166, 173, 160, 167, 167, 167, 166, 169, 172, 190, 192, 185, 161, 168, 163, 176, 182, 184, 174, 174, 175, 178, 216, 206, 166, 162, 168, 162, 163], [156, 162, 163, 171, 177, 164, 161, 165, 186, 186, 173, 194, 179, 184, 185, 166, 156, 178, 203, 207, 212, 224, 220, 208, 205, 207, 210, 165, 158, 155, 166, 164, 163, 152, 162, 159, 167, 179, 158, 157, 170, 174, 170, 158, 166, 157, 162, 163, 162, 167, 168, 180, 188, 173, 173, 180], [174, 175, 165, 165, 168, 181, 170, 161, 164, 156, 154, 158, 157, 167, 167, 167, 169, 160, 166, 167, 164, 174, 177, 179, 167, 167, 166, 156, 170, 160, 164, 160, 156, 158, 160, 159, 161, 160, 161, 162, 161, 168, 176, 176, 169, 170, 172, 166, 166, 160, 161, 165, 163, 167, 160, 168, 166, 172, 172, 170, 173], [159, 160, 164, 168, 159, 168, 176, 181, 175, 184, 173, 171, 169, 159, 171, 159, 158, 159, 159, 157, 165, 154, 153, 160, 169, 170, 179, 180, 183, 168, 171, 173, 173, 162, 162, 162, 158, 159, 162, 158, 160, 155, 162, 173, 164, 167, 153, 154, 162, 161, 171, 160, 158, 170, 164, 168, 166], [164, 165, 167, 166, 167, 168, 165, 159, 160, 163, 166, 166, 173, 175, 179, 180, 155, 161, 162, 173, 158, 161, 165, 164, 164, 165, 157, 164, 167, 155, 156, 157, 159, 156, 155, 154, 166, 164, 165, 156, 155, 156, 161, 164, 167, 170, 156, 168, 169, 165, 167, 169, 157, 165, 159, 159, 165, 179, 180, 157, 166, 166], [157, 154, 156, 158, 168, 160, 160, 164, 153, 154, 168, 167, 168, 165, 160, 170, 170, 174, 167, 176, 160, 159, 158, 162, 164, 169, 169, 170, 163, 162, 150, 163, 158, 156, 163, 168, 168, 190, 190, 189, 190, 190, 199, 201, 157, 162, 170, 171, 178, 177, 190, 197, 198, 196, 189, 158, 161], [159, 157, 157, 164, 162, 159, 160, 159, 165, 160, 160, 164, 173, 157, 156, 158, 157, 161, 172, 178, 163, 154, 161, 163, 163, 155, 154, 154, 179, 178, 154, 157, 154, 156, 154, 155, 155, 166, 161, 161, 168, 177, 157, 156, 172, 156, 167, 165, 180, 185, 154, 162, 160, 158, 166, 168, 156, 154, 166, 164, 157, 161, 169, 162], [157, 159, 163, 156, 163, 164, 152, 156, 160, 173, 160, 164, 155, 169, 166, 169, 166, 159, 162, 154, 156, 155, 161, 169, 163, 166, 166, 163, 159, 156, 152, 157, 230, 222, 162, 146, 162, 160, 164, 163, 165, 167, 166, 165, 160, 174, 179, 181, 168, 162, 175, 172, 169, 169, 164, 165, 165, 161, 159, 162, 162, 173], [172, 179, 155, 166, 158, 167, 160, 167, 162, 165, 160, 163, 168, 166, 164, 166, 166, 164, 155, 164, 169, 169, 169, 161, 163, 161, 161, 163, 163, 164, 168, 163, 174, 157, 156, 156, 167, 166, 159, 163, 158, 156, 154, 160, 161, 164, 157, 162, 166, 169, 156, 165, 162, 165, 163, 160, 160, 193, 163, 163], [168, 170, 157, 159, 156, 164, 172, 168, 173, 175, 163, 162, 175, 174, 181, 167, 171, 172, 167, 168, 165, 167, 165, 162, 162, 163, 156, 160, 176, 173, 157, 157, 154, 157, 157, 154, 158, 160, 161, 162, 158, 159, 157, 156, 156, 162, 165, 155, 174, 175, 171, 171, 159, 159, 168, 160, 162, 190, 170, 172], [162, 161, 148, 159, 155, 153, 158, 165, 161, 160, 168, 170, 168, 150, 167, 172, 168, 166, 163, 169, 158, 158, 158, 162, 160, 159, 163, 169, 158, 156, 173, 178, 176, 177, 169, 169, 170, 158, 165, 161, 163, 164, 164, 164, 165, 169, 169, 168, 153, 157, 172, 171, 172, 177, 159, 158, 163, 166, 164, 166], [161, 162, 161, 161, 160, 157, 190, 163, 159, 163, 159, 161, 163, 166, 156, 157, 154, 164, 157, 162, 156, 166, 164, 164, 170, 163, 156, 156, 155, 156, 169, 157, 158, 158, 162, 163, 161, 165, 164, 172, 155, 153, 156, 163, 164, 161, 161, 184, 180, 184, 186, 189, 172, 172, 174, 193, 170, 154, 153, 156], [166, 164, 169, 166, 165, 153, 168, 161, 159, 163, 157, 162, 159, 161, 159, 161, 178, 156, 159, 162, 179, 181, 180, 180, 178, 182, 160, 167, 166, 171, 163, 162, 167, 167, 168, 184, 158, 192, 160, 162, 161, 161, 167, 164, 166, 165, 166, 169, 165, 167, 158, 167, 163, 163, 165, 150, 168, 168, 170, 175], [158, 155, 158, 160, 166, 165, 177, 184, 181, 169, 159, 165, 169, 160, 160, 167, 154, 177, 194, 197, 167, 213, 220, 222, 220, 205, 290, 416, 429, 429, 381, 313, 314, 312, 312, 195, 314, 159, 165, 166, 181, 204, 206, 196, 203, 201, 204], [157, 175, 169, 158, 165, 172, 164, 171, 178, 175, 158, 159, 158, 171, 165, 167, 164, 169, 166, 174, 166, 163, 163, 163, 165, 166, 164, 167, 158, 157, 168, 164, 167, 163, 161, 162, 166, 170, 179, 181, 176, 161, 161, 157, 155, 156, 155, 160, 166, 164, 160, 167, 162, 169, 153, 164, 169, 164, 157, 158], [162, 156, 158, 158, 156, 180, 186, 188, 173, 171, 183, 166, 169, 174, 161, 162, 172, 175, 173, 176, 176, 159, 156, 163, 155, 158, 160, 161, 160, 164, 180, 172, 175, 167, 175, 158, 156, 155, 160, 157, 157, 159, 160, 158, 159, 168, 156, 158, 160, 161, 178, 175, 178, 175, 176, 164, 155, 158, 156, 177], [167, 176, 175, 179, 179, 157, 155, 159, 152, 161, 155, 161, 163, 164, 163, 152, 165, 164, 160, 164, 159, 170, 169, 172, 173, 176, 160, 159, 160, 157, 169, 162, 171, 172, 176, 177, 186, 198, 199, 173, 158, 179, 175, 175, 176, 177, 210, 197, 195, 200, 161, 198, 197, 204, 208, 209], [172, 183, 187, 186, 152, 171, 163, 166, 169, 184, 153, 159, 161, 159, 161, 160, 162, 162, 160, 165, 159, 155, 164, 167, 155, 154, 157, 157, 159, 174, 160, 154, 162, 174, 153, 163, 165, 164, 159, 163, 161, 177, 155, 184, 220, 149, 166, 166, 160, 167, 159, 160, 153, 160, 176, 165, 153, 154, 157, 154], [163, 173, 173, 166, 158, 157, 155, 164, 173, 173, 154, 165, 171, 165, 204, 227, 212, 218, 224, 224, 218, 199, 198, 180, 171, 161, 164, 158, 167, 176, 190, 184, 190, 178, 160, 165, 163, 165, 168, 162, 157, 158, 176, 178, 162, 173, 162, 162, 172, 160, 155, 154, 172, 182, 173], [163, 176, 172, 196, 203, 205, 204, 175, 169, 173, 158, 162, 158, 164, 170, 169, 167, 169, 164, 159, 167, 167, 163, 165, 167, 159, 168, 169, 172, 171, 160, 158, 163, 166, 167, 161, 171, 164, 164, 159, 164, 172, 171, 165, 163, 159, 159, 165, 162, 167, 158, 154, 170, 165, 164, 169, 176, 179, 182, 167], [160, 162, 177, 165, 162, 168, 165, 162, 163, 161, 167, 154, 156, 154, 153, 159, 156, 160, 165, 163, 159, 167, 164, 158, 158, 160, 156, 167, 165, 174, 185, 187, 160, 160, 159, 152, 171, 176, 182, 157, 169, 169, 155, 156, 156, 161, 169, 163, 162, 167, 159, 161, 154, 161, 158, 154, 175, 171, 160, 172], [173, 172, 180, 180, 181, 180, 164, 164, 166, 174, 159, 160, 158, 160, 159, 166, 160, 168, 169, 171, 159, 157, 161, 163, 164, 156, 168, 171, 189, 185, 161, 168, 165, 164, 166, 167, 163, 161, 170, 175, 155, 159, 166, 166, 169, 163, 157, 167, 162, 163, 174, 161, 160, 161, 161, 171, 168, 166], [155, 154, 154, 159, 156, 157, 164, 159, 195, 160, 158, 161, 166, 178, 199, 196, 198, 202, 169, 162, 179, 163, 157, 162, 161, 160, 160, 167, 161, 163, 155, 157, 158, 160, 169, 167, 168, 189, 177, 162, 165, 164, 186, 172, 162, 168, 166, 163, 162, 179, 176, 175, 168, 158, 170, 169, 166, 156, 176, 166, 169], [161, 167, 169, 178, 178, 177, 162, 166, 159, 159, 161, 160, 157, 157, 159, 164, 162, 174, 155, 152, 167, 159, 168, 165, 167, 164, 165, 171, 165, 179, 165, 173, 168, 159, 160, 162, 166, 157, 157, 174, 183, 185, 183, 165, 171, 167, 155, 171, 171, 155, 183, 177, 222, 218, 177, 176, 173, 164, 159], [159, 171, 165, 170, 170, 173, 174, 174, 156, 160, 159, 169, 155, 156, 164, 164, 163, 170, 159, 162, 159, 177, 159, 159, 156, 159, 233, 181, 227, 191, 173, 154, 155, 156, 162, 157, 165, 168, 167, 180, 182, 148, 158, 154, 155, 155, 161, 154, 152, 157, 163, 161, 161, 165, 169, 163, 155, 164, 168, 165, 165], [155, 158, 163, 171, 172, 159, 158, 164, 156, 167, 156, 154, 158, 173, 169, 162, 156, 167, 164, 168, 156, 156, 173, 172, 175, 157, 154, 155, 157, 185, 171, 183, 169, 167, 167, 157, 164, 160, 160, 162, 167, 167, 164, 164, 160, 164, 157, 157, 160, 164, 166, 164, 157, 166, 166, 161, 156, 161, 157], [164, 166, 170, 159, 173, 175, 168, 166, 169, 170, 160, 159, 159, 153, 163, 164, 153, 159, 161, 169, 160, 158, 162, 164, 169, 166, 167, 161, 157, 157, 155, 153, 156, 164, 162, 157, 163, 157, 159, 159, 159, 159, 159, 157, 165, 167, 168, 169, 160, 159, 158, 165, 156, 159, 159, 159, 161, 163, 158, 155, 165, 164, 166, 164], [158, 156, 166, 167, 155, 154, 161, 163, 163, 162, 169, 168, 168, 159, 168, 171, 159, 158, 158, 160, 165, 164, 164, 164, 164, 180, 160, 159, 159, 162, 156, 165, 170, 174, 175, 162, 167, 169, 169, 166, 170, 162, 155, 155, 155, 153, 161, 158, 161, 162, 154, 158, 156, 158, 155, 160, 164, 164, 167, 166], [155, 155, 155, 160, 157, 159, 156, 157, 155, 156, 159, 163, 159, 154, 154, 157, 157, 159, 160, 163, 159, 159, 157, 169, 168, 166, 156, 155, 155, 157, 164, 164, 163, 161, 171, 170, 161, 161, 161, 159, 169, 168, 169, 159, 165, 169, 171, 171, 170, 161, 169, 168, 167, 168, 169, 176, 157, 169, 169, 171], [172, 172, 171, 171, 161, 169, 156, 164, 163, 168, 157, 156, 162, 164, 154, 175, 177, 163, 163, 178, 157, 153, 172, 177, 176, 153, 154, 164, 159, 181, 162, 165, 155, 153, 154, 165, 164, 168, 180, 159, 166, 168, 162, 163, 164, 170, 177, 167, 157, 175, 171, 172, 166, 167, 172, 161, 165, 161, 197, 167], [169, 176, 175, 175, 175, 162, 168, 166, 164, 165, 175, 170, 178, 181, 184, 156, 157, 158, 166, 158, 160, 164, 181, 164, 164, 182, 162, 187, 194, 185, 169, 166, 162, 166, 166, 165, 167, 163, 164, 165, 181, 179, 169, 178, 178, 180, 190, 191, 171, 193, 166, 162, 168, 157, 172, 173, 162, 162], [181, 160, 170, 171, 173, 162, 183, 180, 186, 186, 199, 197, 158, 170, 174, 176, 173, 172, 172, 173, 184, 185, 172, 192, 164, 164, 158, 161, 159, 159, 160, 181, 181, 178, 162, 160, 159, 161, 157, 161, 180, 190, 194, 176, 177, 178, 162, 166, 169, 172, 164, 158, 159, 164, 161, 167, 173, 174, 165, 171], [176, 157, 158, 157, 161, 162, 165, 182, 195, 166, 157, 156, 156, 170, 162, 179, 184, 166, 166, 175, 159, 159, 163, 169, 166, 157, 158, 188, 177, 182, 164, 163, 154, 160, 185, 175, 182, 170, 178, 178, 158, 166, 164, 174, 172, 172, 154, 180, 160, 177, 177, 174, 174, 158, 159, 158, 157, 162], [157, 173, 184, 178, 181, 159, 173, 160, 155, 166, 169, 186, 159, 163, 163, 159, 163, 168, 166, 160, 195, 199, 160, 159, 161, 172, 168, 170, 169, 160, 166, 188, 191, 191, 163, 194, 160, 159, 159, 157, 171, 180, 181, 182, 169, 197, 198, 183, 183, 179, 198, 167, 165, 174, 161, 161, 176, 174, 176, 182], [172, 160, 159, 166, 237, 221, 241, 221, 224, 219, 182, 189, 172, 179, 185, 186, 186, 188, 189, 187, 162, 178, 173, 168, 185, 187, 187, 188, 189, 187, 169, 161, 159, 160, 163, 162, 179, 179, 188, 188, 195, 159, 162, 161, 162, 180, 164, 164, 169, 169, 187, 175, 178, 180], [163, 159, 158, 157, 166, 164, 170, 169, 172, 170, 172, 178, 207, 216, 205, 206, 182, 169, 174, 181, 170, 181, 169, 157, 160, 160, 167, 170, 172, 160, 185, 188, 169, 165, 164, 167, 171, 170, 167, 169, 159, 162, 169, 175, 176, 172, 160, 163, 168, 168, 172, 168, 162, 160, 163, 165], [165, 164, 165, 175, 164, 162, 163, 164, 168, 165, 164, 168, 155, 164, 157, 155, 161, 153, 160, 159, 165, 160, 160, 175, 185, 184, 168, 166, 185, 166, 163, 169, 160, 304, 154, 168, 167, 171, 179, 174, 181, 175, 161, 165, 166, 172, 165, 176, 175, 166, 179, 176, 254, 161, 185], [172, 173, 167, 166, 168, 157, 171, 172, 166, 163, 163, 156, 167, 168, 174, 174, 173, 173, 162, 164, 164, 166, 162, 164, 162, 161, 168, 169, 161, 161, 170, 170, 165, 165, 166, 165, 156, 161, 183, 162, 176, 194, 176, 180, 180, 181, 182, 180, 168, 163, 158, 162, 158, 161, 160, 161, 158, 159, 175], [163, 155, 164, 161, 157, 165, 165, 165, 168, 170, 166, 162, 165, 160, 168, 172, 180, 181, 182, 165, 183, 190, 187, 190, 181, 163, 164, 166, 166, 163, 163, 163, 162, 162, 159, 160, 155, 164, 161, 172, 168, 171, 169, 175, 170, 189, 177, 171, 182, 169, 159, 155, 155, 156, 161, 153, 152, 155, 180], [158, 170, 169, 175, 183, 189, 188, 195, 189, 158, 162, 157, 156, 170, 161, 159, 156, 156, 165, 165, 170, 154, 159, 161, 162, 165, 162, 159, 163, 167, 158, 168, 152, 170, 168, 173, 183, 194, 195, 207, 168, 169, 167, 160, 158, 152, 165, 154, 160, 172, 169, 178, 177, 164, 165, 158, 169, 171, 156, 194], [158, 170, 160, 160, 162, 160, 191, 189, 183, 167, 162, 170, 173, 160, 161, 164]]
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:jtl_root_latencies) do
|
23
|
+
[[458, 324], [165, 155, 332, 158, 158, 165, 171, 169, 328], [158, 158, 159, 160, 159, 156, 326, 158, 165, 155, 159, 159, 155, 156, 335], [163, 165, 167, 162, 158, 167, 154, 166, 161, 350, 161, 170, 158, 160, 159, 162, 166, 191, 162, 163], [162, 165, 165, 160, 168, 167, 168, 169, 158, 160, 177, 309, 175, 164, 162, 169, 170, 167, 168, 167, 167, 178, 170, 168, 165, 168, 313], [166, 170, 157, 156, 172, 170, 170, 157, 158, 168, 166, 162, 174, 170, 177, 174, 181, 163, 162, 174, 168, 174, 177, 176, 162, 172, 171, 167, 167, 165], [167, 183, 197, 197, 161, 170, 174, 159, 160, 179, 158, 160, 161, 164, 162, 159, 159, 164, 163, 181, 164, 165, 170, 180, 172, 168, 163, 168, 188], [169, 170, 179, 170, 160, 163, 167, 162, 161, 163, 160, 162, 157, 160, 174, 175, 161, 169, 167, 167, 161, 167, 168, 163, 158, 162, 189, 191, 189, 190], [178, 192, 196, 167, 163, 166, 173, 172, 167, 168, 158, 171, 184, 170, 169, 153, 172, 171, 164, 175, 158, 178, 174, 158, 171, 165, 167, 181, 180, 158], [165, 180, 179, 161, 169, 167, 165, 166, 166, 171, 156, 164, 175, 190, 162, 195, 162, 160, 161, 182, 205, 174, 165, 162, 175, 156, 159, 159, 166], [172, 162, 155, 163, 163, 162, 175, 170, 171, 156, 166, 168, 163, 158, 160, 157, 166, 155, 164, 160, 166, 166, 157, 160, 169, 168, 163, 168, 160, 160], [159, 170, 159, 165, 164, 163, 165, 158, 161, 164, 162, 168, 176, 168, 156, 159, 168, 159, 159, 163, 159, 175, 160, 159, 176, 176, 178, 176, 178, 179], [164, 158, 168, 184, 158, 168, 166, 188, 189, 184, 165, 161, 164, 162, 162, 156, 160, 160, 160, 164, 156, 164, 163, 164, 165, 172, 170, 176, 173, 176], [169, 157, 162, 160, 162, 155, 154, 151, 155, 157, 162, 156, 170, 174, 177, 154, 156, 156, 171, 171, 179, 167, 164, 162, 155, 158, 158, 154, 167, 168], [159, 155, 167, 167, 161, 171, 167, 176, 180, 182, 180, 173, 166, 158, 163, 183, 167, 162, 171, 165, 179, 165, 173, 162, 162, 206, 215, 219, 164], [157, 161, 174, 163, 162, 163, 177, 160, 184, 180, 158, 162, 161, 172, 183, 183, 185, 183, 189, 187, 180, 155, 157, 168, 163, 160, 186, 176, 175, 195, 180], [171, 183, 186, 189, 201, 170, 176, 182, 187, 178, 165, 169, 158, 153, 156, 182, 180, 179, 179, 162, 160, 174, 178, 172, 171], [159, 158, 161, 159, 161, 168, 166, 174, 174, 171, 158, 158, 153, 163, 168, 163, 159, 156, 157, 162, 168, 165, 169, 160, 167, 164, 169, 164, 166, 174], [158, 162, 167, 168, 175, 162, 155, 167, 169, 178, 161, 153, 160, 158, 160, 171, 170, 165, 166, 165, 163, 184, 178, 175, 175, 170, 163, 160, 188, 167], [160, 158, 164, 158, 165, 157, 167, 186, 168, 162, 172, 159, 158, 170, 182, 171, 162, 161, 179, 169, 159, 156, 156, 156, 161, 173, 168, 161, 162, 186], [170, 175, 173, 157, 165, 166, 168, 169, 155, 170, 191, 224, 227, 229, 208, 199, 166, 160, 166, 185, 168, 163, 176, 184, 174, 174, 178, 216, 162], [163, 171, 164, 165, 186, 186, 194, 179, 185, 156, 220, 208, 207, 165, 158, 155, 166, 164, 159, 179, 170, 158, 166, 162, 162, 167, 168, 188, 180], [174, 170, 161, 164, 154, 158, 157, 167, 167, 167, 179, 166, 170, 160, 164, 160, 158, 160, 161, 162, 168, 170, 166, 166, 161, 163, 167, 160, 166, 173], [159, 159, 176, 181, 175, 171, 169, 159, 159, 157, 165, 169, 179, 180, 183, 168, 173, 162, 162, 160, 162, 167, 153, 154, 162, 171, 160, 170, 168], [167, 167, 160, 163, 166, 166, 173, 175, 155, 161, 164, 165, 164, 155, 156, 157, 159, 156, 166, 164, 167, 170, 169, 165, 167, 169, 157, 165, 165, 179], [154, 156, 160, 164, 153, 154, 168, 165, 160, 170, 159, 158, 169, 170, 163, 162, 150, 163, 163, 168, 199, 201, 162, 171, 178, 177, 190, 197, 189, 161], [159, 160, 165, 160, 164, 173, 157, 156, 157, 172, 155, 154, 178, 154, 157, 154, 156, 154, 166, 161, 156, 167, 185, 154, 162, 160, 158, 168, 154, 166], [159, 163, 163, 152, 156, 160, 173, 164, 155, 169, 154, 169, 163, 166, 163, 159, 152, 157, 230, 160, 163, 165, 160, 174, 179, 168, 162, 172, 169, 161, 162], [172, 155, 166, 158, 167, 160, 165, 168, 164, 164, 169, 169, 161, 163, 161, 161, 164, 174, 166, 163, 158, 156, 160, 161, 164, 157, 169, 160, 193, 163], [168, 170, 157, 159, 156, 172, 173, 167, 171, 168, 165, 167, 165, 162, 163, 160, 176, 157, 158, 162, 158, 159, 157, 156, 165, 155, 175, 159, 162, 172], [162, 161, 148, 155, 153, 165, 161, 150, 168, 169, 158, 158, 162, 160, 159, 169, 158, 177, 170, 161, 163, 164, 164, 165, 169, 168, 157, 171, 158, 166], [161, 161, 161, 160, 157, 163, 163, 161, 154, 162, 156, 166, 164, 164, 163, 156, 155, 162, 161, 164, 155, 153, 156, 164, 161, 184, 180, 172, 170, 153], [166, 169, 166, 165, 168, 161, 159, 159, 159, 156, 179, 181, 180, 178, 160, 166, 171, 163, 184, 158, 161, 167, 164, 166, 166, 165, 167, 167, 150, 170], [158, 158, 160, 166, 177, 184, 169, 169, 167, 177, 167, 213, 220, 220, 290, 429, 429, 312, 314, 159, 165, 166, 181, 203, 204], [165, 172, 178, 175, 158, 159, 158, 171, 167, 164, 165, 166, 158, 157, 168, 164, 167, 163, 161, 170, 155, 160, 166, 164, 160, 167, 162, 169, 164, 169], [156, 180, 173, 171, 183, 166, 169, 174, 172, 175, 155, 158, 160, 164, 180, 172, 175, 175, 156, 155, 158, 168, 160, 161, 178, 178, 175, 176, 155, 158], [167, 157, 152, 161, 161, 163, 164, 163, 165, 164, 159, 169, 160, 157, 162, 171, 172, 176, 186, 199, 158, 176, 195, 200, 198, 197, 204, 209], [172, 187, 152, 163, 161, 159, 160, 162, 160, 165, 159, 155, 155, 154, 162, 174, 165, 164, 159, 163, 161, 177, 220, 149, 153, 160, 153, 154, 157, 154], [163, 173, 158, 157, 171, 165, 212, 218, 224, 224, 218, 199, 171, 164, 190, 178, 165, 165, 168, 162, 157, 158, 162, 162, 172, 182], [163, 172, 196, 203, 205, 204, 173, 162, 169, 164, 167, 163, 165, 167, 159, 168, 171, 163, 164, 164, 164, 172, 165, 163, 159, 159, 167, 170, 179, 182], [160, 162, 165, 162, 168, 165, 161, 156, 160, 165, 159, 167, 158, 158, 160, 156, 174, 160, 176, 182, 169, 169, 156, 156, 161, 169, 167, 161, 171, 172], [173, 172, 180, 181, 180, 164, 164, 160, 169, 171, 159, 157, 161, 163, 156, 168, 189, 165, 161, 175, 155, 159, 166, 169, 163, 157, 174, 160, 166], [155, 154, 154, 156, 164, 159, 195, 178, 198, 162, 179, 163, 157, 161, 160, 167, 161, 160, 168, 162, 165, 164, 186, 162, 168, 163, 162, 158, 166, 166, 169], [161, 167, 178, 178, 162, 166, 157, 164, 155, 152, 167, 168, 165, 167, 165, 171, 168, 162, 157, 174, 183, 185, 165, 171, 155, 171, 218, 176, 159], [159, 171, 170, 170, 173, 174, 156, 156, 163, 159, 159, 177, 159, 156, 233, 227, 191, 162, 157, 167, 182, 148, 158, 155, 161, 154, 163, 165, 163, 164, 165], [155, 158, 171, 159, 158, 167, 158, 169, 167, 164, 156, 156, 172, 157, 154, 185, 169, 167, 160, 160, 162, 167, 164, 164, 157, 164, 157, 166, 161, 157], [166, 170, 175, 168, 166, 159, 153, 164, 161, 169, 160, 158, 169, 167, 161, 156, 164, 163, 159, 159, 159, 159, 165, 168, 169, 156, 159, 159, 158, 155, 164, 166], [158, 156, 167, 163, 162, 159, 168, 171, 158, 160, 165, 164, 164, 160, 162, 165, 170, 162, 167, 169, 170, 155, 155, 161, 162, 158, 156, 155, 164, 167], [155, 160, 157, 156, 156, 159, 159, 157, 157, 160, 159, 169, 168, 155, 157, 164, 164, 170, 161, 161, 168, 159, 165, 171, 161, 168, 167, 176, 157, 169], [171, 171, 161, 163, 168, 157, 156, 175, 177, 163, 172, 177, 176, 159, 181, 162, 165, 165, 164, 180, 162, 163, 164, 167, 175, 171, 172, 161, 165, 197], [175, 175, 175, 162, 165, 175, 170, 157, 158, 166, 181, 164, 182, 187, 185, 169, 166, 162, 165, 164, 169, 178, 190, 191, 171, 166, 162, 172, 173], [160, 173, 162, 180, 186, 197, 158, 170, 173, 173, 184, 164, 164, 158, 159, 160, 181, 178, 159, 157, 194, 176, 177, 162, 166, 164, 158, 164, 165, 171], [158, 157, 161, 162, 165, 157, 156, 166, 166, 175, 163, 169, 166, 157, 158, 164, 163, 170, 178, 178, 164, 174, 172, 172, 180, 177, 174, 157], [157, 173, 178, 159, 173, 160, 166, 159, 163, 163, 160, 199, 159, 172, 168, 169, 166, 188, 191, 159, 157, 182, 169, 197, 198, 183, 198, 167, 165, 176, 174], [166, 237, 241, 221, 219, 182, 189, 179, 185, 186, 173, 185, 187, 188, 187, 169, 161, 159, 162, 179, 161, 180, 164, 169, 169, 187, 175, 180], [163, 157, 169, 172, 207, 205, 206, 182, 169, 181, 170, 160, 167, 185, 169, 165, 167, 170, 167, 169, 169, 176, 168, 172, 168, 160, 165], [165, 164, 175, 163, 164, 155, 157, 161, 160, 159, 165, 160, 175, 185, 163, 304, 154, 167, 171, 179, 174, 181, 161, 166, 176, 161], [172, 173, 167, 166, 157, 171, 172, 156, 167, 162, 164, 164, 162, 162, 161, 168, 169, 170, 165, 183, 162, 194, 176, 180, 181, 182, 180, 158, 161, 175], [163, 155, 161, 165, 165, 165, 168, 165, 168, 165, 183, 190, 187, 163, 164, 166, 166, 162, 159, 172, 168, 175, 170, 189, 177, 171, 182, 155, 155], [158, 170, 169, 189, 188, 195, 189, 158, 170, 161, 170, 154, 159, 165, 162, 159, 163, 167, 170, 168, 168, 169, 167, 152, 165, 154, 160, 172, 164, 165], [158, 170, 160, 160, 191, 189, 183, 167, 160, 161]]
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'scale_marks (defaut)' do
|
27
|
+
jtl = Jtl.new(jtl_path)
|
28
|
+
marks = jtl_range.map {|i| Time.at((i - i % 1000) / 1000) }.uniq.sort
|
29
|
+
expect(jtl.scale_marks).to eq(marks)
|
30
|
+
expect(jtl.elapseds.scale_marks).to eq(marks)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'scale_marks (10s)' do
|
34
|
+
jtl = Jtl.new(jtl_path, 10000)
|
35
|
+
marks = jtl_range.map {|i| Time.at((i - i % 10000) / 1000) }.uniq.sort
|
36
|
+
expect(jtl.scale_marks).to eq(marks)
|
37
|
+
expect(jtl.elapseds.scale_marks).to eq(marks)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'labels' do
|
41
|
+
jtl = Jtl.new(jtl_path)
|
42
|
+
expect(jtl.labels.sort).to eq(['not_exists', 'root'])
|
43
|
+
expect(jtl.elapseds.labels.sort).to eq(['not_exists', 'root'])
|
44
|
+
expect(jtl.elapseds.root.labels.sort).to eq(['not_exists', 'root'])
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'time_stamp' do
|
48
|
+
jtl = Jtl.new(jtl_path)
|
49
|
+
expect(jtl.time_stamps.flatten.all? {|i| jtl_range.include?(i) }).to be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'elapsed' do
|
53
|
+
jtl = Jtl.new(jtl_path)
|
54
|
+
expect(jtl.elapseds.to_a).to eq(jtl_elapseds)
|
55
|
+
expect(jtl.elapseds {|i| i.mean.to_i }).to eq(jtl_elapseds.map {|i| i.mean.to_i })
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'elapsed (root)' do
|
59
|
+
jtl = Jtl.new(jtl_path)
|
60
|
+
expect(jtl.elapseds.root.to_a).to eq(jtl_root_elapseds)
|
61
|
+
expect(jtl.elapseds.root {|i| i.mean.to_i }).to eq(jtl_root_elapseds.map {|i| i.mean.to_i })
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'response_code' do
|
65
|
+
jtl = Jtl.new(jtl_path)
|
66
|
+
expect(jtl.response_codes.flatten.uniq.sort).to eq([200, 404])
|
67
|
+
expect(jtl.response_codes.root.flatten.uniq.sort).to eq([200])
|
68
|
+
expect(jtl.response_codes.not_exists.flatten.uniq.sort).to eq([404])
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'response_message' do
|
72
|
+
jtl = Jtl.new(jtl_path)
|
73
|
+
expect(jtl.response_messages.flatten.uniq.sort).to eq(['Not Found', 'OK'])
|
74
|
+
expect(jtl.response_messages.root.flatten.uniq.sort).to eq(['OK'])
|
75
|
+
expect(jtl.response_messages.not_exists.flatten.uniq.sort).to eq(['Not Found'])
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'data_type' do
|
79
|
+
jtl = Jtl.new(jtl_path)
|
80
|
+
expect(jtl.data_types.flatten.uniq.sort).to eq(['text'])
|
81
|
+
expect(jtl.data_types.root.flatten.uniq.sort).to eq(['text'])
|
82
|
+
expect(jtl.data_types.not_exists.flatten.uniq.sort).to eq(['text'])
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'thread_name' do
|
86
|
+
jtl = Jtl.new(jtl_path)
|
87
|
+
expect(jtl.thread_names.flatten.all? {|i| i =~ /ThreadGroup/ }).to be_true
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'success' do
|
91
|
+
jtl = Jtl.new(jtl_path)
|
92
|
+
rs = jtl.successes.flatten.uniq
|
93
|
+
expect(rs.length).to eq(2)
|
94
|
+
expect(rs.include?(true)).to be_true
|
95
|
+
expect(rs.include?(false)).to be_true
|
96
|
+
expect(jtl.successes.root.flatten.uniq).to eq([true])
|
97
|
+
expect(jtl.successes.not_exists.flatten.uniq).to eq([false])
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'bytes' do
|
101
|
+
jtl = Jtl.new(jtl_path)
|
102
|
+
expect(jtl.bytes.flatten.uniq.sort).to eq([1615, 1622, 1626])
|
103
|
+
expect(jtl.bytes.root.flatten.uniq.sort).to eq([1615])
|
104
|
+
expect(jtl.bytes.not_exists.flatten.uniq.sort).to eq([1622, 1626])
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'latencies' do
|
108
|
+
jtl = Jtl.new(jtl_path)
|
109
|
+
expect(jtl.latencies.to_a).to eq(jtl_latencies)
|
110
|
+
expect(jtl.latencies.to_a).to_not eq(jtl_elapseds)
|
111
|
+
expect(jtl.latencies {|i| i.mean.to_i }).to eq(jtl_latencies.map {|i| i.mean.to_i })
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'latencies (root)' do
|
115
|
+
jtl = Jtl.new(jtl_path)
|
116
|
+
expect(jtl.latencies.root.to_a).to eq(jtl_root_latencies)
|
117
|
+
expect(jtl.latencies.root.to_a).to_not eq(jtl_root_elapseds)
|
118
|
+
expect(jtl.latencies.root {|i| i.mean.to_i }).to eq(jtl_root_latencies.map {|i| i.mean.to_i })
|
119
|
+
end
|
120
|
+
end
|