wvanbergen-request-log-analyzer 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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}
|