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.
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