33 lines
878 B
Ruby
33 lines
878 B
Ruby
module Gitlab
|
|
module CycleAnalytics
|
|
class EventsQuery
|
|
def initialize(fetcher:)
|
|
@fetcher = fetcher
|
|
end
|
|
|
|
def execute(stage_class)
|
|
@stage_class = stage_class
|
|
|
|
ActiveRecord::Base.connection.exec_query(query.to_sql)
|
|
end
|
|
|
|
private
|
|
|
|
def query
|
|
base_query = @fetcher.base_query_for(@stage_class.stage)
|
|
diff_fn = @fetcher.subtract_datetimes_diff(base_query, @stage_class.start_time_attrs, @stage_class.end_time_attrs)
|
|
|
|
@stage_class.custom_query(base_query)
|
|
|
|
base_query.project(extract_epoch(diff_fn).as('total_time'), *@stage_class.projections).order(@stage_class.order.desc)
|
|
end
|
|
|
|
def extract_epoch(arel_attribute)
|
|
return arel_attribute unless Gitlab::Database.postgresql?
|
|
|
|
Arel.sql(%Q{EXTRACT(EPOCH FROM (#{arel_attribute.to_sql}))})
|
|
end
|
|
end
|
|
end
|
|
end
|