ngmoco-request-log-analyzer 1.4.2
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/.gitignore +10 -0
- data/DESIGN.rdoc +41 -0
- data/LICENSE +20 -0
- data/README.rdoc +39 -0
- data/Rakefile +8 -0
- data/bin/request-log-analyzer +114 -0
- data/lib/cli/command_line_arguments.rb +301 -0
- data/lib/cli/database_console.rb +26 -0
- data/lib/cli/database_console_init.rb +43 -0
- data/lib/cli/progressbar.rb +213 -0
- data/lib/cli/tools.rb +46 -0
- data/lib/request_log_analyzer.rb +44 -0
- data/lib/request_log_analyzer/aggregator.rb +49 -0
- data/lib/request_log_analyzer/aggregator/database_inserter.rb +83 -0
- data/lib/request_log_analyzer/aggregator/echo.rb +29 -0
- data/lib/request_log_analyzer/aggregator/summarizer.rb +175 -0
- data/lib/request_log_analyzer/controller.rb +332 -0
- data/lib/request_log_analyzer/database.rb +102 -0
- data/lib/request_log_analyzer/database/base.rb +115 -0
- data/lib/request_log_analyzer/database/connection.rb +38 -0
- data/lib/request_log_analyzer/database/request.rb +22 -0
- data/lib/request_log_analyzer/database/source.rb +13 -0
- data/lib/request_log_analyzer/database/warning.rb +14 -0
- data/lib/request_log_analyzer/file_format.rb +160 -0
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +71 -0
- data/lib/request_log_analyzer/file_format/apache.rb +141 -0
- data/lib/request_log_analyzer/file_format/merb.rb +67 -0
- data/lib/request_log_analyzer/file_format/rack.rb +11 -0
- data/lib/request_log_analyzer/file_format/rails.rb +176 -0
- data/lib/request_log_analyzer/file_format/rails_development.rb +12 -0
- data/lib/request_log_analyzer/filter.rb +30 -0
- data/lib/request_log_analyzer/filter/anonymize.rb +39 -0
- data/lib/request_log_analyzer/filter/field.rb +42 -0
- data/lib/request_log_analyzer/filter/timespan.rb +45 -0
- data/lib/request_log_analyzer/line_definition.rb +111 -0
- data/lib/request_log_analyzer/log_processor.rb +99 -0
- data/lib/request_log_analyzer/mailer.rb +62 -0
- data/lib/request_log_analyzer/output.rb +113 -0
- data/lib/request_log_analyzer/output/fixed_width.rb +220 -0
- data/lib/request_log_analyzer/output/html.rb +184 -0
- data/lib/request_log_analyzer/request.rb +175 -0
- data/lib/request_log_analyzer/source.rb +72 -0
- data/lib/request_log_analyzer/source/database_loader.rb +87 -0
- data/lib/request_log_analyzer/source/log_parser.rb +274 -0
- data/lib/request_log_analyzer/tracker.rb +206 -0
- data/lib/request_log_analyzer/tracker/duration.rb +104 -0
- data/lib/request_log_analyzer/tracker/frequency.rb +95 -0
- data/lib/request_log_analyzer/tracker/hourly_spread.rb +107 -0
- data/lib/request_log_analyzer/tracker/timespan.rb +81 -0
- data/lib/request_log_analyzer/tracker/traffic.rb +106 -0
- data/request-log-analyzer.gemspec +40 -0
- data/spec/database.yml +23 -0
- data/spec/fixtures/apache_combined.log +5 -0
- data/spec/fixtures/apache_common.log +10 -0
- data/spec/fixtures/decompression.log +12 -0
- data/spec/fixtures/decompression.log.bz2 +0 -0
- data/spec/fixtures/decompression.log.gz +0 -0
- data/spec/fixtures/decompression.log.zip +0 -0
- data/spec/fixtures/decompression.tar.gz +0 -0
- data/spec/fixtures/decompression.tgz +0 -0
- data/spec/fixtures/header_and_footer.log +6 -0
- data/spec/fixtures/merb.log +84 -0
- data/spec/fixtures/merb_prefixed.log +9 -0
- data/spec/fixtures/multiple_files_1.log +5 -0
- data/spec/fixtures/multiple_files_2.log +2 -0
- data/spec/fixtures/rails.db +0 -0
- data/spec/fixtures/rails_1x.log +59 -0
- data/spec/fixtures/rails_22.log +12 -0
- data/spec/fixtures/rails_22_cached.log +10 -0
- data/spec/fixtures/rails_unordered.log +24 -0
- data/spec/fixtures/syslog_1x.log +5 -0
- data/spec/fixtures/test_file_format.log +13 -0
- data/spec/fixtures/test_language_combined.log +14 -0
- data/spec/fixtures/test_order.log +16 -0
- data/spec/integration/command_line_usage_spec.rb +84 -0
- data/spec/integration/munin_plugins_rails_spec.rb +58 -0
- data/spec/integration/scout_spec.rb +151 -0
- data/spec/lib/helpers.rb +52 -0
- data/spec/lib/macros.rb +18 -0
- data/spec/lib/matchers.rb +77 -0
- data/spec/lib/mocks.rb +76 -0
- data/spec/lib/testing_format.rb +46 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/unit/aggregator/database_inserter_spec.rb +93 -0
- data/spec/unit/aggregator/summarizer_spec.rb +26 -0
- data/spec/unit/controller/controller_spec.rb +41 -0
- data/spec/unit/controller/log_processor_spec.rb +18 -0
- data/spec/unit/database/base_class_spec.rb +183 -0
- data/spec/unit/database/connection_spec.rb +34 -0
- data/spec/unit/database/database_spec.rb +133 -0
- data/spec/unit/file_format/amazon_s3_format_spec.rb +49 -0
- data/spec/unit/file_format/apache_format_spec.rb +203 -0
- data/spec/unit/file_format/file_format_api_spec.rb +69 -0
- data/spec/unit/file_format/line_definition_spec.rb +75 -0
- data/spec/unit/file_format/merb_format_spec.rb +52 -0
- data/spec/unit/file_format/rails_format_spec.rb +164 -0
- data/spec/unit/filter/anonymize_filter_spec.rb +21 -0
- data/spec/unit/filter/field_filter_spec.rb +66 -0
- data/spec/unit/filter/filter_spec.rb +17 -0
- data/spec/unit/filter/timespan_filter_spec.rb +58 -0
- data/spec/unit/mailer_spec.rb +30 -0
- data/spec/unit/request_spec.rb +111 -0
- data/spec/unit/source/log_parser_spec.rb +119 -0
- data/spec/unit/tracker/duration_tracker_spec.rb +130 -0
- data/spec/unit/tracker/frequency_tracker_spec.rb +88 -0
- data/spec/unit/tracker/hourly_spread_spec.rb +79 -0
- data/spec/unit/tracker/timespan_tracker_spec.rb +73 -0
- data/spec/unit/tracker/tracker_api_spec.rb +124 -0
- data/spec/unit/tracker/traffic_tracker_spec.rb +107 -0
- data/tasks/github-gem.rake +323 -0
- data/tasks/request_log_analyzer.rake +26 -0
- metadata +220 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module RequestLogAnalyzer::Tracker
|
|
2
|
+
|
|
3
|
+
# Determines the datetime of the first request and the last request
|
|
4
|
+
# Also determines the amount of days inbetween these.
|
|
5
|
+
#
|
|
6
|
+
# Accepts the following options:
|
|
7
|
+
# * <tt>:field</tt> The timestamp field that is looked at. Defaults to :timestamp.
|
|
8
|
+
# * <tt>:if</tt> Proc that has to return !nil for a request to be passed to the tracker.
|
|
9
|
+
# * <tt>:line_type</tt> The line type that contains the duration field (determined by the category proc).
|
|
10
|
+
# * <tt>:title</tt> Title do be displayed above the report.
|
|
11
|
+
# * <tt>:unless</tt> Proc that has to return nil for a request to be passed to the tracker.
|
|
12
|
+
#
|
|
13
|
+
# Expects the following items in the update request hash
|
|
14
|
+
# * <tt>:timestamp</tt> in YYYYMMDDHHMMSS format.
|
|
15
|
+
#
|
|
16
|
+
# Example output:
|
|
17
|
+
# First request: 2008-07-13 06:25:06
|
|
18
|
+
# Last request: 2008-07-20 06:18:06
|
|
19
|
+
# Total time analyzed: 7 days
|
|
20
|
+
class Timespan < Base
|
|
21
|
+
|
|
22
|
+
attr_reader :first, :last
|
|
23
|
+
|
|
24
|
+
# Check if timestamp field is set in the options.
|
|
25
|
+
def prepare
|
|
26
|
+
options[:field] ||= :timestamp
|
|
27
|
+
@first, @last = 99999999999999, 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Check if the timestamp in the request and store it.
|
|
31
|
+
# <tt>request</tt> The request.
|
|
32
|
+
def update(request)
|
|
33
|
+
timestamp = request[options[:field]]
|
|
34
|
+
@first = timestamp if timestamp < @first
|
|
35
|
+
@last = timestamp if timestamp > @last
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# First timestamp encountered
|
|
39
|
+
def first_timestamp
|
|
40
|
+
DateTime.parse(@first.to_s, '%Y%m%d%H%M%S') rescue nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Last timestamp encountered
|
|
44
|
+
def last_timestamp
|
|
45
|
+
DateTime.parse(@last.to_s, '%Y%m%d%H%M%S') rescue nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Difference between last and first timestamp.
|
|
49
|
+
def timespan
|
|
50
|
+
last_timestamp - first_timestamp
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Generate an hourly spread report to the given output object.
|
|
54
|
+
# Any options for the report should have been set during initialize.
|
|
55
|
+
# <tt>output</tt> The output object
|
|
56
|
+
def report(output)
|
|
57
|
+
output.title(options[:title]) if options[:title]
|
|
58
|
+
|
|
59
|
+
if @last > 0 && @first < 99999999999999
|
|
60
|
+
output.with_style(:cell_separator => false) do
|
|
61
|
+
output.table({:width => 20}, {}) do |rows|
|
|
62
|
+
rows << ['First request:', first_timestamp.strftime('%Y-%m-%d %H:%M:%I')]
|
|
63
|
+
rows << ['Last request:', last_timestamp.strftime('%Y-%m-%d %H:%M:%I')]
|
|
64
|
+
rows << ['Total time analyzed:', "#{timespan.ceil} days"]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Returns the title of this tracker for reports
|
|
71
|
+
def title
|
|
72
|
+
options[:title] || 'Request timespan'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# A hash that can be exported to YAML with the first and last timestamp encountered.
|
|
76
|
+
def to_yaml_object
|
|
77
|
+
{ :first => first_timestamp, :last =>last_timestamp }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
module RequestLogAnalyzer::Tracker
|
|
2
|
+
|
|
3
|
+
# Analyze the average and total traffic of requests
|
|
4
|
+
#
|
|
5
|
+
# === Options
|
|
6
|
+
# * <tt>:category</tt> Proc that handles request categorization for given fileformat (REQUEST_CATEGORIZER)
|
|
7
|
+
# * <tt>:traffic</tt> The field containing the duration in the request hash.
|
|
8
|
+
# * <tt>:if</tt> Proc that has to return !nil for a request to be passed to the tracker.
|
|
9
|
+
# * <tt>:line_type</tt> The line type that contains the duration field (determined by the category proc).
|
|
10
|
+
# * <tt>:title</tt> Title do be displayed above the report
|
|
11
|
+
# * <tt>:unless</tt> Handle request if this proc is false for the handled request.
|
|
12
|
+
class Traffic < Base
|
|
13
|
+
|
|
14
|
+
attr_reader :categories
|
|
15
|
+
|
|
16
|
+
include RequestLogAnalyzer::Tracker::StatisticsTracking
|
|
17
|
+
|
|
18
|
+
# Check if duration and catagory option have been received,
|
|
19
|
+
def prepare
|
|
20
|
+
raise "No traffic field set up for category tracker #{self.inspect}" unless options[:traffic]
|
|
21
|
+
raise "No categorizer set up for duration tracker #{self.inspect}" unless options[:category]
|
|
22
|
+
|
|
23
|
+
@categorizer = create_lambda(options[:category])
|
|
24
|
+
@trafficizer = create_lambda(options[:traffic])
|
|
25
|
+
@categories = {}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Get the duration information from the request and store it in the different categories.
|
|
30
|
+
# <tt>request</tt> The request.
|
|
31
|
+
def update(request)
|
|
32
|
+
category = @categorizer.call(request)
|
|
33
|
+
traffic = @trafficizer.call(request)
|
|
34
|
+
update_statistics(category, traffic) if traffic.kind_of?(Numeric) && !category.nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Block function to build a result table using a provided sorting function.
|
|
38
|
+
# <tt>output</tt> The output object.
|
|
39
|
+
# <tt>amount</tt> The number of rows in the report table (default 10).
|
|
40
|
+
# === Options
|
|
41
|
+
# * </tt>:title</tt> The title of the table
|
|
42
|
+
# * </tt>:sort</tt> The key to sort on (:hits, :cumulative, :average, :min or :max)
|
|
43
|
+
def report_table(output, sort, options = {}, &block)
|
|
44
|
+
output.puts
|
|
45
|
+
|
|
46
|
+
top_categories = output.slice_results(sorted_by(sort))
|
|
47
|
+
output.with_style(:top_line => true) do
|
|
48
|
+
output.table(*statistics_header(:title => options[:title],:highlight => sort)) do |rows|
|
|
49
|
+
top_categories.each { |(cat, info)| rows.push(statistics_row(cat)) }
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
output.puts
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Formats the traffic number using x B/kB/MB/GB etc notation
|
|
56
|
+
def display_value(bytes)
|
|
57
|
+
return "-" if bytes.nil?
|
|
58
|
+
return "0 B" if bytes.zero?
|
|
59
|
+
case Math.log10(bytes).floor
|
|
60
|
+
when 1...4 then '%d B' % bytes
|
|
61
|
+
when 4...7 then '%d kB' % (bytes / 1000)
|
|
62
|
+
when 7...10 then '%d MB' % (bytes / 1000_000)
|
|
63
|
+
when 10...13 then '%d GB' % (bytes / 1000_000_000)
|
|
64
|
+
else '%d TB' % (bytes / 1000_000_000_000)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Generate a request duration report to the given output object
|
|
69
|
+
# By default colulative and average duration are generated.
|
|
70
|
+
# Any options for the report should have been set during initialize.
|
|
71
|
+
# <tt>output</tt> The output object
|
|
72
|
+
def report(output)
|
|
73
|
+
|
|
74
|
+
sortings = output.options[:sort] || [:sum, :mean]
|
|
75
|
+
|
|
76
|
+
sortings.each do |report|
|
|
77
|
+
case report
|
|
78
|
+
when :mean
|
|
79
|
+
report_table(output, :mean, :title => "#{title} - sorted by mean")
|
|
80
|
+
when :stddev
|
|
81
|
+
report_table(output, :stddev, :title => "#{title} - sorted by standard deviation")
|
|
82
|
+
when :sum
|
|
83
|
+
report_table(output, :sum, :title => "#{title} - sorted by sum")
|
|
84
|
+
when :hits
|
|
85
|
+
report_table(output, :hits, :title => "#{title} - sorted by hits")
|
|
86
|
+
else
|
|
87
|
+
raise "Unknown duration report specified: #{report}!"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
output.puts
|
|
92
|
+
output.puts "#{output.colorize(title, :white, :bold)} - observed total: " + output.colorize(display_value(sum_overall), :brown, :bold)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Returns the title of this tracker for reports
|
|
96
|
+
def title
|
|
97
|
+
options[:title] || 'Request traffic'
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Returns all the categories and the tracked duration as a hash than can be exported to YAML
|
|
101
|
+
def to_yaml_object
|
|
102
|
+
return nil if @categories.empty?
|
|
103
|
+
@categories
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.name = "ngmoco-request-log-analyzer"
|
|
3
|
+
|
|
4
|
+
# Do not set the version and date field manually, this is done by the release script
|
|
5
|
+
s.version = "1.4.2"
|
|
6
|
+
s.date = "2009-10-08"
|
|
7
|
+
|
|
8
|
+
s.rubyforge_project = 'r-l-a'
|
|
9
|
+
|
|
10
|
+
s.bindir = 'bin'
|
|
11
|
+
s.executables = ['request-log-analyzer']
|
|
12
|
+
s.default_executable = 'request-log-analyzer'
|
|
13
|
+
|
|
14
|
+
s.summary = "A command line tool to analyze request logs for Apache, Rails, Merb and other web application servers"
|
|
15
|
+
s.description = <<-eos
|
|
16
|
+
Request log analyzer's purpose is to find ot how your web application is being used and to focus your optimization efforts.
|
|
17
|
+
This tool will parse all requests in the application's log file and aggregate the information. Once it is finished parsing
|
|
18
|
+
the log file(s), it will show the requests that take op most server time using various metrics. It can also insert all
|
|
19
|
+
parsed request information into a database so you can roll your own analysis. It supports Rails- and Merb-based applications
|
|
20
|
+
and Apache access log files out of the box, but file formats of other applications can easily be supported by supplying an
|
|
21
|
+
easy to write log file format definition.
|
|
22
|
+
eos
|
|
23
|
+
|
|
24
|
+
s.rdoc_options << '--title' << s.name << '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
|
|
25
|
+
s.extra_rdoc_files = ['README.rdoc']
|
|
26
|
+
|
|
27
|
+
s.requirements << "To use the database inserter, ActiveRecord and an appropriate database adapter are required."
|
|
28
|
+
|
|
29
|
+
s.add_development_dependency('rspec', '>= 1.2.4')
|
|
30
|
+
s.add_development_dependency('git', '>= 1.1.0')
|
|
31
|
+
|
|
32
|
+
s.authors = ['Willem van Bergen', 'Bart ten Brinke']
|
|
33
|
+
s.email = ['willem@railsdoctors.com', 'bart@railsdoctors.com']
|
|
34
|
+
s.homepage = 'http://railsdoctors.com'
|
|
35
|
+
|
|
36
|
+
# The files and test_files directives are set automatically by the release script.
|
|
37
|
+
# Do not change them by hand, but make sure to add the files to the git repository.
|
|
38
|
+
s.files = %w(spec/unit/filter/anonymize_filter_spec.rb spec/fixtures/rails_22_cached.log lib/request_log_analyzer/line_definition.rb lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/controller.rb spec/lib/macros.rb lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/apache_combined.log spec/fixtures/apache_common.log spec/fixtures/merb_prefixed.log lib/request_log_analyzer/file_format/amazon_s3.rb tasks/request_log_analyzer.rake spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/command_line_usage_spec.rb lib/request_log_analyzer/database.rb spec/fixtures/decompression.log.bz2 spec/fixtures/rails_unordered.log lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/filter.rb bin/request-log-analyzer request-log-analyzer.gemspec DESIGN.rdoc spec/unit/filter/timespan_filter_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/lib/matchers.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/tracker/frequency.rb spec/fixtures/decompression.log.gz spec/fixtures/decompression.log spec/lib/testing_format.rb spec/fixtures/test_order.log spec/fixtures/rails.db lib/request_log_analyzer/output/fixed_width.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/tracker/timespan.rb lib/request_log_analyzer/database/base.rb lib/request_log_analyzer/aggregator.rb spec/unit/request_spec.rb lib/cli/progressbar.rb lib/request_log_analyzer/mailer.rb README.rdoc lib/request_log_analyzer/database/warning.rb spec/fixtures/merb.log lib/request_log_analyzer/tracker/hourly_spread.rb .gitignore spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/integration/scout_spec.rb lib/request_log_analyzer/aggregator/echo.rb spec/unit/mailer_spec.rb spec/unit/controller/log_processor_spec.rb spec/spec_helper.rb lib/request_log_analyzer.rb spec/database.yml Rakefile lib/request_log_analyzer/database/connection.rb spec/unit/filter/filter_spec.rb spec/fixtures/test_language_combined.log lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/aggregator/summarizer.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/database/source.rb lib/request_log_analyzer/file_format/rails.rb spec/fixtures/decompression.tar.gz spec/unit/tracker/traffic_tracker_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/database/base_class_spec.rb lib/request_log_analyzer/filter/timespan.rb lib/request_log_analyzer/source/log_parser.rb spec/fixtures/decompression.tgz spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/fixtures/header_and_footer.log lib/cli/tools.rb lib/request_log_analyzer/file_format/merb.rb spec/fixtures/multiple_files_1.log spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/line_definition_spec.rb lib/request_log_analyzer/source.rb lib/request_log_analyzer/request.rb lib/cli/database_console.rb spec/unit/database/connection_spec.rb spec/unit/controller/controller_spec.rb spec/lib/mocks.rb spec/lib/helpers.rb spec/fixtures/rails_1x.log lib/cli/database_console_init.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/file_format/apache.rb spec/fixtures/decompression.log.zip spec/unit/source/log_parser_spec.rb spec/integration/scout_spec.rb spec/fixtures/test_file_format.log tasks/github-gem.rake spec/unit/database/database_spec.rb spec/integration/munin_plugins_rails_spec.rb lib/request_log_analyzer/tracker/duration.rb lib/request_log_analyzer/tracker/traffic.rb lib/request_log_analyzer/file_format.rb spec/unit/aggregator/summarizer_spec.rb spec/fixtures/syslog_1x.log spec/fixtures/rails_22.log lib/request_log_analyzer/database/request.rb spec/fixtures/multiple_files_2.log LICENSE lib/request_log_analyzer/source/database_loader.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/rails_format_spec.rb lib/cli/command_line_arguments.rb)
|
|
39
|
+
s.test_files = %w(spec/unit/filter/anonymize_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/request_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/integration/scout_spec.rb spec/unit/mailer_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/filter/filter_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/database/base_class_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/database/connection_spec.rb spec/unit/controller/controller_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/database/database_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/rails_format_spec.rb)
|
|
40
|
+
end
|
data/spec/database.yml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# This file determines what databases are used to test the database
|
|
2
|
+
# functionality of request-log-analyzer. By default, only an SQLite3
|
|
3
|
+
# memory database is enabled.
|
|
4
|
+
#
|
|
5
|
+
# The syntax of this file is exactly the same as Rails's database.yml.
|
|
6
|
+
|
|
7
|
+
sqlite3:
|
|
8
|
+
adapter: "sqlite3"
|
|
9
|
+
database: ":memory:"
|
|
10
|
+
|
|
11
|
+
# mysql:
|
|
12
|
+
# adapter: "mysql"
|
|
13
|
+
# host: "localhost"
|
|
14
|
+
# username: "root"
|
|
15
|
+
# password:
|
|
16
|
+
# database: "rla_test"
|
|
17
|
+
|
|
18
|
+
# postgresql:
|
|
19
|
+
# adapter: "postgresql"
|
|
20
|
+
# host: "localhost"
|
|
21
|
+
# username: "rla"
|
|
22
|
+
# password: "rla"
|
|
23
|
+
# database: "rla_test"
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
125.76.230.10 - - [02/Sep/2009:03:33:46 +0200] "GET /cart/install.txt HTTP/1.1" 404 214 "-" "Toata dragostea mea pentru diavola"
|
|
2
|
+
125.76.230.10 - - [02/Sep/2009:03:33:47 +0200] "GET /store/install.txt HTTP/1.1" 404 215 "-" "Toata dragostea mea pentru diavola"
|
|
3
|
+
10.0.1.1 - - [02/Sep/2009:05:08:33 +0200] "GET / HTTP/1.1" 200 30 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9"
|
|
4
|
+
10.0.1.1 - - [02/Sep/2009:06:41:51 +0200] "GET / HTTP/1.1" 200 30 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9"
|
|
5
|
+
69.41.0.45 - - [02/Sep/2009:12:02:40 +0200] "GET //phpMyAdmin/ HTTP/1.1" 404 209 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
1.56.136.157 - - [08/Sep/2009:07:54:07 -0400] "GET /form_configurations/show.flashxml HTTP/1.1" 304 -
|
|
2
|
+
1.72.56.31 - - [08/Sep/2009:07:54:07 -0400] "GET /users/M17286/projects.xml?per_page=8000 HTTP/1.1" 404 1
|
|
3
|
+
1.82.235.29 - - [08/Sep/2009:07:54:05 -0400] "GET /gallery/fresh?page=23&per_page=16 HTTP/1.1" 200 23414
|
|
4
|
+
1.56.136.157 - - [08/Sep/2009:07:54:08 -0400] "GET /designs/20110457.flashxml HTTP/1.1" 304 -
|
|
5
|
+
1.56.136.157 - - [08/Sep/2009:07:54:08 -0400] "GET /object_libraries/1.flashxml HTTP/1.1" 304 -
|
|
6
|
+
1.249.68.72 - - [08/Sep/2009:07:54:09 -0400] "GET /projects/18182835-my-first-project HTTP/1.1" 200 10435
|
|
7
|
+
1.108.106.20 - - [08/Sep/2009:07:54:09 -0400] "GET /login HTTP/1.1" 200 9522
|
|
8
|
+
1.129.119.13 - - [08/Sep/2009:07:54:09 -0400] "GET /profile/18543424 HTTP/1.0" 200 8223
|
|
9
|
+
1.158.151.25 - - [08/Sep/2009:07:54:09 -0400] "GET /projects/18236114-home/floors/18252888-/designs/19406560-home-1 HTTP/1.1" 200 10434
|
|
10
|
+
1.29.137.1 - - [08/Sep/2009:07:54:10 -0400] "GET /assets/custom/blah/images/print_logo.jpg HTTP/1.1" 200 10604
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Processing PageController#demo (for 127.0.0.1 at 2008-12-10 16:28:09) [GET]
|
|
2
|
+
Parameters: {"action"=>"demo", "controller"=>"page"}
|
|
3
|
+
Logging in from session data...
|
|
4
|
+
Logged in as test@example.com
|
|
5
|
+
Using locale: en-US, http-accept: ["en-US"], session: , det browser: en-US, det domain:
|
|
6
|
+
Rendering template within layouts/demo
|
|
7
|
+
Rendering page/demo
|
|
8
|
+
Rendered shared/_analytics (0.2ms)
|
|
9
|
+
Rendered layouts/_actions (0.6ms)
|
|
10
|
+
Rendered layouts/_menu (2.2ms)
|
|
11
|
+
Rendered layouts/_tabbar (0.5ms)
|
|
12
|
+
Completed in 614ms (View: 120, DB: 31) | 200 OK [http://www.example.coml/demo]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
~ Loaded DEVELOPMENT Environment...
|
|
2
|
+
~ Connecting to database...
|
|
3
|
+
~ loading gem 'merb_datamapper' ...
|
|
4
|
+
~ loading gem 'gettext' ...
|
|
5
|
+
~ loading gem 'merb_helpers' ...
|
|
6
|
+
~ loading gem 'merb-assets' ...
|
|
7
|
+
~ loading gem 'merb-action-args' ...
|
|
8
|
+
~ loading gem 'merb-mailer' ...
|
|
9
|
+
~ loading gem 'merb_param_protection' ...
|
|
10
|
+
~ loading gem 'merb_has_flash' ...
|
|
11
|
+
~ loading gem 'merb_forgery_protection' ...
|
|
12
|
+
~ loading gem 'dm-validations' ...
|
|
13
|
+
~ loading gem 'dm-timestamps' ...
|
|
14
|
+
~ loading gem 'dm-migrations' ...
|
|
15
|
+
~ loading gem 'dm-aggregates' ...
|
|
16
|
+
~ loading gem 'dm-adjust' ...
|
|
17
|
+
~ loading gem 'dm-serializer' ...
|
|
18
|
+
~ loading gem 'dm-constraints' ...
|
|
19
|
+
~ loading gem 'dm-timeline' ...
|
|
20
|
+
~ loading gem 'dm-searchable' ...
|
|
21
|
+
~ loading gem 'dm-audited' ...
|
|
22
|
+
~ loading gem 'lib/extensions' ...
|
|
23
|
+
~ loading gem 'lib/authenticated_system/authenticated_dependencies' ...
|
|
24
|
+
~ Compiling routes...
|
|
25
|
+
~ Using 'share-nothing' cookie sessions (4kb limit per client)
|
|
26
|
+
~ Using Mongrel adapter
|
|
27
|
+
~ Started request handling: Fri Aug 29 11:10:23 +0200 2008
|
|
28
|
+
~ Params: {"_method"=>"delete", "authenticity_token"=>"[FILTERED]", "action"=>"destroy", "method"=>"delete", "controller"=>"session"}
|
|
29
|
+
~ Cookie deleted: auth_token => nil
|
|
30
|
+
~ Redirecting to: / (302)
|
|
31
|
+
~ {:dispatch_time=>0.243424, :after_filters_time=>6.9e-05, :before_filters_time=>0.213213, :action_time=>0.241652}
|
|
32
|
+
~
|
|
33
|
+
|
|
34
|
+
~ Started request handling: Fri Aug 29 11:10:23 +0200 2008
|
|
35
|
+
~ Params: {"action"=>"index", "controller"=>"dashboard"}
|
|
36
|
+
~ Redirecting to: /login (302)
|
|
37
|
+
~ {:dispatch_time=>0.002649, :after_filters_time=>7.4e-05, :action_time=>0.001951}
|
|
38
|
+
~
|
|
39
|
+
|
|
40
|
+
~ Started request handling: Fri Aug 29 11:10:23 +0200 2008
|
|
41
|
+
~ Params: {"action"=>"create", "controller"=>"session"}
|
|
42
|
+
~ {:dispatch_time=>0.006117, :after_filters_time=>6.1e-05, :before_filters_time=>0.000712, :action_time=>0.005833}
|
|
43
|
+
~
|
|
44
|
+
|
|
45
|
+
~ Started request handling: Fri Aug 29 11:10:27 +0200 2008
|
|
46
|
+
~ Params: {"authenticity_token"=>"[FILTERED]", "action"=>"create", "controller"=>"session", "login"=>"username", "password"=>"[FILTERED]", "remember_me"=>"0"}
|
|
47
|
+
~ Redirecting to: / (302)
|
|
48
|
+
~ {:dispatch_time=>0.006652, :after_filters_time=>0.000143, :before_filters_time=>0.000861, :action_time=>0.006171}
|
|
49
|
+
~
|
|
50
|
+
|
|
51
|
+
~ Started request handling: Fri Aug 29 11:10:27 +0200 2008
|
|
52
|
+
~ Params: {"action"=>"index", "controller"=>"dashboard"}
|
|
53
|
+
~ Redirecting to: /dashboard (302)
|
|
54
|
+
~ {:dispatch_time=>0.008241, :after_filters_time=>0.000126, :before_filters_time=>0.002632, :action_time=>0.007711}
|
|
55
|
+
~
|
|
56
|
+
|
|
57
|
+
~ Started request handling: Fri Aug 29 11:10:27 +0200 2008
|
|
58
|
+
~ Params: {"action"=>"index", "namespace"=>"dashboard", "controller"=>"dashboard"}
|
|
59
|
+
~ {:dispatch_time=>0.009458, :after_filters_time=>0.000103, :before_filters_time=>0.00266, :action_time=>0.008742}
|
|
60
|
+
~
|
|
61
|
+
|
|
62
|
+
~ Started request handling: Fri Aug 29 11:10:29 +0200 2008
|
|
63
|
+
~ Params: {"format"=>nil, "action"=>"index", "namespace"=>"dashboard", "controller"=>"employees"}
|
|
64
|
+
~ {:dispatch_time=>0.102725, :after_filters_time=>0.000115, :before_filters_time=>0.00411, :action_time=>0.101836}
|
|
65
|
+
~
|
|
66
|
+
|
|
67
|
+
~ Started request handling: Fri Aug 29 11:10:30 +0200 2008
|
|
68
|
+
~ Params: {"format"=>nil, "action"=>"index", "namespace"=>"dashboard", "controller"=>"organisations"}
|
|
69
|
+
~ {:dispatch_time=>0.042575, :after_filters_time=>8.9e-05, :before_filters_time=>0.004267, :action_time=>0.041762}
|
|
70
|
+
~
|
|
71
|
+
|
|
72
|
+
~ Started request handling: Fri Aug 29 11:10:31 +0200 2008
|
|
73
|
+
~ Params: {"action"=>"index", "namespace"=>"dashboard", "controller"=>"dashboard"}
|
|
74
|
+
~ {:dispatch_time=>0.010311, :after_filters_time=>8.0e-05, :before_filters_time=>0.003195, :action_time=>0.009567}
|
|
75
|
+
~
|
|
76
|
+
|
|
77
|
+
~ Started request handling: Fri Aug 29 11:10:33 +0200 2008
|
|
78
|
+
~ Params: {"format"=>nil, "action"=>"index", "namespace"=>"dashboard", "controller"=>"employees"}
|
|
79
|
+
~ {:dispatch_time=>0.012913, :after_filters_time=>7.1e-05, :before_filters_time=>0.004422, :action_time=>0.012141}
|
|
80
|
+
~
|
|
81
|
+
|
|
82
|
+
~ Started request handling: Fri Aug 29 11:10:35 +0200 2008
|
|
83
|
+
~ Params: {"action"=>"new", "namespace"=>"dashboard", "controller"=>"employees"}
|
|
84
|
+
~ {:dispatch_time=>0.013051, :after_filters_time=>7.8e-05, :before_filters_time=>0.003576, :action_time=>0.011773}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Aug 31 18:35:23 typekit-web001 merb: ~
|
|
2
|
+
Aug 31 18:35:23 typekit-web001 merb: cache: [GET /] miss
|
|
3
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ Started request handling: Mon Aug 31 18:35:25 +0000 2009
|
|
4
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ Routed to: {"action"=>"index", "controller"=>"home"}
|
|
5
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ Params: {"action"=>"index", "controller"=>"home"}
|
|
6
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ In repository block default
|
|
7
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ (0.000000) SELECT `id`, `created_at`, `updated_at`, `braintree_vault_id`, `cancelled_at` FROM `accounts` WHERE (`id` IN (6214)) ORDER BY `id`
|
|
8
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ Redirecting to: /plans (302)
|
|
9
|
+
Aug 31 18:35:24 typekit-web001 merb: ~ {:after_filters_time=>0.0, :before_filters_time=>0.0, :dispatch_time=>0.012001, :action_time=>0.012001}
|
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Processing DashboardController#index (for 1.1.1.1 at 2008-08-14 21:16:25) [GET]
|
|
2
|
+
Session ID: BAh7CToMcmVmZXJlciIbL3ByaXNjaWxsYS9wZW9wbGUvMjM1MCIKZmxhc2hJ
|
|
3
|
+
QzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVz
|
|
4
|
+
ZWR7ADoNbGFuZ3VhZ2VvOhNMb2NhbGU6Ok9iamVjdBI6CUB3aW4wOg1AY291
|
|
5
|
+
bnRyeSIHTkw6CkBoYXNoaf3L2Js6DkBvcmlnX3N0ciIKbmwtTkw6DUBpc28z
|
|
6
|
+
MDY2MDoNQGNoYXJzZXQiClVURi04Og5AbGFuZ3VhZ2UiB25sOg5AbW9kaWZp
|
|
7
|
+
ZXIwOgtAcG9zaXgiCm5sX05MOg1AZ2VuZXJhbCIKbmxfTkw6DUB2YXJpYW50
|
|
8
|
+
MDoOQGZhbGxiYWNrMDoMQHNjcmlwdDA6DnBlcnNvbl9pZGkCMgc=--7918aed37151c13360cd370c37b541f136146fbd
|
|
9
|
+
Parameters: {"action"=>"index", "controller"=>"dashboard"}
|
|
10
|
+
Set language to: nl_NL
|
|
11
|
+
Rendering template within layouts/priscilla
|
|
12
|
+
Rendering dashboard/index
|
|
13
|
+
Completed in 0.22699 (4 reqs/sec) | Rendering: 0.02667 (11%) | DB: 0.03057 (13%) | 200 OK [https://www.example.com/]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
Processing PeopleController#index (for 1.1.1.1 at 2008-08-14 21:16:30) [GET]
|
|
17
|
+
Session ID: BAh7CSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo
|
|
18
|
+
SGFzaHsABjoKQHVzZWR7ADoMcmVmZXJlciIQL3ByaXNjaWxsYS86DnBlcnNv
|
|
19
|
+
bl9pZGkCMgc6DWxhbmd1YWdlbzoTTG9jYWxlOjpPYmplY3QSOg1AY291bnRy
|
|
20
|
+
eSIHTkw6CUB3aW4wOg5Ab3JpZ19zdHIiCm5sLU5MOgpAaGFzaGn9y9ibOg5A
|
|
21
|
+
bGFuZ3VhZ2UiB25sOg1AY2hhcnNldCIKVVRGLTg6DUBpc28zMDY2MDoOQG1v
|
|
22
|
+
ZGlmaWVyMDoLQHBvc2l4IgpubF9OTDoNQHZhcmlhbnQwOg1AZ2VuZXJhbCIK
|
|
23
|
+
bmxfTkw6DEBzY3JpcHQwOg5AZmFsbGJhY2sw--48cbe3788ef27f6005f8e999610a42af6e90ffb3
|
|
24
|
+
Parameters: {"commit"=>"Zoek", "action"=>"index", "q"=>"gaby", "controller"=>"people"}
|
|
25
|
+
Set language to: nl_NL
|
|
26
|
+
Redirected to https://www.example.com/people/2545
|
|
27
|
+
Completed in 0.04759 (21 reqs/sec) | DB: 0.03719 (78%) | 302 Found [https://www.example.com/people?q=gaby&commit=Zoek]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Processing PeopleController#show (for 1.1.1.1 at 2008-08-14 21:16:30) [GET]
|
|
31
|
+
Session ID: BAh7CToMcmVmZXJlciIpL3ByaXNjaWxsYS9wZW9wbGU/cT1nYWJ5JmNvbW1p
|
|
32
|
+
dD1ab2VrIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxh
|
|
33
|
+
c2hIYXNoewAGOgpAdXNlZHsAOg1sYW5ndWFnZW86E0xvY2FsZTo6T2JqZWN0
|
|
34
|
+
EjoJQHdpbjA6DUBjb3VudHJ5IgdOTDoKQGhhc2hp/cvYmzoOQG9yaWdfc3Ry
|
|
35
|
+
IgpubC1OTDoNQGlzbzMwNjYwOg1AY2hhcnNldCIKVVRGLTg6DkBsYW5ndWFn
|
|
36
|
+
ZSIHbmw6DkBtb2RpZmllcjA6C0Bwb3NpeCIKbmxfTkw6DUBnZW5lcmFsIgpu
|
|
37
|
+
bF9OTDoNQHZhcmlhbnQwOg5AZmFsbGJhY2swOgxAc2NyaXB0MDoOcGVyc29u
|
|
38
|
+
X2lkaQIyBw==--3ad1948559448522a49d289a2a89dc7ccbe8847a
|
|
39
|
+
Parameters: {"action"=>"show", "id"=>"2545", "controller"=>"people"}
|
|
40
|
+
Set language to: nl_NL
|
|
41
|
+
Rendering template within layouts/priscilla
|
|
42
|
+
Rendering people/show
|
|
43
|
+
person: John Doe, study_year: 2008/2009
|
|
44
|
+
Completed in 0.29077 (3 reqs/sec) | Rendering: 0.24187 (83%) | DB: 0.04030 (13%) | 200 OK [https://www.example.com/people/2545]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
Processing PeopleController#picture (for 1.1.1.1 at 2008-08-14 21:16:35) [GET]
|
|
48
|
+
Session ID: BAh7CSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo
|
|
49
|
+
SGFzaHsABjoKQHVzZWR7ADoMcmVmZXJlciIbL3ByaXNjaWxsYS9wZW9wbGUv
|
|
50
|
+
MjU0NToOcGVyc29uX2lkaQIyBzoNbGFuZ3VhZ2VvOhNMb2NhbGU6Ok9iamVj
|
|
51
|
+
dBI6DUBjb3VudHJ5IgdOTDoJQHdpbjA6DkBvcmlnX3N0ciIKbmwtTkw6CkBo
|
|
52
|
+
YXNoaf3L2Js6DkBsYW5ndWFnZSIHbmw6DUBjaGFyc2V0IgpVVEYtODoNQGlz
|
|
53
|
+
bzMwNjYwOg5AbW9kaWZpZXIwOgtAcG9zaXgiCm5sX05MOg1AdmFyaWFudDA6
|
|
54
|
+
DUBnZW5lcmFsIgpubF9OTDoMQHNjcmlwdDA6DkBmYWxsYmFjazA=--797a33f280a482647111397d138d0918f2658167
|
|
55
|
+
Parameters: {"action"=>"picture", "id"=>"2545", "controller"=>"people"}
|
|
56
|
+
Set language to: nl_NL
|
|
57
|
+
Rendering template within layouts/priscilla
|
|
58
|
+
Rendering people/picture
|
|
59
|
+
Completed in 0.05383 (18 reqs/sec) | Rendering: 0.04622 (85%) | DB: 0.00206 (3%) | 200 OK [https://www.example.com/people/2545/picture]
|