summaryrefslogtreecommitdiff
path: root/app/finders/projects/serverless/functions_finder.rb
blob: 2f2816a4a083051c145b5e76a443673ecc8ad80f (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
54
55
56
57
58
59
60
# frozen_string_literal: true

module Projects
  module Serverless
    class FunctionsFinder
      def initialize(clusters)
        @clusters = clusters
      end

      def execute
        knative_services.flatten.compact
      end

      def installed?
        clusters_with_knative_installed.exists?
      end

      def service(environment_scope, name)
        knative_service(environment_scope, name)&.first
      end

      private

      def knative_service(environment_scope, name)
        clusters_with_knative_installed.preload_knative.map do |cluster|
          next if environment_scope != cluster.environment_scope

          services = cluster.application_knative.services_for(ns: cluster.platform_kubernetes&.actual_namespace)
            .select { |svc| svc["metadata"]["name"] == name }

          add_metadata(cluster, services).first unless services.nil?
        end
      end

      def knative_services
        clusters_with_knative_installed.preload_knative.map do |cluster|
          services = cluster.application_knative.services_for(ns: cluster.platform_kubernetes&.actual_namespace)
          add_metadata(cluster, services) unless services.nil?
        end
      end

      def add_metadata(cluster, services)
        services.each do |s|
          s["environment_scope"] = cluster.environment_scope
          s["cluster_id"] = cluster.id

          if services.length == 1
            s["podcount"] = cluster.application_knative.service_pod_details(
              cluster.platform_kubernetes&.actual_namespace,
              s["metadata"]["name"]).length
          end
        end
      end

      def clusters_with_knative_installed
        @clusters.with_knative_installed
      end
    end
  end
end