wvanbergen-request-log-analyzer 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/DESIGN +14 -0
  2. data/HACKING +7 -0
  3. data/README.textile +9 -98
  4. data/Rakefile +2 -2
  5. data/bin/request-log-analyzer +1 -1
  6. data/lib/cli/bashcolorizer.rb +60 -0
  7. data/lib/cli/command_line_arguments.rb +301 -0
  8. data/lib/cli/progressbar.rb +236 -0
  9. data/lib/request_log_analyzer/aggregator/base.rb +51 -0
  10. data/lib/request_log_analyzer/aggregator/database.rb +97 -0
  11. data/lib/request_log_analyzer/aggregator/echo.rb +25 -0
  12. data/lib/request_log_analyzer/aggregator/summarizer.rb +116 -0
  13. data/lib/request_log_analyzer/controller.rb +206 -0
  14. data/lib/request_log_analyzer/file_format/merb.rb +33 -0
  15. data/lib/request_log_analyzer/file_format/rails.rb +119 -0
  16. data/lib/request_log_analyzer/file_format.rb +77 -0
  17. data/lib/request_log_analyzer/filter/base.rb +29 -0
  18. data/lib/request_log_analyzer/filter/field.rb +36 -0
  19. data/lib/request_log_analyzer/filter/timespan.rb +32 -0
  20. data/lib/request_log_analyzer/line_definition.rb +159 -0
  21. data/lib/request_log_analyzer/log_parser.rb +183 -0
  22. data/lib/request_log_analyzer/log_processor.rb +121 -0
  23. data/lib/request_log_analyzer/request.rb +115 -0
  24. data/lib/request_log_analyzer/source/base.rb +42 -0
  25. data/lib/request_log_analyzer/source/log_file.rb +180 -0
  26. data/lib/request_log_analyzer/tracker/base.rb +54 -0
  27. data/lib/request_log_analyzer/tracker/category.rb +71 -0
  28. data/lib/request_log_analyzer/tracker/duration.rb +81 -0
  29. data/lib/request_log_analyzer/tracker/hourly_spread.rb +80 -0
  30. data/lib/request_log_analyzer/tracker/timespan.rb +54 -0
  31. data/spec/file_format_spec.rb +78 -0
  32. data/spec/file_formats/spec_format.rb +26 -0
  33. data/spec/filter_spec.rb +137 -0
  34. data/spec/log_processor_spec.rb +57 -0
  35. data/tasks/rspec.rake +6 -0
  36. metadata +53 -55
  37. data/TODO +0 -58
  38. data/bin/request-log-database +0 -81
  39. data/lib/base/log_parser.rb +0 -78
  40. data/lib/base/record_inserter.rb +0 -139
  41. data/lib/command_line/arguments.rb +0 -129
  42. data/lib/command_line/flag.rb +0 -51
  43. data/lib/merb_analyzer/log_parser.rb +0 -26
  44. data/lib/rails_analyzer/log_parser.rb +0 -35
  45. data/lib/rails_analyzer/record_inserter.rb +0 -39
  46. data/tasks/test.rake +0 -8
  47. data/test/log_fragments/fragment_1.log +0 -59
  48. data/test/log_fragments/fragment_2.log +0 -5
  49. data/test/log_fragments/fragment_3.log +0 -12
  50. data/test/log_fragments/fragment_4.log +0 -10
  51. data/test/log_fragments/fragment_5.log +0 -24
  52. data/test/log_fragments/merb_1.log +0 -84
  53. data/test/merb_log_parser_test.rb +0 -39
  54. data/test/rails_log_parser_test.rb +0 -94
  55. 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