wvanbergen-request-log-analyzer 0.3.3 → 0.3.4
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/Rakefile +2 -2
- data/TODO +0 -1
- data/bin/request-log-analyzer +28 -28
- data/bin/request-log-database +81 -0
- data/lib/base/log_parser.rb +78 -0
- data/lib/base/record_inserter.rb +139 -0
- data/lib/command_line/arguments.rb +2 -15
- data/lib/command_line/flag.rb +0 -12
- data/lib/merb_analyzer/log_parser.rb +26 -0
- data/lib/rails_analyzer/log_parser.rb +35 -0
- data/lib/rails_analyzer/record_inserter.rb +39 -0
- data/lib/request_log_analyzer.rb +161 -5
- data/tasks/test.rake +8 -0
- data/test/log_fragments/fragment_1.log +59 -0
- data/test/log_fragments/fragment_2.log +5 -0
- data/test/log_fragments/fragment_3.log +12 -0
- data/test/log_fragments/fragment_4.log +10 -0
- data/test/log_fragments/fragment_5.log +24 -0
- data/test/log_fragments/merb_1.log +84 -0
- data/test/merb_log_parser_test.rb +39 -0
- data/test/rails_log_parser_test.rb +99 -0
- data/test/record_inserter_test.rb +45 -0
- metadata +23 -16
- data/lib/request_log_analyzer/aggregator/base.rb +0 -34
- data/lib/request_log_analyzer/aggregator/database.rb +0 -86
- data/lib/request_log_analyzer/aggregator/echo.rb +0 -10
- data/lib/request_log_analyzer/aggregator/summarizer.rb +0 -53
- data/lib/request_log_analyzer/controller.rb +0 -90
- data/lib/request_log_analyzer/file_format.rb +0 -91
- data/lib/request_log_analyzer/file_format/merb.rb +0 -30
- data/lib/request_log_analyzer/file_format/rails.rb +0 -84
- data/lib/request_log_analyzer/log_parser.rb +0 -122
- data/lib/request_log_analyzer/request.rb +0 -72
- data/tasks/rspec.rake +0 -6
@@ -0,0 +1,26 @@
|
|
1
|
+
module MerbAnalyzer
|
2
|
+
|
3
|
+
class LogParser < Base::LogParser
|
4
|
+
LOG_LINES = {
|
5
|
+
# ~ Started request handling: Fri Aug 29 11:10:23 +0200 2008
|
6
|
+
:started => {
|
7
|
+
:teaser => /Started/,
|
8
|
+
:regexp => /Started request handling\:\ (.+)/,
|
9
|
+
:params => [{:timestamp => :timestamp}]
|
10
|
+
},
|
11
|
+
# ~ Params: {"action"=>"create", "controller"=>"session"}
|
12
|
+
# ~ Params: {"_method"=>"delete", "authenticity_token"=>"[FILTERED]", "action"=>"d}
|
13
|
+
:params => {
|
14
|
+
:teaser => /Params/,
|
15
|
+
:regexp => /Params\:\ \{(.+)\}/,
|
16
|
+
:params => [{:raw_hash => :string}]
|
17
|
+
},
|
18
|
+
# ~ {:dispatch_time=>0.006117, :after_filters_time=>6.1e-05, :before_filters_time=>0.000712, :action_time=>0.005833}
|
19
|
+
:completed => {
|
20
|
+
:teaser => /\{:dispatch_time/,
|
21
|
+
:regexp => /\{\:dispatch_time=>(.+), (?:\:after_filters_time=>(.+), )?(?:\:before_filters_time=>(.+), )?\:action_time=>(.+)\}/,
|
22
|
+
:params => [ {:dispatch_time => :sec}, {:after_filters_time => :sec}, {:before_filters_time => :sec}, {:action_time => :sec} ]
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module RailsAnalyzer
|
2
|
+
|
3
|
+
class LogParser < Base::LogParser
|
4
|
+
|
5
|
+
# Completed in 0.21665 (4 reqs/sec) | Rendering: 0.00926 (4%) | DB: 0.00000 (0%) | 200 OK [http://demo.nu/employees]
|
6
|
+
RAILS_21_COMPLETED = /Completed in (\d+\.\d{5}) \(\d+ reqs\/sec\) (?:\| Rendering: (\d+\.\d{5}) \(\d+\%\) )?(?:\| DB: (\d+\.\d{5}) \(\d+\%\) )?\| (\d\d\d).+\[(http.+)\]/
|
7
|
+
|
8
|
+
# Completed in 614ms (View: 120, DB: 31) | 200 OK [http://floorplanner.local/demo]
|
9
|
+
RAILS_22_COMPLETED = /Completed in (\d+)ms \((?:View: (\d+), )?DB: (\d+)\) \| (\d\d\d).+\[(http.+)\]/
|
10
|
+
|
11
|
+
|
12
|
+
LOG_LINES = {
|
13
|
+
# Processing EmployeeController#index (for 123.123.123.123 at 2008-07-13 06:00:00) [GET]
|
14
|
+
:started => {
|
15
|
+
:teaser => /Processing/,
|
16
|
+
:regexp => /Processing ((?:\w+::)?\w+)#(\w+)(?: to (\w+))? \(for (\d+\.\d+\.\d+\.\d+) at (\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)\) \[([A-Z]+)\]/,
|
17
|
+
:params => [{:controller => :string}, {:action => :string}, {:format => :string}, {:ip => :string}, {:timestamp => :timestamp}, {:method => :string}]
|
18
|
+
},
|
19
|
+
# RuntimeError (Cannot destroy employee): /app/models/employee.rb:198:in `before_destroy'
|
20
|
+
:failed => {
|
21
|
+
:teaser => /Error/,
|
22
|
+
:regexp => /(\w+)(?:Error|Invalid) \((.*)\)\:(.*)/,
|
23
|
+
:params => [{:error => :string}, {:exception_string => :string}, {:stack_trace => :string}]
|
24
|
+
},
|
25
|
+
|
26
|
+
:completed => {
|
27
|
+
:teaser => /Completed in /,
|
28
|
+
:regexp => Regexp.new("(?:#{RAILS_21_COMPLETED}|#{RAILS_22_COMPLETED})"),
|
29
|
+
:params => [{:duration => :sec}, {:rendering => :sec}, {:db => :sec}, {:status => :int}, {:url => :string}, # 2.1 variant
|
30
|
+
{:duration => :msec}, {:rendering => :msec}, {:db => :msec}, {:status => :int}, {:url => :string}] # 2.2 variant
|
31
|
+
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sqlite3'
|
3
|
+
|
4
|
+
module RailsAnalyzer
|
5
|
+
|
6
|
+
# Set of functions that can be used to easily log requests into a SQLite3 Database.
|
7
|
+
class RecordInserter < Base::RecordInserter
|
8
|
+
|
9
|
+
# Insert a request into the database.
|
10
|
+
# <tt>request</tt> The request to insert.
|
11
|
+
# <tt>close_statements</tt> Close prepared statements (default false)
|
12
|
+
def insert(request, close_statements = false)
|
13
|
+
unless @insert_statements
|
14
|
+
prepare_statements!
|
15
|
+
close_statements = true
|
16
|
+
end
|
17
|
+
|
18
|
+
if request[:type] && @insert_statements.has_key?(request[:type])
|
19
|
+
if request[:type] == :started
|
20
|
+
insert_warning(request[:line], "Unclosed request encountered on line #{request[:line]} (request started on line #{@current_request})") unless @current_request.nil?
|
21
|
+
@current_request = request[:line]
|
22
|
+
elsif [:failed, :completed].include?(request[:type])
|
23
|
+
@current_request = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
@insert_statements[request.delete(:type)].execute(request)
|
28
|
+
rescue SQLite3::Exception => e
|
29
|
+
insert_warning(request[:line], "Could not save log line to database: " + e.message.to_s)
|
30
|
+
end
|
31
|
+
else
|
32
|
+
insert_warning(request[:line], "Ignored unknown statement type")
|
33
|
+
end
|
34
|
+
|
35
|
+
close_prepared_statements! if close_statements
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/lib/request_log_analyzer.rb
CHANGED
@@ -1,5 +1,161 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/
|
2
|
-
require File.dirname(__FILE__) + '/
|
3
|
-
require File.dirname(__FILE__) + '/
|
4
|
-
require File.dirname(__FILE__) + '/
|
5
|
-
require File.dirname(__FILE__) + '/
|
1
|
+
require File.dirname(__FILE__) + '/../lib/base/log_parser'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/base/summarizer'
|
3
|
+
require File.dirname(__FILE__) + '/../lib/rails_analyzer/log_parser'
|
4
|
+
require File.dirname(__FILE__) + '/../lib/rails_analyzer/summarizer'
|
5
|
+
require File.dirname(__FILE__) + '/../lib/rails_analyzer/virtual_mongrel.rb'
|
6
|
+
require File.dirname(__FILE__) + '/../lib/merb_analyzer/log_parser'
|
7
|
+
require File.dirname(__FILE__) + '/../lib/merb_analyzer/summarizer'
|
8
|
+
require File.dirname(__FILE__) + '/../lib/bashcolorizer'
|
9
|
+
require File.dirname(__FILE__) + '/../lib/ruby-progressbar/progressbar.rb'
|
10
|
+
|
11
|
+
# Can calculate request counts, duratations, mean times etc. of all the requests given.
|
12
|
+
class RequestLogAnalyzer
|
13
|
+
attr_reader :log_parser_class
|
14
|
+
attr_reader :summerizer
|
15
|
+
attr_reader :arguments
|
16
|
+
attr_reader :line_types
|
17
|
+
attr_reader :amount
|
18
|
+
attr_reader :fast
|
19
|
+
|
20
|
+
# Initializer. Sets global variables
|
21
|
+
# Options
|
22
|
+
# *<tt>:fast</tt> Only look at request initializers. Faster, but not not all outputs are shown.
|
23
|
+
# *<tt>:guess_database_time</tt> Guess database time if it it not in the log (default for Rails produciton).
|
24
|
+
# *<tt>:merb</tt> Use merb summarizer and parser classes instead of rails.
|
25
|
+
# *<tt>:output_reports</tt> Comma separated string of requested output reports
|
26
|
+
# *<tt>:amount</tt> Amount of lines shown for each result table. Defaults to 10.
|
27
|
+
def initialize(options = {})
|
28
|
+
@fast = options[:fast] || false
|
29
|
+
@guess_database_time = options[:guess_database_time] || false
|
30
|
+
|
31
|
+
if options[:merb]
|
32
|
+
@summarizer = MerbAnalyzer::Summarizer.new(:calculate_database => @guess_database_time)
|
33
|
+
@log_parser_class = MerbAnalyzer::LogParser
|
34
|
+
else
|
35
|
+
@summarizer = RailsAnalyzer::Summarizer.new(:calculate_database => @guess_database_time)
|
36
|
+
@log_parser_class = RailsAnalyzer::LogParser
|
37
|
+
end
|
38
|
+
|
39
|
+
@output_reports = options[:output].split(', ') rescue [:timespan, :most_requested, :total_time, :mean_time, :total_db_time, :mean_db_time, :mean_rendering_time, :blockers, :hourly_spread, :errors]
|
40
|
+
@amount = options[:amount] || 10
|
41
|
+
|
42
|
+
@line_types = @log_parser_class::LOG_LINES.keys
|
43
|
+
@line_types = [:completed] if @fast
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# Substitutes variable elements in a url (like the id field) with a fixed string (like ":id")
|
48
|
+
# This is used to aggregate simular requests.
|
49
|
+
# <tt>request</tt> The request to evaluate.
|
50
|
+
# Returns uniformed url string.
|
51
|
+
# Raises on mailformed request.
|
52
|
+
def request_hasher(request)
|
53
|
+
if request[:url]
|
54
|
+
url = request[:url].downcase.split(/^http[s]?:\/\/[A-z0-9\.-]+/).last.split('?').first # only the relevant URL part
|
55
|
+
url << '/' if url[-1] != '/'[0] && url.length > 1 # pad a trailing slash for consistency
|
56
|
+
|
57
|
+
url.gsub!(/\/\d+-\d+-\d+(\/|$)/, '/:date') # Combine all (year-month-day) queries
|
58
|
+
url.gsub!(/\/\d+-\d+(\/|$)/, '/:month') # Combine all date (year-month) queries
|
59
|
+
url.gsub!(/\/\d+[\w-]*/, '/:id') # replace identifiers in URLs
|
60
|
+
|
61
|
+
return url
|
62
|
+
elsif request[:controller] && request[:action]
|
63
|
+
return "#{request[:controller]}##{request[:action]}"
|
64
|
+
else
|
65
|
+
raise 'Cannot hash this request! ' + request.inspect
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Print results using a ASCII table.
|
70
|
+
# <tt>summarizer</tt> The summarizer containg information to draw the table.
|
71
|
+
# <tt>field</tt> The field containing the data to be printed
|
72
|
+
# <tt>amount</tt> The length of the table (defaults to 20)
|
73
|
+
def print_table(summarizer, field, amount = @amount)
|
74
|
+
summarizer.sort_actions_by(field).reverse[0, amount.to_i].each do |a|
|
75
|
+
# As we show count by default, show totaltime if we sort by count
|
76
|
+
field = :total_time if field == :count
|
77
|
+
|
78
|
+
puts "%-50s: %10.03fs [#{green("%d requests")}]" % [a[0], a[1][field], a[1][:count]]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Execute the analyze
|
83
|
+
def analyze_this(files = [])
|
84
|
+
# Walk through al the files given via the arguments.
|
85
|
+
files.each do |log_file|
|
86
|
+
puts "Processing #{@line_types.join(', ')} log lines from #{log_file}..."
|
87
|
+
|
88
|
+
parser = @log_parser_class.new(log_file)
|
89
|
+
|
90
|
+
# add progress bar
|
91
|
+
unless @fast
|
92
|
+
pbar = ProgressBar.new(green(log_file), File.size(log_file))
|
93
|
+
parser.progress { |pos, total| (pos == :finished) ? pbar.finish : pbar.set(pos) }
|
94
|
+
end
|
95
|
+
|
96
|
+
parser.each(*line_types) do |request|
|
97
|
+
@summarizer.group(request) { |r| request_hasher(r) }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Select the reports to output and generate them.
|
102
|
+
@output_reports.each do |report|
|
103
|
+
report_location = "#{File.dirname(__FILE__)}/../output/#{report}.rb"
|
104
|
+
|
105
|
+
if File.exist?(report_location)
|
106
|
+
eval File.read(report_location)
|
107
|
+
else
|
108
|
+
puts "\nERROR: Output report #{report} not found!"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def analyze_with_virtual_mongrels(files = [])
|
114
|
+
# Walk through al the files given via the arguments.
|
115
|
+
files.each do |log_file|
|
116
|
+
puts "Processing #{@line_types.join(', ')} log lines from #{log_file}..."
|
117
|
+
|
118
|
+
parser = @log_parser_class.new(log_file)
|
119
|
+
|
120
|
+
virtual_mongrels = []
|
121
|
+
|
122
|
+
line = 0
|
123
|
+
|
124
|
+
parser.each(*line_types) do |request|
|
125
|
+
line += 1
|
126
|
+
|
127
|
+
puts "Number of mongrels: #{virtual_mongrels.length}"
|
128
|
+
puts "Line number: #{line}"
|
129
|
+
|
130
|
+
case request[:type]
|
131
|
+
when :started
|
132
|
+
puts 'Spawned new virtual mongrel'
|
133
|
+
new_mongrel = VirtualMongrel.new(:start_line => line, :calculate_database => @guess_database_time, :running_mongrels => virtual_mongrels.length + 1)
|
134
|
+
new_mongrel.group(request)
|
135
|
+
virtual_mongrels << new_mongrel
|
136
|
+
else
|
137
|
+
completed_mongrel = virtual_mongrels.first
|
138
|
+
completed_mongrel.group(request)
|
139
|
+
completed_mongrel.update_running_mongrels(virtual_mongrels.length)
|
140
|
+
completed_mongrel.save
|
141
|
+
end
|
142
|
+
|
143
|
+
keep_virtual_mongrels = []
|
144
|
+
|
145
|
+
virtual_mongrels.each do |mongrel|
|
146
|
+
if mongrel.die_line >= line && mongrel.status == :started
|
147
|
+
keep_virtual_mongrels << mongrel
|
148
|
+
else
|
149
|
+
puts 'Destroyed virtual mongrel!'
|
150
|
+
puts ""
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
virtual_mongrels = keep_virtual_mongrels
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
end
|
data/tasks/test.rake
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
Processing DashboardController#index (for 130.89.162.199 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 130.89.162.199 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 130.89.162.199 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: Gaby Somers, 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 130.89.162.199 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]
|
@@ -0,0 +1,5 @@
|
|
1
|
+
Jul 13 06:25:58 10.1.1.32 app_p [1957]: Processing EmployeeController#index (for 10.1.1.33 at 2008-07-13 06:25:58) [GET]
|
2
|
+
Jul 13 06:25:58 10.1.1.32 app_p [1957]: Session ID: bd1810833653be11c38ad1e5675635bd
|
3
|
+
Jul 13 06:25:58 10.1.1.32 app_p [1957]: Parameters: {"format"=>"xml", "action"=>"index}
|
4
|
+
Jul 13 06:25:58 10.1.1.32 app_p [1957]: Rendering employees
|
5
|
+
Jul 13 06:25:58 10.1.1.32 app_p [1957]: Completed in 0.21665 (4 reqs/sec) | Rendering: 0.00926 (4%) | DB: 0.00000 (0%) | 200 OK [http://example.com/employee.xml]
|
@@ -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 willem@depillem.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://floorplanner.local/demo]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Processing CachedController#cached (for 1.1.1.1 at 2008-12-24 07:36:53) [GET]
|
2
|
+
Parameters: {"action"=>"cached", "controller"=>"cached"}
|
3
|
+
Logging in from session data...
|
4
|
+
Logging in using cookie...
|
5
|
+
Using locale: zh-Hans, http-accept: ["zh-CN", "zh-HK", "zh-TW", "en-US"], session: , det browser: zh-Hans, det domain: , user pref locale:
|
6
|
+
Referer: http://www.example.com/referer
|
7
|
+
Cached fragment hit: views/zh-Hans-www-cached-cached-all-CN--- (0.0ms)
|
8
|
+
Filter chain halted as [#<ActionController::Caching::Actions::ActionCacheFilter:0x2a999ad620 @check=nil, @options={:store_options=>{}, :layout=>nil, :cache_path=>#<Proc:0x0000002a999b8890@/app/controllers/cached_controller.rb:8>}>] rendered_or_redirected.
|
9
|
+
Filter chain halted as [#<ActionController::Filters::AroundFilter:0x2a999ad120 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"cached"}>, :if=>:not_logged_in?, :unless=>nil}, @method=#<ActionController::Caching::Actions::ActionCacheFilter:0x2a999ad620 @check=nil, @options={:store_options=>{}, :layout=>nil, :cache_path=>#<Proc:0x0000002a999b8890@/app/controllers/cached_controller.rb:8>}>>] did_not_yield.
|
10
|
+
Completed in 3ms (View: 0, DB: 0) | 200 OK [http://www.example.com/cached/cached/]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Processing AccountController#dashboard (for 1.1.1.1 at 2008-12-24 07:36:49) [GET]
|
2
|
+
Parameters: {"action"=>"dashboard", "controller"=>"account", "first_use"=>"true"}
|
3
|
+
Logging in from session data...
|
4
|
+
|
5
|
+
|
6
|
+
Processing ProjectsController#new (for 1.1.1.1 at 2008-12-24 07:36:49) [GET]
|
7
|
+
Parameters: {"action"=>"new", "controller"=>"projects"}
|
8
|
+
Rendering template within layouts/default
|
9
|
+
Rendering account/dashboard
|
10
|
+
Logging in from session data...
|
11
|
+
Logging in using cookie...
|
12
|
+
Using locale: en-US, http-accept: [], session: , det browser: , det domain: , user pref locale:
|
13
|
+
Rendered shared/_maintenance (0.6ms)
|
14
|
+
Rendering template within layouts/templates/general_default/index.html.erb
|
15
|
+
Rendered projects/_recent_designs (4.3ms)
|
16
|
+
Rendered projects/_project (13.6ms)
|
17
|
+
Rendered projects/_projects (18.7ms)
|
18
|
+
Rendered layouts/_menu (1.4ms)
|
19
|
+
Completed in 36ms (View: 30, DB: 3) | 200 OK [http://www.example.com/projects/new]
|
20
|
+
Rendered layouts/_actions (0.3ms)
|
21
|
+
Rendered layouts/_menu (1.6ms)
|
22
|
+
Rendered layouts/_tabbar (1.9ms)
|
23
|
+
Rendered layouts/_footer (3.2ms)
|
24
|
+
Completed in 50ms (View: 41, DB: 4) | 200 OK [http://www.example.com/dashboard?first_use=true]
|
@@ -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}
|