Welcome to mirror list, hosted at ThFree Co, Russian Federation.

events_query.rb « cycle_analytics « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 2418832ccc2fe02dc93a6acd71bdc13f6e100b46 (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
module Gitlab
  module CycleAnalytics
    class EventsQuery
      attr_reader :project

      def initialize(project:, options: {})
        @project = project
        @from = options[:from]
        @branch = options[:branch]
        @fetcher = Gitlab::CycleAnalytics::MetricsFetcher.new(project: project, from: @from, branch: @branch)
      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