blob: 7140d31d536370ecb7d68399ba67acd50e0527aa (
plain)
1
2
3
4
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# frozen_string_literal: true
module Gitlab
module Analytics
module CycleAnalytics
class Average
include Gitlab::Utils::StrongMemoize
include StageQueryHelpers
def initialize(stage:, query:, params: {})
@stage = stage
@query = query
@params = params
end
def seconds
select_average ? select_average['average'] : nil
end
def days
seconds ? seconds.fdiv(1.day) : nil
end
private
attr_reader :stage, :params
# rubocop: disable CodeReuse/ActiveRecord
def select_average
strong_memoize(:select_average) do
execute_query(@query.select(average_in_seconds.as('average')).reorder(nil)).first
end
end
# rubocop: enable CodeReuse/ActiveRecord
def average
Arel::Nodes::NamedFunction.new(
'AVG',
[duration]
)
end
def average_in_seconds
Arel::Nodes::Extract.new(average, :epoch)
end
end
end
end
end
|