Skip to content

Commit ce8cd7f

Browse files
committed
Log DB query count per request
1 parent 9b0f81e commit ce8cd7f

File tree

15 files changed

+21
-49
lines changed

15 files changed

+21
-49
lines changed

lib/cloud_controller/db.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def self.connect(opts, logger)
2626
connection_options = VCAP::CloudController::DbConnection::OptionsFactory.build(opts)
2727

2828
db = get_connection(opts, connection_options)
29+
db.extension(:request_query_counter)
2930

3031
if opts[:log_db_queries]
3132
db.logger = logger
@@ -38,7 +39,6 @@ def self.connect(opts, logger)
3839

3940
db.extension(:query_length_logging)
4041
db.opts[:query_size_log_threshold] = opts[:query_size_log_threshold]
41-
db.extension(:request_query_counter)
4242
end
4343
db.default_collate = 'utf8_bin' if db.database_type == :mysql
4444
add_connection_expiration_extension(db, opts)

lib/cloud_controller/logs/request_logs.rb

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

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

3232
request = ActionDispatch::Request.new(env)
33-
query_count = Thread.current[:db_query_count]
3433
@logger.info("Completed #{status} vcap-request-id: #{request_id}",
3534
{ status_code: status,
3635
time_taken_in_ms: time_taken,

lib/cloud_controller/metrics/prometheus_updater.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def self.allow_pid_label
1818

1919
DURATION_BUCKETS = [5, 10, 30, 60, 300, 600, 890].freeze
2020
CONNECTION_DURATION_BUCKETS = [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10].freeze
21-
QUERY_COUNT_BUCKETS = [1, 5, 10, 25, 50, 100, 200].freeze
2221
DELAYED_JOB_METRIC_BUCKETS = [0.01, 0.05, 0.1, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 600].freeze
2322

2423
METRICS = [
@@ -30,7 +29,6 @@ def self.allow_pid_label
3029
{ type: :histogram, name: :cc_staging_failed_duration_seconds, docstring: 'Durations of failed staging events', buckets: DURATION_BUCKETS },
3130
{ type: :gauge, name: :cc_requests_outstanding_total, docstring: 'Requests outstanding', aggregation: :sum },
3231
{ type: :counter, name: :cc_requests_completed_total, docstring: 'Requests completed' },
33-
{ type: :histogram, name: :cc_db_queries_per_request, docstring: 'DB queries per request', buckets: QUERY_COUNT_BUCKETS },
3432
{ type: :gauge, name: :cc_vitals_started_at, docstring: 'CloudController Vitals: started_at', aggregation: :most_recent },
3533
{ type: :gauge, name: :cc_vitals_mem_bytes, docstring: 'CloudController Vitals: mem_bytes', aggregation: :most_recent },
3634
{ type: :gauge, name: :cc_vitals_cpu_load_avg, docstring: 'CloudController Vitals: cpu_load_avg', aggregation: :most_recent },
@@ -191,10 +189,6 @@ def report_staging_failure_metrics(duration_ns)
191189
update_histogram_metric(:cc_staging_failed_duration_seconds, nanoseconds_to_seconds(duration_ns))
192190
end
193191

194-
def record_db_query_count(count)
195-
update_histogram_metric(:cc_db_queries_per_request, count)
196-
end
197-
198192
private
199193

200194
def register(metric)

lib/cloud_controller/metrics/request_metrics.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@ def start_request
1515

1616
def complete_request(status, query_count)
1717
@statsd_updater.complete_request(status)
18-
@statsd_updater.record_db_query_count(query_count)
1918

2019
@prometheus_updater.increment_counter_metric(:cc_requests_completed_total)
2120
@prometheus_updater.decrement_gauge_metric(:cc_requests_outstanding_total)
22-
@prometheus_updater.record_db_query_count(query_count)
2321
end
2422
end
2523
end

lib/cloud_controller/metrics/statsd_updater.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ def complete_request(status)
110110
end
111111
end
112112

113-
def record_db_query_count(count)
114-
@statsd.gauge('cc.requests.db_query_count', count)
115-
end
116-
117113
private
118114

119115
def nanoseconds_to_milliseconds(time_ns)

lib/sequel/extensions/request_query_counter.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
module Sequel
22
module RequestQueryCounter
33
def log_connection_yield(sql, conn, args=nil)
4-
Thread.current[:db_query_count] ||= 0
5-
Thread.current[:db_query_count] += 1
4+
VCAP::Request.db_query_count = (VCAP::Request.db_query_count || 0) + 1
65
super
76
end
87
end

lib/vcap/request.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ def b3_span_id=(span_id)
5555
def b3_span_id
5656
Thread.current[:b3_span_id]
5757
end
58+
59+
def db_query_count=(count)
60+
Thread.current[:db_query_count] = count
61+
end
62+
63+
def db_query_count
64+
Thread.current[:db_query_count]
65+
end
5866
end
5967
end
6068
end

middleware/request_logs.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ def call(env)
1515
# convert to milliseconds
1616
time_taken = (Time.now - start_time) * 1000
1717
time_taken = time_taken.to_i
18-
@request_logs.complete_request(request_id, status, env, time_taken)
18+
query_count = VCAP::Request.db_query_count
19+
@request_logs.complete_request(request_id, status, env, time_taken, query_count)
1920

2021
[status, headers, body]
2122
end

middleware/request_metrics.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def initialize(app, request_metrics)
77
end
88

99
def call(env)
10-
Thread.current[:db_query_count] = 0
10+
VCAP::Request.db_query_count = 0
1111
@request_metrics.start_request
1212

1313
status, headers, body = @app.call(env)
@@ -18,8 +18,8 @@ def call(env)
1818
status = 500
1919
raise e
2020
ensure
21-
query_count = Thread.current[:db_query_count]
22-
Thread.current[:db_query_count] = nil
21+
query_count = VCAP::Request.db_query_count
22+
VCAP::Request.db_query_count = nil
2323
@request_metrics.complete_request(status, query_count)
2424
end
2525
end

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module VCAP::CloudController::Logs
4646
end
4747

4848
it 'logs the completion of the request' do
49-
request_logs.complete_request(request_id, status, env, time_taken)
49+
request_logs.complete_request(request_id, status, env, time_taken, nil)
5050
expect(logger).to have_received(:info).with(
5151
/\ACompleted 200 vcap-request-id: ID/,
5252
time_taken_in_ms: 30,
@@ -60,7 +60,7 @@ module VCAP::CloudController::Logs
6060

6161
context 'without a matching start request' do
6262
it 'does not log the completion of the request' do
63-
request_logs.complete_request(request_id, status, env, time_taken)
63+
request_logs.complete_request(request_id, status, env, time_taken, nil)
6464
expect(logger).not_to have_received(:info)
6565
end
6666
end

0 commit comments

Comments
 (0)