request-log-analyzer 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/request-log-analyzer +9 -5
- data/lib/request_log_analyzer.rb +1 -1
- data/lib/request_log_analyzer/aggregator/echo.rb +2 -1
- data/lib/request_log_analyzer/aggregator/summarizer.rb +5 -37
- data/lib/request_log_analyzer/controller.rb +4 -3
- data/lib/request_log_analyzer/file_format.rb +68 -1
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +3 -1
- data/lib/request_log_analyzer/file_format/apache.rb +7 -2
- data/lib/request_log_analyzer/file_format/merb.rb +3 -1
- data/lib/request_log_analyzer/file_format/mysql.rb +10 -5
- data/lib/request_log_analyzer/file_format/rack.rb +1 -3
- data/lib/request_log_analyzer/file_format/rails.rb +5 -5
- data/lib/request_log_analyzer/output.rb +4 -0
- data/lib/request_log_analyzer/output/fancy_html.rb +31 -0
- data/lib/request_log_analyzer/tracker.rb +0 -105
- data/lib/request_log_analyzer/tracker/duration.rb +3 -62
- data/lib/request_log_analyzer/tracker/frequency.rb +18 -5
- data/lib/request_log_analyzer/tracker/numeric_value.rb +223 -0
- data/lib/request_log_analyzer/tracker/traffic.rb +6 -72
- data/request-log-analyzer.gemspec +4 -4
- data/spec/lib/mocks.rb +1 -0
- data/spec/unit/file_format/common_regular_expressions_spec.rb +53 -0
- data/spec/unit/file_format/mysql_format_spec.rb +1 -2
- data/spec/unit/file_format/rails_format_spec.rb +9 -4
- data/spec/unit/tracker/duration_tracker_spec.rb +2 -83
- data/spec/unit/tracker/{count_tracker_spec.rb → numeric_value_tracker_spec.rb} +50 -7
- data/spec/unit/tracker/tracker_api_spec.rb +3 -2
- data/spec/unit/tracker/traffic_tracker_spec.rb +0 -79
- metadata +8 -5
- data/lib/request_log_analyzer/tracker/count.rb +0 -93
@@ -1,93 +0,0 @@
|
|
1
|
-
module RequestLogAnalyzer::Tracker
|
2
|
-
|
3
|
-
# Get highest count of a specific attribute
|
4
|
-
class Count < Base
|
5
|
-
|
6
|
-
include RequestLogAnalyzer::Tracker::StatisticsTracking
|
7
|
-
|
8
|
-
attr_reader :categories
|
9
|
-
|
10
|
-
def prepare
|
11
|
-
raise "No categorizer set up for category tracker #{self.inspect}" unless options[:category]
|
12
|
-
raise "No field to count has been set up #{self.inspect}" unless options[:field]
|
13
|
-
|
14
|
-
@categorizer = create_lambda(options[:category])
|
15
|
-
@counter = create_lambda(options[:field])
|
16
|
-
@categories = {}
|
17
|
-
end
|
18
|
-
|
19
|
-
# Get the duration information fron the request and store it in the different categories.
|
20
|
-
# <tt>request</tt> The request.
|
21
|
-
def update(request)
|
22
|
-
category = @categorizer.call(request)
|
23
|
-
count = @counter.call(request)
|
24
|
-
update_statistics(category, count) if count.kind_of?(Numeric) && !category.nil?
|
25
|
-
end
|
26
|
-
|
27
|
-
def report(output)
|
28
|
-
sortings = output.options[:sort] || [:sum, :mean]
|
29
|
-
|
30
|
-
sortings.each do |report|
|
31
|
-
case report
|
32
|
-
when :mean
|
33
|
-
report_table(output, :mean, :title => "#{title} - sorted by mean")
|
34
|
-
when :stddev
|
35
|
-
report_table(output, :stddev, :title => "#{title} - sorted by standard deviation")
|
36
|
-
when :sum
|
37
|
-
report_table(output, :sum, :title => "#{title} - sorted by sum")
|
38
|
-
when :hits
|
39
|
-
report_table(output, :hits, :title => "#{title} - sorted by hits")
|
40
|
-
else
|
41
|
-
raise "Unknown duration report specified: #{report}!"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Block function to build a result table using a provided sorting function.
|
47
|
-
# <tt>output</tt> The output object.
|
48
|
-
# <tt>amount</tt> The number of rows in the report table (default 10).
|
49
|
-
# === Options
|
50
|
-
# * </tt>:title</tt> The title of the table
|
51
|
-
# * </tt>:sort</tt> The key to sort on (:hits, :cumulative, :average, :min or :max)
|
52
|
-
def report_table(output, sort, options = {}, &block)
|
53
|
-
output.puts
|
54
|
-
|
55
|
-
top_categories = output.slice_results(sorted_by(sort))
|
56
|
-
output.with_style(:top_line => true) do
|
57
|
-
output.table(*statistics_header(:title => options[:title],:highlight => sort)) do |rows|
|
58
|
-
top_categories.each { |(cat, info)| rows.push(statistics_row(cat)) }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
output.puts
|
62
|
-
end
|
63
|
-
|
64
|
-
# Format an int to a nice string with decimal seperation.
|
65
|
-
# Also see http://en.wikipedia.org/wiki/Terabyte
|
66
|
-
# <tt>count</tt> the value to reduce
|
67
|
-
def display_value(count)
|
68
|
-
return "- " if count.nil?
|
69
|
-
return "0 " if count.zero?
|
70
|
-
|
71
|
-
case Math.log10(count).floor
|
72
|
-
when 1...4 then '%d ' % count
|
73
|
-
when 4...7 then '%dk' % (count / 1000)
|
74
|
-
when 7...10 then '%dM' % (count / 1000_000)
|
75
|
-
when 10...13 then '%dG' % (count / 1000_000_000)
|
76
|
-
when 13...16 then '%dT' % (count / 1000_000_000_000)
|
77
|
-
else '%dP' % (count / 1000_000_000_000_000)
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
# Returns the title of this tracker for reports
|
83
|
-
def title
|
84
|
-
options[:title] || 'Total'
|
85
|
-
end
|
86
|
-
|
87
|
-
# Returns all the categories and the tracked duration as a hash than can be exported to YAML
|
88
|
-
def to_yaml_object
|
89
|
-
return nil if @categories.empty?
|
90
|
-
@categories
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|