summaryrefslogtreecommitdiff
path: root/lib/gitlab/metrics/dashboard/finder.rb
blob: 49ea5c7d4f2130f12cd2866d8a3b7d68ac94082f (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
50
51
52
53
# frozen_string_literal: true

# Returns DB-supplmented dashboard info for determining
# the layout of UI. Intended entry-point for the Metrics::Dashboard
# module.
module Gitlab
  module Metrics
    module Dashboard
      class Finder
        class << self
          # Returns a formatted dashboard packed with DB info.
          # @return [Hash]
          def find(project, user, environment, dashboard_path = nil)
            service = system_dashboard?(dashboard_path) ? system_service : project_service

            service
              .new(project, user, environment: environment, dashboard_path: dashboard_path)
              .get_dashboard
          end

          # Summary of all known dashboards.
          # @return [Array<Hash>] ex) [{ path: String, default: Boolean }]
          def find_all_paths(project)
            project.repository.metrics_dashboard_paths
          end

          # Summary of all known dashboards. Used to populate repo cache.
          # Prefer #find_all_paths.
          def find_all_paths_from_source(project)
            Gitlab::Metrics::Dashboard::Cache.delete_all!

            system_service.all_dashboard_paths(project)
            .+ project_service.all_dashboard_paths(project)
          end

          private

          def system_service
            Gitlab::Metrics::Dashboard::SystemDashboardService
          end

          def project_service
            Gitlab::Metrics::Dashboard::ProjectDashboardService
          end

          def system_dashboard?(filepath)
            !filepath || system_service.system_dashboard?(filepath)
          end
        end
      end
    end
  end
end