request-log-analyzer 1.13.1 → 1.13.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/console +17 -0
- data/lib/cli/command_line_arguments.rb +29 -36
- data/lib/cli/database_console.rb +1 -3
- data/lib/cli/database_console_init.rb +11 -11
- data/lib/cli/progressbar.rb +30 -32
- data/lib/cli/tools.rb +20 -23
- data/lib/request_log_analyzer.rb +8 -8
- data/lib/request_log_analyzer/aggregator.rb +4 -7
- data/lib/request_log_analyzer/aggregator/database_inserter.rb +10 -13
- data/lib/request_log_analyzer/aggregator/echo.rb +5 -7
- data/lib/request_log_analyzer/aggregator/summarizer.rb +15 -18
- data/lib/request_log_analyzer/class_level_inheritable_attributes.rb +23 -0
- data/lib/request_log_analyzer/controller.rb +36 -42
- data/lib/request_log_analyzer/database.rb +4 -6
- data/lib/request_log_analyzer/database/base.rb +39 -41
- data/lib/request_log_analyzer/database/connection.rb +8 -10
- data/lib/request_log_analyzer/database/request.rb +1 -3
- data/lib/request_log_analyzer/database/source.rb +0 -2
- data/lib/request_log_analyzer/database/warning.rb +4 -6
- data/lib/request_log_analyzer/file_format.rb +46 -49
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +15 -19
- data/lib/request_log_analyzer/file_format/apache.rb +42 -45
- data/lib/request_log_analyzer/file_format/delayed_job.rb +13 -15
- data/lib/request_log_analyzer/file_format/delayed_job2.rb +9 -11
- data/lib/request_log_analyzer/file_format/delayed_job21.rb +9 -11
- data/lib/request_log_analyzer/file_format/delayed_job3.rb +5 -8
- data/lib/request_log_analyzer/file_format/delayed_job4.rb +5 -8
- data/lib/request_log_analyzer/file_format/haproxy.rb +44 -48
- data/lib/request_log_analyzer/file_format/merb.rb +13 -17
- data/lib/request_log_analyzer/file_format/mysql.rb +21 -25
- data/lib/request_log_analyzer/file_format/nginx.rb +0 -2
- data/lib/request_log_analyzer/file_format/oink.rb +30 -31
- data/lib/request_log_analyzer/file_format/postgresql.rb +11 -15
- data/lib/request_log_analyzer/file_format/rack.rb +0 -2
- data/lib/request_log_analyzer/file_format/rails.rb +100 -104
- data/lib/request_log_analyzer/file_format/rails3.rb +19 -23
- data/lib/request_log_analyzer/file_format/rails_development.rb +0 -1
- data/lib/request_log_analyzer/file_format/w3c.rb +16 -18
- data/lib/request_log_analyzer/filter.rb +0 -2
- data/lib/request_log_analyzer/filter/anonymize.rb +4 -7
- data/lib/request_log_analyzer/filter/field.rb +3 -6
- data/lib/request_log_analyzer/filter/timespan.rb +2 -6
- data/lib/request_log_analyzer/line_definition.rb +16 -19
- data/lib/request_log_analyzer/log_processor.rb +10 -14
- data/lib/request_log_analyzer/mailer.rb +9 -12
- data/lib/request_log_analyzer/output.rb +12 -14
- data/lib/request_log_analyzer/output/fixed_width.rb +21 -28
- data/lib/request_log_analyzer/output/html.rb +11 -14
- data/lib/request_log_analyzer/request.rb +53 -33
- data/lib/request_log_analyzer/source.rb +2 -5
- data/lib/request_log_analyzer/source/log_parser.rb +9 -16
- data/lib/request_log_analyzer/tracker.rb +10 -12
- data/lib/request_log_analyzer/tracker/duration.rb +4 -6
- data/lib/request_log_analyzer/tracker/frequency.rb +9 -11
- data/lib/request_log_analyzer/tracker/hourly_spread.rb +8 -11
- data/lib/request_log_analyzer/tracker/numeric_value.rb +40 -44
- data/lib/request_log_analyzer/tracker/timespan.rb +5 -8
- data/lib/request_log_analyzer/tracker/traffic.rb +8 -10
- data/lib/request_log_analyzer/version.rb +1 -1
- data/request-log-analyzer.gemspec +6 -6
- data/spec/integration/command_line_usage_spec.rb +33 -33
- data/spec/integration/mailer_spec.rb +181 -185
- data/spec/integration/munin_plugins_rails_spec.rb +20 -20
- data/spec/integration/scout_spec.rb +40 -41
- data/spec/lib/helpers.rb +8 -9
- data/spec/lib/macros.rb +2 -4
- data/spec/lib/matchers.rb +20 -25
- data/spec/lib/mocks.rb +10 -11
- data/spec/lib/testing_format.rb +8 -10
- data/spec/spec_helper.rb +5 -1
- data/spec/unit/aggregator/database_inserter_spec.rb +23 -23
- data/spec/unit/aggregator/summarizer_spec.rb +7 -7
- data/spec/unit/controller/controller_spec.rb +14 -14
- data/spec/unit/controller/log_processor_spec.rb +3 -3
- data/spec/unit/database/base_class_spec.rb +36 -37
- data/spec/unit/database/connection_spec.rb +10 -10
- data/spec/unit/database/database_spec.rb +11 -11
- data/spec/unit/file_format/amazon_s3_format_spec.rb +66 -62
- data/spec/unit/file_format/apache_format_spec.rb +57 -52
- data/spec/unit/file_format/common_regular_expressions_spec.rb +18 -21
- data/spec/unit/file_format/delayed_job21_format_spec.rb +22 -16
- data/spec/unit/file_format/delayed_job2_format_spec.rb +22 -16
- data/spec/unit/file_format/delayed_job3_format_spec.rb +14 -10
- data/spec/unit/file_format/delayed_job4_format_spec.rb +14 -10
- data/spec/unit/file_format/delayed_job_format_spec.rb +12 -12
- data/spec/unit/file_format/file_format_api_spec.rb +19 -19
- data/spec/unit/file_format/format_autodetection_spec.rb +7 -7
- data/spec/unit/file_format/haproxy_format_spec.rb +53 -49
- data/spec/unit/file_format/inheritance_spec.rb +13 -0
- data/spec/unit/file_format/line_definition_spec.rb +35 -33
- data/spec/unit/file_format/merb_format_spec.rb +13 -11
- data/spec/unit/file_format/mysql_format_spec.rb +24 -24
- data/spec/unit/file_format/oink_format_spec.rb +29 -29
- data/spec/unit/file_format/postgresql_format_spec.rb +9 -9
- data/spec/unit/file_format/rack_format_spec.rb +36 -31
- data/spec/unit/file_format/rails3_format_spec.rb +46 -46
- data/spec/unit/file_format/rails_format_spec.rb +52 -53
- data/spec/unit/file_format/w3c_format_spec.rb +27 -24
- data/spec/unit/filter/anonymize_filter_spec.rb +7 -7
- data/spec/unit/filter/field_filter_spec.rb +26 -26
- data/spec/unit/filter/filter_spec.rb +4 -4
- data/spec/unit/filter/timespan_filter_spec.rb +22 -22
- data/spec/unit/mailer_spec.rb +21 -21
- data/spec/unit/request_spec.rb +29 -29
- data/spec/unit/source/log_parser_spec.rb +5 -5
- data/spec/unit/tracker/duration_tracker_spec.rb +23 -23
- data/spec/unit/tracker/frequency_tracker_spec.rb +29 -30
- data/spec/unit/tracker/hourly_spread_spec.rb +35 -35
- data/spec/unit/tracker/numeric_value_tracker_spec.rb +71 -72
- data/spec/unit/tracker/timespan_tracker_spec.rb +31 -31
- data/spec/unit/tracker/tracker_api_spec.rb +43 -44
- data/spec/unit/tracker/traffic_tracker_spec.rb +7 -7
- metadata +38 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91a5bda268facff9ef6d7ddb5ae9d4eec33a8d5c
|
4
|
+
data.tar.gz: f3683a5a70afba9f695016d304f91dfa7372b150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e582a48f76e38c28312077176975f7f83369b49152edbd741db1abc0636d518c520bd6471efe30e6a8a8313c3f7ab6b54cf9fadd240101345644bca804fba089
|
7
|
+
data.tar.gz: 3a9fb94f97e219dd3346d30d3da6361c329b5d4310f8e68eb8982d47a73093a9d729ed5b298fa00767b67aea38e4f65922f4a374f137b00e98717f67c3ee1b1f
|
data/.gitignore
CHANGED
data/bin/console
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- encoding : utf-8 -*-
|
3
|
+
$LOAD_PATH.unshift(File.expand_path('./../lib', File.dirname(__FILE__)))
|
4
|
+
#noinspection RubyResolve
|
5
|
+
require 'request_log_analyzer'
|
6
|
+
require 'irb'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
if __FILE__ == $0
|
10
|
+
IRB.start(__FILE__)
|
11
|
+
else # check -e option
|
12
|
+
if /\A-e\z/ =~ $0
|
13
|
+
IRB.start(__FILE__)
|
14
|
+
else
|
15
|
+
IRB.setup(__FILE__)
|
16
|
+
end
|
17
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module CommandLine
|
2
|
-
|
3
2
|
class Option
|
4
|
-
|
5
3
|
attr_reader :name, :alias
|
6
4
|
attr_reader :parameter_count
|
7
5
|
attr_reader :default_value
|
@@ -18,7 +16,7 @@ module CommandLine
|
|
18
16
|
def initialize(name, definition = {})
|
19
17
|
@name = CommandLine::Option.rewrite(name)
|
20
18
|
@alias = definition[:alias] ? definition[:alias].to_sym : nil
|
21
|
-
@required = definition.
|
19
|
+
@required = definition.key?(:required) && definition[:required] == true
|
22
20
|
@parameter_count = definition[:parameters] || 1
|
23
21
|
@multiple = definition[:multiple] || false
|
24
22
|
@default_value = definition[:default] || false
|
@@ -29,7 +27,7 @@ module CommandLine
|
|
29
27
|
return true
|
30
28
|
elsif @parameter_count == 1
|
31
29
|
parameter = arguments_parser.next_parameter
|
32
|
-
|
30
|
+
fail CommandLine::ParameterExpected, self if parameter.nil?
|
33
31
|
return parameter
|
34
32
|
elsif @parameter_count == :any
|
35
33
|
parameters = []
|
@@ -39,9 +37,9 @@ module CommandLine
|
|
39
37
|
return parameters
|
40
38
|
else
|
41
39
|
parameters = []
|
42
|
-
@parameter_count.times do |
|
40
|
+
@parameter_count.times do |_n|
|
43
41
|
parameter = arguments_parser.next_parameter
|
44
|
-
|
42
|
+
fail CommandLine::ParameterExpected, self if parameter.nil?
|
45
43
|
parameters << parameter
|
46
44
|
end
|
47
45
|
return parameters
|
@@ -87,10 +85,8 @@ module CommandLine
|
|
87
85
|
end
|
88
86
|
|
89
87
|
class Arguments
|
90
|
-
|
91
88
|
class Definition
|
92
|
-
|
93
|
-
ENDLESS_PARAMETERS = 99999
|
89
|
+
ENDLESS_PARAMETERS = 99_999
|
94
90
|
|
95
91
|
attr_reader :commands, :options, :parameters
|
96
92
|
|
@@ -103,10 +99,10 @@ module CommandLine
|
|
103
99
|
|
104
100
|
def [](option_name)
|
105
101
|
option_symbol = CommandLine::Option.rewrite(option_name)
|
106
|
-
if the_option = @options.
|
102
|
+
if the_option = @options.find { |(_, odef)| odef =~ option_symbol }
|
107
103
|
the_option[1]
|
108
104
|
else
|
109
|
-
|
105
|
+
fail CommandLine::UnknownOption, option_name
|
110
106
|
end
|
111
107
|
end
|
112
108
|
|
@@ -114,11 +110,9 @@ module CommandLine
|
|
114
110
|
@parameters = count_specifier..ENDLESS_PARAMETERS
|
115
111
|
end
|
116
112
|
|
117
|
-
|
118
|
-
@parameters = count_specifier
|
119
|
-
end
|
113
|
+
attr_writer :parameters
|
120
114
|
|
121
|
-
|
115
|
+
alias_method :files=, :parameters=
|
122
116
|
|
123
117
|
def option(name, options = {})
|
124
118
|
clo = CommandLine::Option.new(name, options)
|
@@ -126,10 +120,10 @@ module CommandLine
|
|
126
120
|
end
|
127
121
|
|
128
122
|
def switch(name, switch_alias = nil)
|
129
|
-
option(name, :
|
123
|
+
option(name, alias: switch_alias, parameters: 0)
|
130
124
|
end
|
131
125
|
|
132
|
-
def command(name, &
|
126
|
+
def command(name, &_block)
|
133
127
|
command_definition = Definition.new(self)
|
134
128
|
yield(command_definition) if block_given?
|
135
129
|
@commands[CommandLine::Option.rewrite(name)] = command_definition
|
@@ -140,7 +134,7 @@ module CommandLine
|
|
140
134
|
end
|
141
135
|
end
|
142
136
|
|
143
|
-
OPTION_REGEXP = /^\-\-([A-Za-z0-9-]+)
|
137
|
+
OPTION_REGEXP = /^\-\-([A-Za-z0-9-]+)$/
|
144
138
|
ALIASES_REGEXP = /^\-([A-Aa-z0-9]+)$/
|
145
139
|
|
146
140
|
attr_reader :definition
|
@@ -150,7 +144,7 @@ module CommandLine
|
|
150
144
|
def self.parse(tokens = $*, &block)
|
151
145
|
cla = Arguments.new
|
152
146
|
cla.define(&block)
|
153
|
-
|
147
|
+
cla.parse!(tokens)
|
154
148
|
end
|
155
149
|
|
156
150
|
def initialize
|
@@ -159,12 +153,12 @@ module CommandLine
|
|
159
153
|
@current_definition = @definition
|
160
154
|
end
|
161
155
|
|
162
|
-
def define(&
|
156
|
+
def define(&_block)
|
163
157
|
yield(@definition)
|
164
158
|
end
|
165
159
|
|
166
160
|
def [](option)
|
167
|
-
if the_option = @options.
|
161
|
+
if the_option = @options.find { |(key, _)| key =~ option }
|
168
162
|
the_option[1]
|
169
163
|
else
|
170
164
|
@current_definition[option].default_value
|
@@ -173,13 +167,13 @@ module CommandLine
|
|
173
167
|
|
174
168
|
def next_token
|
175
169
|
@current_token = @tokens.shift
|
176
|
-
|
170
|
+
@current_token
|
177
171
|
end
|
178
172
|
|
179
173
|
def next_parameter
|
180
174
|
parameter_candidate = @tokens.first
|
181
175
|
parameter = (parameter_candidate.nil? || OPTION_REGEXP =~ parameter_candidate || ALIASES_REGEXP =~ parameter_candidate) ? nil : @tokens.shift
|
182
|
-
|
176
|
+
parameter
|
183
177
|
end
|
184
178
|
|
185
179
|
def parse!(tokens)
|
@@ -200,8 +194,8 @@ module CommandLine
|
|
200
194
|
@command = CommandLine::Option.rewrite(@current_token)
|
201
195
|
else
|
202
196
|
case @current_token
|
203
|
-
when ALIASES_REGEXP
|
204
|
-
when OPTION_REGEXP
|
197
|
+
when ALIASES_REGEXP then handle_alias_expansion(Regexp.last_match[1])
|
198
|
+
when OPTION_REGEXP then handle_option(Regexp.last_match[1])
|
205
199
|
else; handle_other_parameter(@current_token)
|
206
200
|
end
|
207
201
|
@first_token = false
|
@@ -211,24 +205,24 @@ module CommandLine
|
|
211
205
|
|
212
206
|
validate_arguments!
|
213
207
|
|
214
|
-
|
208
|
+
self
|
215
209
|
end
|
216
210
|
|
217
211
|
protected
|
218
212
|
|
219
213
|
def prepare_result!
|
220
|
-
multiple_options = Hash[*@current_definition.options.select { |
|
221
|
-
multiple_options.each { |
|
214
|
+
multiple_options = Hash[*@current_definition.options.select { |_name, o| o.multiple? }.flatten]
|
215
|
+
multiple_options.each { |_name, definition| @options[definition] = [] }
|
222
216
|
end
|
223
217
|
|
224
218
|
def validate_arguments!
|
225
219
|
if @current_definition.parameters && !(@current_definition.parameters === @parameters.length)
|
226
|
-
|
220
|
+
fail CommandLine::ParametersOutOfRange.new(@current_definition.parameters, @parameters.length)
|
227
221
|
end
|
228
222
|
|
229
|
-
required_options = Hash[*@current_definition.options.select { |
|
223
|
+
required_options = Hash[*@current_definition.options.select { |_name, o| o.required? }.flatten]
|
230
224
|
required_options.each do |name, definition|
|
231
|
-
|
225
|
+
fail CommandLine::RequiredOptionMissing, definition unless self[name]
|
232
226
|
end
|
233
227
|
end
|
234
228
|
|
@@ -237,7 +231,7 @@ module CommandLine
|
|
237
231
|
if option_definition = @current_definition[alias_char]
|
238
232
|
@tokens.unshift(option_definition.to_option)
|
239
233
|
else
|
240
|
-
|
234
|
+
fail CommandLine::UnknownOption, alias_char
|
241
235
|
end
|
242
236
|
end
|
243
237
|
end
|
@@ -248,7 +242,7 @@ module CommandLine
|
|
248
242
|
|
249
243
|
def handle_option(option_name)
|
250
244
|
option_definition = @current_definition[option_name]
|
251
|
-
|
245
|
+
fail CommandLine::UnknownOption, option_name if option_definition.nil?
|
252
246
|
|
253
247
|
if option_definition.multiple?
|
254
248
|
@options[option_definition] << option_definition.parse(self)
|
@@ -256,7 +250,6 @@ module CommandLine
|
|
256
250
|
@options[option_definition] = option_definition.parse(self)
|
257
251
|
end
|
258
252
|
end
|
259
|
-
|
260
253
|
end
|
261
254
|
|
262
255
|
# Commandline parsing errors and exceptions
|
@@ -273,7 +266,7 @@ module CommandLine
|
|
273
266
|
# Missing a required file
|
274
267
|
class ParametersOutOfRange < CommandLine::Error
|
275
268
|
def initialize(expected, actual)
|
276
|
-
if expected.
|
269
|
+
if expected.is_a?(Range)
|
277
270
|
if expected.end == CommandLine::Arguments::Definition::ENDLESS_PARAMETERS
|
278
271
|
super("The command expected at least #{expected.begin} parameters, but found #{actual}!")
|
279
272
|
else
|
@@ -298,4 +291,4 @@ module CommandLine
|
|
298
291
|
super("#{option_identifier.inspect} not recognized as a valid option!")
|
299
292
|
end
|
300
293
|
end
|
301
|
-
end
|
294
|
+
end
|
data/lib/cli/database_console.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class DatabaseConsole
|
2
|
-
|
3
2
|
IRB = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
3
|
|
5
4
|
def initialize(arguments)
|
@@ -7,7 +6,7 @@ class DatabaseConsole
|
|
7
6
|
end
|
8
7
|
|
9
8
|
def run!
|
10
|
-
libraries = ['irb/completion', 'rubygems','cli/database_console_init']
|
9
|
+
libraries = ['irb/completion', 'rubygems', 'cli/database_console_init']
|
11
10
|
libaries_string = libraries.map { |l| "-r #{l}" }.join(' ')
|
12
11
|
|
13
12
|
ENV['RLA_DBCONSOLE_DATABASE'] = @arguments[:database]
|
@@ -22,4 +21,3 @@ class DatabaseConsole
|
|
22
21
|
exec("#{IRB} #{libaries_string} --simple-prompt")
|
23
22
|
end
|
24
23
|
end
|
25
|
-
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Setup the include path
|
2
|
-
|
2
|
+
$LOAD_PATH.unshift(File.expand_path('..', File.dirname(__FILE__)))
|
3
3
|
require 'request_log_analyzer'
|
4
4
|
require 'request_log_analyzer/database'
|
5
5
|
|
@@ -9,9 +9,9 @@ $database.register_default_orm_classes!
|
|
9
9
|
|
10
10
|
require 'cli/tools'
|
11
11
|
|
12
|
-
def wordwrap(string, max = 80, indent =
|
13
|
-
strings = [
|
14
|
-
string.split(
|
12
|
+
def wordwrap(string, max = 80, indent = '')
|
13
|
+
strings = ['']
|
14
|
+
string.split(', ').each do |item|
|
15
15
|
if strings.last.length == 0 || strings.last.length + item.length <= max
|
16
16
|
strings.last << item << ', '
|
17
17
|
else
|
@@ -28,9 +28,9 @@ class Request
|
|
28
28
|
|
29
29
|
inspected_lines = lines.map do |line|
|
30
30
|
inspect_line = " - #{line.line_type} (line #{line.lineno})"
|
31
|
-
if (inspect_attributes = line.attributes.reject { |(k,
|
32
|
-
inspect_attributes = inspect_attributes.map { |(k,v)| "#{k} = #{v.inspect}" }.join(', ')
|
33
|
-
inspect_line << "\n " + wordwrap(inspect_attributes, CommandLine::Tools.terminal_width - 6,
|
31
|
+
if (inspect_attributes = line.attributes.reject { |(k, _v)| [:id, :source_id, :request_id, :lineno].include?(k.to_sym) }).any?
|
32
|
+
inspect_attributes = inspect_attributes.map { |(k, v)| "#{k} = #{v.inspect}" }.join(', ')
|
33
|
+
inspect_line << "\n " + wordwrap(inspect_attributes, CommandLine::Tools.terminal_width - 6, ' ')
|
34
34
|
end
|
35
35
|
inspect_line
|
36
36
|
end
|
@@ -39,7 +39,7 @@ class Request
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
puts
|
43
|
-
puts
|
44
|
-
puts
|
45
|
-
puts $database.orm_classes.map { |k| k.name.split('::').last }.join(
|
42
|
+
puts 'request-log-analyzer database console'
|
43
|
+
puts '-------------------------------------'
|
44
|
+
puts 'The following ActiveRecord classes are available:'
|
45
|
+
puts $database.orm_classes.map { |k| k.name.split('::').last }.join(', ')
|
data/lib/cli/progressbar.rb
CHANGED
@@ -10,9 +10,9 @@
|
|
10
10
|
|
11
11
|
module CommandLine
|
12
12
|
class ProgressBar
|
13
|
-
VERSION =
|
13
|
+
VERSION = '0.9'
|
14
14
|
|
15
|
-
def initialize
|
15
|
+
def initialize(title, total, out = STDERR)
|
16
16
|
@title = title
|
17
17
|
@total = total
|
18
18
|
@out = out
|
@@ -30,17 +30,18 @@ module CommandLine
|
|
30
30
|
show
|
31
31
|
end
|
32
32
|
|
33
|
-
attr_reader
|
34
|
-
attr_reader
|
35
|
-
attr_reader
|
33
|
+
attr_reader :title
|
34
|
+
attr_reader :current
|
35
|
+
attr_reader :total
|
36
36
|
attr_accessor :start_time
|
37
37
|
|
38
38
|
private
|
39
|
+
|
39
40
|
def fmt_bar
|
40
41
|
bar_width = do_percentage * @terminal_width / 100
|
41
|
-
sprintf(
|
42
|
+
sprintf('[%s%s]',
|
42
43
|
@bar_mark * bar_width,
|
43
|
-
|
44
|
+
' ' * (@terminal_width - bar_width))
|
44
45
|
end
|
45
46
|
|
46
47
|
def fmt_percentage
|
@@ -53,59 +54,59 @@ module CommandLine
|
|
53
54
|
|
54
55
|
def fmt_stat_for_file_transfer
|
55
56
|
if @finished_p then
|
56
|
-
sprintf(
|
57
|
+
sprintf('%s %s %s', bytes, transfer_rate, elapsed)
|
57
58
|
else
|
58
|
-
sprintf(
|
59
|
+
sprintf('%s %s %s', bytes, transfer_rate, eta)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
62
63
|
def fmt_title
|
63
|
-
@title[0,(@title_width - 1)] +
|
64
|
+
@title[0, (@title_width - 1)] + ':'
|
64
65
|
end
|
65
66
|
|
66
|
-
def convert_bytes
|
67
|
+
def convert_bytes(bytes)
|
67
68
|
if bytes < 1024
|
68
|
-
sprintf(
|
69
|
+
sprintf('%6dB', bytes)
|
69
70
|
elsif bytes < 1024 * 1000 # 1000kb
|
70
|
-
sprintf(
|
71
|
+
sprintf('%5.1fKB', bytes.to_f / 1024)
|
71
72
|
elsif bytes < 1024 * 1024 * 1000 # 1000mb
|
72
|
-
sprintf(
|
73
|
+
sprintf('%5.1fMB', bytes.to_f / 1024 / 1024)
|
73
74
|
else
|
74
|
-
sprintf(
|
75
|
+
sprintf('%5.1fGB', bytes.to_f / 1024 / 1024 / 1024)
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
78
79
|
def transfer_rate
|
79
80
|
bytes_per_second = @current.to_f / (Time.now - @start_time)
|
80
|
-
sprintf(
|
81
|
+
sprintf('%s/s', convert_bytes(bytes_per_second))
|
81
82
|
end
|
82
83
|
|
83
84
|
def bytes
|
84
85
|
convert_bytes(@current)
|
85
86
|
end
|
86
87
|
|
87
|
-
def format_time
|
88
|
+
def format_time(t)
|
88
89
|
t = t.to_i
|
89
90
|
sec = t % 60
|
90
91
|
min = (t / 60) % 60
|
91
92
|
hour = t / 3600
|
92
|
-
sprintf(
|
93
|
+
sprintf('%02d:%02d:%02d', hour, min, sec)
|
93
94
|
end
|
94
95
|
|
95
96
|
# ETA stands for Estimated Time of Arrival.
|
96
97
|
def eta
|
97
98
|
if @current == 0
|
98
|
-
|
99
|
+
'ETA: --:--:--'
|
99
100
|
else
|
100
101
|
elapsed = Time.now - @start_time
|
101
|
-
eta = elapsed * @total / @current - elapsed
|
102
|
-
sprintf(
|
102
|
+
eta = elapsed * @total / @current - elapsed
|
103
|
+
sprintf('ETA: %s', format_time(eta))
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
106
107
|
def elapsed
|
107
108
|
elapsed = Time.now - @start_time
|
108
|
-
sprintf(
|
109
|
+
sprintf('Time: %s', format_time(elapsed))
|
109
110
|
end
|
110
111
|
|
111
112
|
def eol
|
@@ -122,7 +123,7 @@ module CommandLine
|
|
122
123
|
|
123
124
|
def show
|
124
125
|
arguments = @format_arguments.map do |method|
|
125
|
-
method = sprintf(
|
126
|
+
method = sprintf('fmt_%s', method)
|
126
127
|
send(method)
|
127
128
|
end
|
128
129
|
line = sprintf(@format, *arguments)
|
@@ -158,9 +159,10 @@ module CommandLine
|
|
158
159
|
end
|
159
160
|
|
160
161
|
public
|
162
|
+
|
161
163
|
def clear
|
162
164
|
@out.print "\r"
|
163
|
-
@out.print(
|
165
|
+
@out.print(' ' * (CommandLine::Tools.terminal_width(80) - 1))
|
164
166
|
@out.print "\r"
|
165
167
|
end
|
166
168
|
|
@@ -178,27 +180,23 @@ module CommandLine
|
|
178
180
|
@format_arguments = [:title, :percentage, :bar, :stat_for_file_transfer]
|
179
181
|
end
|
180
182
|
|
181
|
-
|
182
|
-
@format = format
|
183
|
-
end
|
183
|
+
attr_writer :format
|
184
184
|
|
185
|
-
|
186
|
-
@format_arguments = arguments
|
187
|
-
end
|
185
|
+
attr_writer :format_arguments
|
188
186
|
|
189
187
|
def halt
|
190
188
|
@finished_p = true
|
191
189
|
show
|
192
190
|
end
|
193
191
|
|
194
|
-
def inc
|
192
|
+
def inc(step = 1)
|
195
193
|
@current += step
|
196
194
|
@current = @total if @current > @total
|
197
195
|
show_if_needed
|
198
196
|
@previous = @current
|
199
197
|
end
|
200
198
|
|
201
|
-
def set
|
199
|
+
def set(count)
|
202
200
|
count = 0 if count < 0
|
203
201
|
count = @total if count > @total
|
204
202
|
|