4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/pghero/methods/query_stats.rb', line 4
def query_stats(historical: false, start_at: nil, end_at: nil, min_average_time: nil, min_calls: nil, **options)
current_query_stats = historical && end_at && end_at < Time.now ? [] : current_query_stats(**options)
historical_query_stats = historical && historical_query_stats_enabled? ? historical_query_stats(start_at: start_at, end_at: end_at, **options) : []
query_stats = combine_query_stats((current_query_stats + historical_query_stats).group_by { |q| [q[:query_hash], q[:user]] })
query_stats = combine_query_stats(query_stats.group_by { |q| [normalize_query(q[:query]), q[:user]] })
all_queries_total_minutes = [current_query_stats, historical_query_stats].sum { |s| (s.first || {})[:all_queries_total_minutes] || 0 }
query_stats.each do |query|
query[:average_time] = query[:total_minutes] * 1000 * 60 / query[:calls]
query[:total_percent] = query[:total_minutes] * 100.0 / all_queries_total_minutes
end
sort = options[:sort] || "total_minutes"
query_stats = query_stats.sort_by { |q| -q[sort.to_sym] }.first(100)
if min_average_time
query_stats.reject! { |q| q[:average_time] < min_average_time }
end
if min_calls
query_stats.reject! { |q| q[:calls] < min_calls }
end
query_stats
end
|