wvanbergen-request-log-analyzer 1.0.0 → 1.0.1
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/DESIGN +14 -0
- data/HACKING +7 -0
- data/README.textile +9 -98
- data/Rakefile +2 -2
- data/bin/request-log-analyzer +1 -1
- data/lib/cli/bashcolorizer.rb +60 -0
- data/lib/cli/command_line_arguments.rb +301 -0
- data/lib/cli/progressbar.rb +236 -0
- data/lib/request_log_analyzer/aggregator/base.rb +51 -0
- data/lib/request_log_analyzer/aggregator/database.rb +97 -0
- data/lib/request_log_analyzer/aggregator/echo.rb +25 -0
- data/lib/request_log_analyzer/aggregator/summarizer.rb +116 -0
- data/lib/request_log_analyzer/controller.rb +206 -0
- data/lib/request_log_analyzer/file_format/merb.rb +33 -0
- data/lib/request_log_analyzer/file_format/rails.rb +119 -0
- data/lib/request_log_analyzer/file_format.rb +77 -0
- data/lib/request_log_analyzer/filter/base.rb +29 -0
- data/lib/request_log_analyzer/filter/field.rb +36 -0
- data/lib/request_log_analyzer/filter/timespan.rb +32 -0
- data/lib/request_log_analyzer/line_definition.rb +159 -0
- data/lib/request_log_analyzer/log_parser.rb +183 -0
- data/lib/request_log_analyzer/log_processor.rb +121 -0
- data/lib/request_log_analyzer/request.rb +115 -0
- data/lib/request_log_analyzer/source/base.rb +42 -0
- data/lib/request_log_analyzer/source/log_file.rb +180 -0
- data/lib/request_log_analyzer/tracker/base.rb +54 -0
- data/lib/request_log_analyzer/tracker/category.rb +71 -0
- data/lib/request_log_analyzer/tracker/duration.rb +81 -0
- data/lib/request_log_analyzer/tracker/hourly_spread.rb +80 -0
- data/lib/request_log_analyzer/tracker/timespan.rb +54 -0
- data/spec/file_format_spec.rb +78 -0
- data/spec/file_formats/spec_format.rb +26 -0
- data/spec/filter_spec.rb +137 -0
- data/spec/log_processor_spec.rb +57 -0
- data/tasks/rspec.rake +6 -0
- metadata +53 -55
- data/TODO +0 -58
- data/bin/request-log-database +0 -81
- data/lib/base/log_parser.rb +0 -78
- data/lib/base/record_inserter.rb +0 -139
- data/lib/command_line/arguments.rb +0 -129
- data/lib/command_line/flag.rb +0 -51
- data/lib/merb_analyzer/log_parser.rb +0 -26
- data/lib/rails_analyzer/log_parser.rb +0 -35
- data/lib/rails_analyzer/record_inserter.rb +0 -39
- data/tasks/test.rake +0 -8
- data/test/log_fragments/fragment_1.log +0 -59
- data/test/log_fragments/fragment_2.log +0 -5
- data/test/log_fragments/fragment_3.log +0 -12
- data/test/log_fragments/fragment_4.log +0 -10
- data/test/log_fragments/fragment_5.log +0 -24
- data/test/log_fragments/merb_1.log +0 -84
- data/test/merb_log_parser_test.rb +0 -39
- data/test/rails_log_parser_test.rb +0 -94
- data/test/record_inserter_test.rb +0 -45
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require "#{File.dirname(__FILE__)}/../lib/request_log_analyzer"
|
4
|
-
|
5
|
-
class RailsLogParserTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
def fragment_file(number)
|
8
|
-
"#{File.dirname(__FILE__)}/log_fragments/fragment_#{number}.log"
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
def test_rails_22_log_format
|
13
|
-
count = 0
|
14
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(3)).each(:completed) do |request|
|
15
|
-
count += 1
|
16
|
-
assert_equal 0.614, request[:duration] # should be 0.614
|
17
|
-
end
|
18
|
-
assert_equal 1, count
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_progress_messages
|
22
|
-
log_file = fragment_file(1)
|
23
|
-
|
24
|
-
finished_encountered = false
|
25
|
-
file_size = File.size(log_file)
|
26
|
-
|
27
|
-
previous_pos = -1
|
28
|
-
parser = RailsAnalyzer::LogParser.new(log_file)
|
29
|
-
parser.progress do |pos, total|
|
30
|
-
assert_equal file_size, total
|
31
|
-
if pos == :finished
|
32
|
-
finished_encountered = true
|
33
|
-
else
|
34
|
-
assert pos <= total
|
35
|
-
assert pos > previous_pos
|
36
|
-
previous_pos = pos
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# now parse the file
|
41
|
-
parser.each(:started) { }
|
42
|
-
|
43
|
-
assert finished_encountered, "A finished event should have been fired"
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_parse_mongrel_log_fragment
|
47
|
-
count = 0
|
48
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(1)).each(:started) { count += 1 }
|
49
|
-
assert_equal 4, count
|
50
|
-
|
51
|
-
count = 0
|
52
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(1)).each(:completed) { count += 1 }
|
53
|
-
assert_equal 4, count
|
54
|
-
|
55
|
-
count = 0
|
56
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(1)).each(:started, :completed) { count += 1 }
|
57
|
-
assert_equal 8, count
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_parse_syslog_fragment
|
61
|
-
count = 0
|
62
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(2)).each(:started) { count += 1 }
|
63
|
-
assert_equal 1, count
|
64
|
-
|
65
|
-
count = 0
|
66
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(2)).each(:completed) { count += 1 }
|
67
|
-
assert_equal 1, count
|
68
|
-
|
69
|
-
count = 0
|
70
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(2)).each(:started, :completed) { count += 1 }
|
71
|
-
assert_equal 2, count
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_parse_syslog_fragment_content
|
75
|
-
# this test only works because there is only one requests in the fragment
|
76
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(2)).each(:started) do |request|
|
77
|
-
assert_equal "EmployeeController", request[:controller]
|
78
|
-
assert_equal "index", request[:action]
|
79
|
-
assert_equal "GET", request[:method]
|
80
|
-
assert_equal '10.1.1.33', request[:ip]
|
81
|
-
assert_equal '2008-07-13 06:25:58', request[:timestamp]
|
82
|
-
end
|
83
|
-
|
84
|
-
parser = RailsAnalyzer::LogParser.new(fragment_file(2)).each(:completed) do |request|
|
85
|
-
assert_equal "http://example.com/employee.xml", request[:url]
|
86
|
-
assert_equal 200, request[:status]
|
87
|
-
assert_equal 0.21665, request[:duration]
|
88
|
-
assert_equal 0.00926, request[:rendering]
|
89
|
-
assert_equal 0.0, request[:db]
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require "#{File.dirname(__FILE__)}/../lib/base/log_parser"
|
4
|
-
require "#{File.dirname(__FILE__)}/../lib/base/record_inserter"
|
5
|
-
|
6
|
-
require "#{File.dirname(__FILE__)}/../lib/rails_analyzer/log_parser"
|
7
|
-
require "#{File.dirname(__FILE__)}/../lib/rails_analyzer/record_inserter"
|
8
|
-
|
9
|
-
class RecordInserterTest < Test::Unit::TestCase
|
10
|
-
|
11
|
-
def fragment_file(number)
|
12
|
-
"#{File.dirname(__FILE__)}/log_fragments/fragment_#{number}.log"
|
13
|
-
end
|
14
|
-
|
15
|
-
def setup
|
16
|
-
File.delete('_tmp.db') if File.exist?('_tmp.db')
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
File.delete('_tmp.db') if File.exist?('_tmp.db')
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_insert_log_fragment
|
24
|
-
|
25
|
-
db = RailsAnalyzer::RecordInserter.insert_batch_into('_tmp.db') do |batch|
|
26
|
-
RailsAnalyzer::LogParser.new(fragment_file(1)).each { |request| batch.insert(request) }
|
27
|
-
end
|
28
|
-
|
29
|
-
assert_equal 4, db.database.get_first_value("SELECT COUNT(*) FROM started_requests").to_i
|
30
|
-
assert_equal 4, db.database.get_first_value("SELECT COUNT(*) FROM completed_requests").to_i
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_insert_multiple_fragments
|
34
|
-
RailsAnalyzer::RecordInserter.insert_batch_into('_tmp.db') do |batch|
|
35
|
-
RailsAnalyzer::LogParser.new(fragment_file(1)).each { |request| batch.insert(request) }
|
36
|
-
end
|
37
|
-
|
38
|
-
db = RailsAnalyzer::RecordInserter.insert_batch_into('_tmp.db') do |batch|
|
39
|
-
RailsAnalyzer::LogParser.new(fragment_file(2)).each { |request| batch.insert(request) }
|
40
|
-
end
|
41
|
-
assert_equal 5, db.database.get_first_value("SELECT COUNT(*) FROM started_requests").to_i
|
42
|
-
assert_equal 5, db.database.get_first_value("SELECT COUNT(*) FROM completed_requests").to_i
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|