5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'app/models/rails_pulse/dashboard/charts/p95_response_time.rb', line 5
def to_chart_data
start_date = 2.weeks.ago.beginning_of_day
requests_by_day = RailsPulse::Request
.where(occurred_at: start_date..)
.select("occurred_at, duration, DATE(occurred_at) as request_date")
.order("request_date, duration")
.group_by { |r| r.request_date.to_date }
(start_date.to_date..Time.current.to_date).each_with_object({}) do |date, hash|
day_requests = requests_by_day[date] || []
if day_requests.empty?
p95_value = 0
else
count = day_requests.length
p95_index = (count * 0.95).ceil - 1
p95_value = day_requests[p95_index].duration.round(0)
end
formatted_date = date.strftime("%b %-d")
hash[formatted_date] = p95_value
end
end
|