Skip to content

Commit 3912884

Browse files
authored
CAPI logs should for request complete should include the response time (#4089)
* TPCF-27209 - CAPI logs should for request complete should include the response time Add time taken, request_method and request_full path to complete request log * TPCF-27209 - CAPI logs should for request complete should include the response time Add time taken to json based on code review comments * CAPI logs should for request complete should include the response time Convert time taken to ms. Fix Robocop errors. * CAPI logs should for request complete should include the response time Fix Indentation * CAPI logs should for request complete should include the response time Fix indentation * CAPI logs should for request complete should include the response time Fix failed unit test * CAPI logs should for request complete should include the response time Convert time in ms to integer
1 parent 1f38b98 commit 3912884

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

lib/cloud_controller/logs/request_logs.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@ def start_request(request_id, env)
2626
@incomplete_requests.store(request_id, env)
2727
end
2828

29-
def complete_request(request_id, status)
29+
def complete_request(request_id, status, env, time_taken)
3030
return if @incomplete_requests.delete(request_id).nil?
3131

32+
request = ActionDispatch::Request.new(env)
3233
@logger.info("Completed #{status} vcap-request-id: #{request_id}",
33-
{ status_code: status })
34+
{ status_code: status,
35+
time_taken_in_ms: time_taken,
36+
request_method: request.request_method,
37+
request_fullpath: request.filtered_path })
3438
end
3539

3640
def log_incomplete_requests

middleware/request_logs.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ def initialize(app, request_logs)
99
def call(env)
1010
request_id = env['cf.request_id']
1111
@request_logs.start_request(request_id, env)
12+
start_time = Time.now
1213

1314
status, headers, body = @app.call(env)
14-
15-
@request_logs.complete_request(request_id, status)
15+
# convert to milliseconds
16+
time_taken = (Time.now - start_time) * 1000
17+
time_taken = time_taken.to_i
18+
@request_logs.complete_request(request_id, status, env, time_taken)
1619

1720
[status, headers, body]
1821
end

spec/unit/lib/cloud_controller/logs/request_logs_spec.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module VCAP::CloudController::Logs
99
let(:fake_fullpath) { 'fullpath' }
1010
let(:fake_request) { double('request', request_method: 'request_method', ip: fake_ip, filtered_path: 'filtered_path', fullpath: fake_fullpath) }
1111
let(:request_id) { 'ID' }
12+
let(:time_taken) { 30 }
1213
let(:env) { { 'cf.user_guid' => 'user-guid' } }
1314
let(:status) { 200 }
1415

@@ -45,14 +46,20 @@ module VCAP::CloudController::Logs
4546
end
4647

4748
it 'logs the completion of the request' do
48-
request_logs.complete_request(request_id, status)
49-
expect(logger).to have_received(:info).with(/Completed 200 vcap-request-id: ID/, { status_code: 200 })
49+
request_logs.complete_request(request_id, status, env, time_taken)
50+
expect(logger).to have_received(:info).with(
51+
/\ACompleted 200 vcap-request-id: ID/,
52+
time_taken_in_ms: 30,
53+
request_method: 'request_method',
54+
request_fullpath: 'filtered_path',
55+
status_code: 200
56+
)
5057
end
5158
end
5259

5360
context 'without a matching start request' do
5461
it 'does not log the completion of the request' do
55-
request_logs.complete_request(request_id, status)
62+
request_logs.complete_request(request_id, status, env, time_taken)
5663
expect(logger).not_to have_received(:info)
5764
end
5865
end

spec/unit/middleware/request_logs_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module Middleware
2121

2222
it 'calls complete request on request logs after the request' do
2323
middleware.call(env)
24-
expect(request_logs).to have_received(:complete_request).with('ID', 200)
24+
expect(request_logs).to have_received(:complete_request).with('ID', 200, { 'cf.request_id' => 'ID' }, be_a(Numeric))
2525
end
2626
end
2727
end

0 commit comments

Comments
 (0)