groonga-query-log 1.5.2 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/text/news.md +13 -0
- data/groonga-query-log.gemspec +2 -1
- data/lib/groonga-query-log/command/analyzer/reporter/console.rb +15 -5
- data/lib/groonga-query-log/command/analyzer/reporter/csv.rb +2 -2
- data/lib/groonga-query-log/command/analyzer/reporter/html.rb +105 -10
- data/lib/groonga-query-log/command/analyzer/sized-statistics.rb +20 -7
- data/lib/groonga-query-log/command/analyzer/worker-statistic.rb +64 -0
- data/lib/groonga-query-log/command/check-crash.rb +18 -18
- data/lib/groonga-query-log/command/check-performance-regression.rb +0 -4
- data/lib/groonga-query-log/command/extract.rb +1 -1
- data/lib/groonga-query-log/command/run-regression-test.rb +14 -0
- data/lib/groonga-query-log/command/verify-server.rb +7 -1
- data/lib/groonga-query-log/performance-verifier.rb +73 -0
- data/lib/groonga-query-log/server-verifier.rb +39 -0
- data/lib/groonga-query-log/statistic.rb +7 -2
- data/lib/groonga-query-log/version.rb +1 -1
- data/test/command/test-analyzer.rb +2 -2
- data/test/fixtures/multi.expected +25 -3
- data/test/fixtures/n_entries.expected +18 -3
- data/test/fixtures/order/-elapsed.expected +18 -3
- data/test/fixtures/order/-start-time.expected +18 -3
- data/test/fixtures/order/elapsed.expected +18 -3
- data/test/fixtures/order/start-time.expected +18 -3
- data/test/fixtures/reporter/console.expected +18 -3
- data/test/fixtures/reporter/html.expected +44 -7
- data/test/fixtures/reporter/json-stream.expected +2 -2
- data/test/fixtures/reporter/json.expected +2 -2
- data/test/fixtures/run-regression-test/db.new/db +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000000 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000100 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000101 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000102 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000103 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.0000103.c +0 -0
- data/test/fixtures/run-regression-test/db.new/db.001 +0 -0
- data/test/fixtures/run-regression-test/db.new/db.conf +0 -0
- data/test/fixtures/run-regression-test/db.new/groonga.log +165 -0
- data/test/fixtures/run-regression-test/db.old/db +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000000 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000100 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000101 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000102 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000103 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.0000103.c +0 -0
- data/test/fixtures/run-regression-test/db.old/db.001 +0 -0
- data/test/fixtures/run-regression-test/db.old/db.conf +0 -0
- data/test/fixtures/run-regression-test/db.old/groonga.log +79 -0
- data/test/fixtures/run-regression-test/results/query.log +0 -0
- data/test/fixtures/target-commands.expected +11 -3
- data/test/fixtures/target-tables.expected +11 -3
- metadata +102 -45
- data/test/#test-response-comparer.rb# +0 -14750
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f9718a90b49d69a599b168a7ab18cece39ef1849355ef0c9c511a34c54ef636
|
4
|
+
data.tar.gz: bf2c8374333e8d70455d64aa71eb743d2e900410e38c9b04a4acf7ec96380763
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3ab37905b01d41b982c75e74a0e585b46f81d101b690c22b92ccc4fd8098deb889c45e1cc31998ece5c7a69b587f8852e226c84a8c0ffc822e5ae09c503f636
|
7
|
+
data.tar.gz: e85db7c29f331f0b2673beebbfda49a5aae5096630b1524140e7751256140b3293faa6cc630fb8e6c0acc2fe6c50a81eb2aea664be5985e533523692dd9f84a6
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.5.3: 2019-10-21
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* `GroongaQueryLog::Statistic#end_time`: Renamed from
|
8
|
+
`#last_time`. `#last_time` is deprecated.
|
9
|
+
|
10
|
+
* `analyzer`: Added support for reporting worker idle time.
|
11
|
+
|
12
|
+
* `analyzer`: Added support for reporting the number of processed
|
13
|
+
requests per worker.
|
14
|
+
|
15
|
+
* `run-regression-test`: Added `--verify-performance` option.
|
3
16
|
|
4
17
|
## 1.5.2: 2019-09-26
|
5
18
|
|
data/groonga-query-log.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012-
|
3
|
+
# Copyright (C) 2012-2019 Sutou Kouhei <kou@clear-code.com>
|
4
4
|
#
|
5
5
|
# This library is free software; you can redistribute it and/or
|
6
6
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -52,6 +52,7 @@ Gem::Specification.new do |spec|
|
|
52
52
|
spec.licenses = ["LGPLv2.1+"]
|
53
53
|
spec.require_paths = ["lib"]
|
54
54
|
|
55
|
+
spec.add_runtime_dependency("charty")
|
55
56
|
spec.add_runtime_dependency("diff-lcs")
|
56
57
|
spec.add_runtime_dependency("groonga-client", ">= 0.6.2")
|
57
58
|
spec.add_runtime_dependency("groonga-log", ">= 0.1.2")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2011-
|
1
|
+
# Copyright (C) 2011-2019 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
# Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
@@ -177,11 +177,21 @@ module GroongaQueryLog
|
|
177
177
|
write(" # of slow responses : #{@statistics.n_slow_responses}\n")
|
178
178
|
write(" responses/sec : #{@statistics.responses_per_second}\n")
|
179
179
|
write(" start time : #{format_time(@statistics.start_time)}\n")
|
180
|
-
write("
|
181
|
-
write(" period(sec) :
|
180
|
+
write(" end time : #{format_time(@statistics.end_time)}\n")
|
181
|
+
write(" period(sec) : %.3f\n" % @statistics.period)
|
182
182
|
slow_response_ratio = @statistics.slow_response_ratio
|
183
183
|
write(" slow response ratio : %5.3f%%\n" % slow_response_ratio)
|
184
|
-
write(" total response time :
|
184
|
+
write(" total response time : %.3f\n" % @statistics.total_elapsed)
|
185
|
+
write(" Workers:\n")
|
186
|
+
@statistics.each_worker do |worker|
|
187
|
+
write(" #{worker.id}:\n")
|
188
|
+
write(" # of processed requests: #{worker.n_statistics}\n")
|
189
|
+
write(" idle time(sec):\n")
|
190
|
+
write(" total : %.3f\n" % worker.idle_time_total)
|
191
|
+
write(" mean : %.3f\n" % worker.idle_time_mean)
|
192
|
+
write(" min : %.3f\n" % worker.idle_time_min)
|
193
|
+
write(" max : %.3f\n" % worker.idle_time_max)
|
194
|
+
end
|
185
195
|
report_slow_operations
|
186
196
|
end
|
187
197
|
|
@@ -266,7 +276,7 @@ module GroongaQueryLog
|
|
266
276
|
:elapsed)
|
267
277
|
data = [
|
268
278
|
format_time(statistic.start_time),
|
269
|
-
format_time(statistic.
|
279
|
+
format_time(statistic.end_time),
|
270
280
|
formatted_elapsed,
|
271
281
|
statistic.return_code,
|
272
282
|
]
|
@@ -33,7 +33,7 @@ module GroongaQueryLog
|
|
33
33
|
@csv = CSV.new(@output)
|
34
34
|
header = [
|
35
35
|
"start_time",
|
36
|
-
"
|
36
|
+
"end_time",
|
37
37
|
"elapsed",
|
38
38
|
"return_code",
|
39
39
|
"slow",
|
@@ -46,7 +46,7 @@ module GroongaQueryLog
|
|
46
46
|
def report_statistic(statistic)
|
47
47
|
record = [
|
48
48
|
format_time(statistic.start_time),
|
49
|
-
format_time(statistic.
|
49
|
+
format_time(statistic.end_time),
|
50
50
|
statistic.elapsed_in_seconds,
|
51
51
|
statistic.return_code,
|
52
52
|
statistic.slow?,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2011-
|
1
|
+
# Copyright (C) 2011-2019 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
# Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "erb"
|
19
|
+
|
20
|
+
require "charty"
|
21
|
+
|
19
22
|
require "groonga-query-log/command/analyzer/reporter"
|
20
23
|
|
21
24
|
module GroongaQueryLog
|
@@ -24,6 +27,34 @@ module GroongaQueryLog
|
|
24
27
|
class HTMLReporter < Reporter
|
25
28
|
include ERB::Util
|
26
29
|
|
30
|
+
private
|
31
|
+
def setup_output
|
32
|
+
@directory_output_mode = false
|
33
|
+
return super unless directory_output?
|
34
|
+
|
35
|
+
@directory_output_mode = true
|
36
|
+
original_output = @output
|
37
|
+
begin
|
38
|
+
FileUtils.mkdir_p(@output)
|
39
|
+
File.open(File.join(@output, "index.html"), "w") do |output|
|
40
|
+
@output = output
|
41
|
+
yield(@output)
|
42
|
+
end
|
43
|
+
ensure
|
44
|
+
@output = original_output
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def directory_output?
|
49
|
+
return false unless @output.is_a?(String)
|
50
|
+
|
51
|
+
return true if File.directory?(@output)
|
52
|
+
return true if File.extname(@output).empty?
|
53
|
+
return true if @output.end_with?("/")
|
54
|
+
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
27
58
|
def start
|
28
59
|
write(header)
|
29
60
|
end
|
@@ -38,6 +69,7 @@ module GroongaQueryLog
|
|
38
69
|
<div class="summary">
|
39
70
|
<%= analyze_parameters %>
|
40
71
|
<%= metrics %>
|
72
|
+
<%= workers %>
|
41
73
|
<%= slow_operations %>
|
42
74
|
</div>
|
43
75
|
EOH
|
@@ -56,10 +88,10 @@ module GroongaQueryLog
|
|
56
88
|
statistic_html = erb(<<-EOH, __LINE__ + 1, binding)
|
57
89
|
<div class="statistic-heading">
|
58
90
|
<h3>Command</h3>
|
59
|
-
<div class="metrics">
|
91
|
+
<div class="statistic-metrics">
|
60
92
|
[<%= format_time(statistic.start_time) %>
|
61
93
|
-
|
62
|
-
<%= format_time(statistic.
|
94
|
+
<%= format_time(statistic.end_time) %>
|
63
95
|
(<%= format_elapsed(statistic.elapsed_in_seconds,
|
64
96
|
:slow? => statistic.slow?) %>)]
|
65
97
|
(<%= span({:class => "return-code"}, h(statistic.return_code)) %>)
|
@@ -111,7 +143,6 @@ module GroongaQueryLog
|
|
111
143
|
write(statistic_html)
|
112
144
|
end
|
113
145
|
|
114
|
-
private
|
115
146
|
def erb(content, line, _binding=nil)
|
116
147
|
_erb = ERB.new(content, nil, "<>")
|
117
148
|
eval(_erb.src, _binding || binding, __FILE__, line)
|
@@ -119,8 +150,10 @@ module GroongaQueryLog
|
|
119
150
|
|
120
151
|
def header
|
121
152
|
erb(<<-EOH, __LINE__ + 1)
|
153
|
+
<!DOCTYPE html>
|
122
154
|
<html>
|
123
155
|
<head>
|
156
|
+
<meta charset="utf-8">
|
124
157
|
<title>groonga query analyzer</title>
|
125
158
|
<style>
|
126
159
|
table,
|
@@ -136,18 +169,24 @@ span.slow
|
|
136
169
|
color: red;
|
137
170
|
}
|
138
171
|
|
139
|
-
div.parameters
|
172
|
+
div.parameters,
|
173
|
+
div.metrics,
|
174
|
+
div.workers
|
140
175
|
{
|
141
176
|
float: left;
|
142
177
|
padding: 2em;
|
143
178
|
}
|
144
179
|
|
145
|
-
div.parameters h3
|
180
|
+
div.parameters h3,
|
181
|
+
div.metrics h3,
|
182
|
+
div.workers h3
|
146
183
|
{
|
147
184
|
text-align: center;
|
148
185
|
}
|
149
186
|
|
150
|
-
div.parameters table
|
187
|
+
div.parameters table,
|
188
|
+
div.metrics table,
|
189
|
+
div.workers table
|
151
190
|
{
|
152
191
|
margin-right: auto;
|
153
192
|
margin-left: auto;
|
@@ -218,7 +257,7 @@ td.name
|
|
218
257
|
|
219
258
|
def metrics
|
220
259
|
erb(<<-EOH, __LINE__ + 1)
|
221
|
-
<div class="
|
260
|
+
<div class="metrics">
|
222
261
|
<h3>Metrics</h3>
|
223
262
|
<table>
|
224
263
|
<tr><th>Name</th><th>Value</th></tr>
|
@@ -239,8 +278,8 @@ td.name
|
|
239
278
|
<td><%= format_time(@statistics.start_time) %></td>
|
240
279
|
</tr>
|
241
280
|
<tr>
|
242
|
-
<th>
|
243
|
-
<td><%= format_time(@statistics.
|
281
|
+
<th>end time</th>
|
282
|
+
<td><%= format_time(@statistics.end_time) %></td>
|
244
283
|
</tr>
|
245
284
|
<tr>
|
246
285
|
<th>period</th>
|
@@ -259,6 +298,62 @@ td.name
|
|
259
298
|
EOH
|
260
299
|
end
|
261
300
|
|
301
|
+
def workers
|
302
|
+
html = ""
|
303
|
+
html << erb(<<-WORKERS, __LINE__ + 1)
|
304
|
+
<div class="workers">
|
305
|
+
<h3>Workers</h3>
|
306
|
+
<table>
|
307
|
+
<tr>
|
308
|
+
<th>ID</th>
|
309
|
+
<th># of processed requests</th>
|
310
|
+
<th>idle time total</th>
|
311
|
+
<th>idle time mean</th>
|
312
|
+
<th>idle time min</th>
|
313
|
+
<th>idle time max</th>
|
314
|
+
</tr>
|
315
|
+
<% @statistics.each_worker do |worker| %>
|
316
|
+
<tr>
|
317
|
+
<td><%= h(worker.id) %></td>
|
318
|
+
<td><%= h(worker.n_statistics) %></td>
|
319
|
+
<td><%= h("%.3f" % worker.idle_time_total) %></td>
|
320
|
+
<td><%= h("%.3f" % worker.idle_time_mean) %></td>
|
321
|
+
<td><%= h("%.3f" % worker.idle_time_min) %></td>
|
322
|
+
<td><%= h("%.3f" % worker.idle_time_max) %></td>
|
323
|
+
</tr>
|
324
|
+
<% end %>
|
325
|
+
</table>
|
326
|
+
WORKERS
|
327
|
+
use_charty = false # TODO
|
328
|
+
if use_charty
|
329
|
+
plotter = Charty::Plotter.new(:google_charts)
|
330
|
+
@statistics.each_worker do |worker|
|
331
|
+
figure = plotter.curve do
|
332
|
+
metrics = worker.metrics
|
333
|
+
series(metrics[:timestamp],
|
334
|
+
metrics[:idle_time],
|
335
|
+
label: worker.id)
|
336
|
+
xlabel("timestamp")
|
337
|
+
ylabel("idle time")
|
338
|
+
end
|
339
|
+
html << figure.render
|
340
|
+
figure = plotter.curve do
|
341
|
+
metrics = worker.metrics
|
342
|
+
series(metrics[:timestamp],
|
343
|
+
metrics[:elapsed],
|
344
|
+
label: worker.id)
|
345
|
+
xlabel("timestamp")
|
346
|
+
ylabel("elapsed")
|
347
|
+
end
|
348
|
+
html << figure.render
|
349
|
+
end
|
350
|
+
end
|
351
|
+
html << erb(<<-WORKERS, __LINE__ + 1)
|
352
|
+
</div>
|
353
|
+
WORKERS
|
354
|
+
html
|
355
|
+
end
|
356
|
+
|
262
357
|
def slow_operations
|
263
358
|
erb(<<-EOH, __LINE__ + 1)
|
264
359
|
<div class="statistics">
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2011-
|
1
|
+
# Copyright (C) 2011-2019 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
# Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "groonga-query-log/command/analyzer/sized-grouped-operations"
|
19
|
+
require "groonga-query-log/command/analyzer/worker-statistic"
|
19
20
|
|
20
21
|
module GroongaQueryLog
|
21
22
|
module Command
|
@@ -23,18 +24,19 @@ module GroongaQueryLog
|
|
23
24
|
class SizedStatistics < Array
|
24
25
|
attr_reader :n_responses, :n_slow_responses, :n_slow_operations
|
25
26
|
attr_reader :slow_operations, :total_elapsed
|
26
|
-
attr_reader :start_time, :
|
27
|
+
attr_reader :start_time, :end_time
|
27
28
|
def initialize
|
28
29
|
@max_size = 10
|
29
30
|
self.order = "-elapsed"
|
30
31
|
@start_time = nil
|
31
|
-
@
|
32
|
+
@end_time = nil
|
32
33
|
@n_responses = 0
|
33
34
|
@n_slow_responses = 0
|
34
35
|
@n_slow_operations = 0
|
35
36
|
@slow_operations = SizedGroupedOperations.new
|
36
37
|
@total_elapsed = 0
|
37
38
|
@collect_slow_statistics = true
|
39
|
+
@workers = {}
|
38
40
|
end
|
39
41
|
|
40
42
|
def order=(new_order)
|
@@ -92,8 +94,8 @@ module GroongaQueryLog
|
|
92
94
|
end
|
93
95
|
|
94
96
|
def period
|
95
|
-
if @start_time and @
|
96
|
-
@
|
97
|
+
if @start_time and @end_time
|
98
|
+
@end_time - @start_time
|
97
99
|
else
|
98
100
|
0
|
99
101
|
end
|
@@ -111,6 +113,10 @@ module GroongaQueryLog
|
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
116
|
+
def each_worker(&block)
|
117
|
+
@workers.each_value(&block)
|
118
|
+
end
|
119
|
+
|
114
120
|
private
|
115
121
|
def create_sorter
|
116
122
|
case @order
|
@@ -134,10 +140,11 @@ module GroongaQueryLog
|
|
134
140
|
end
|
135
141
|
|
136
142
|
def update_statistic(statistic)
|
143
|
+
update_worker_statistic(statistic)
|
137
144
|
@start_time ||= statistic.start_time
|
138
145
|
@start_time = [@start_time, statistic.start_time].min
|
139
|
-
@
|
140
|
-
@
|
146
|
+
@end_time ||= statistic.end_time
|
147
|
+
@end_time = [@end_time, statistic.end_time].max
|
141
148
|
@n_responses += 1
|
142
149
|
@total_elapsed += statistic.elapsed_in_seconds
|
143
150
|
return unless @collect_slow_statistics
|
@@ -152,6 +159,12 @@ module GroongaQueryLog
|
|
152
159
|
end
|
153
160
|
end
|
154
161
|
end
|
162
|
+
|
163
|
+
def update_worker_statistic(statistic)
|
164
|
+
id = statistic.context_id
|
165
|
+
@workers[id] ||= WorkerStatistic.new(id)
|
166
|
+
@workers[id] << statistic
|
167
|
+
end
|
155
168
|
end
|
156
169
|
end
|
157
170
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (C) 2019 Sutou Kouhei <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
module GroongaQueryLog
|
18
|
+
module Command
|
19
|
+
class Analyzer
|
20
|
+
class WorkerStatistic
|
21
|
+
attr_reader :id
|
22
|
+
attr_reader :idle_time_total
|
23
|
+
attr_reader :idle_time_mean
|
24
|
+
attr_reader :idle_time_min
|
25
|
+
attr_reader :idle_time_max
|
26
|
+
attr_reader :n_statistics
|
27
|
+
attr_reader :metrics
|
28
|
+
def initialize(id)
|
29
|
+
@id = id
|
30
|
+
@idle_time_total = 0.0
|
31
|
+
@idle_time_mean = 0.0
|
32
|
+
@idle_time_min = 0.0
|
33
|
+
@idle_time_max = 0.0
|
34
|
+
@n_statistics = 0
|
35
|
+
@metrics = {
|
36
|
+
timestamp: [],
|
37
|
+
idle_time: [],
|
38
|
+
elapsed: [],
|
39
|
+
}
|
40
|
+
@previous_statistic = nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def <<(statistic)
|
44
|
+
@n_statistics += 1
|
45
|
+
if @previous_statistic
|
46
|
+
idle_time = statistic.start_time - @previous_statistic.end_time
|
47
|
+
@idle_time_total += idle_time
|
48
|
+
@idle_time_mean += ((idle_time - @idle_time_mean) / @n_statistics)
|
49
|
+
if @idle_time_min.zero?
|
50
|
+
@idle_time_min = idle_time
|
51
|
+
else
|
52
|
+
@idle_time_min = [@idle_time_min, idle_time].min
|
53
|
+
end
|
54
|
+
@idle_time_max = [@idle_time_max, idle_time].max
|
55
|
+
@metrics[:timestamp] << statistic.start_time
|
56
|
+
@metrics[:idle_time] << idle_time
|
57
|
+
@metrics[:elapsed] << statistic.elapsed_in_seconds
|
58
|
+
end
|
59
|
+
@previous_statistic = statistic
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|