summaryrefslogtreecommitdiff
path: root/app/finders/projects/serverless/functions_finder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/projects/serverless/functions_finder.rb')
-rw-r--r--app/finders/projects/serverless/functions_finder.rb153
1 files changed, 0 insertions, 153 deletions
diff --git a/app/finders/projects/serverless/functions_finder.rb b/app/finders/projects/serverless/functions_finder.rb
deleted file mode 100644
index f8ccea6b820..00000000000
--- a/app/finders/projects/serverless/functions_finder.rb
+++ /dev/null
@@ -1,153 +0,0 @@
-# frozen_string_literal: true
-
-module Projects
- module Serverless
- class FunctionsFinder
- include Gitlab::Utils::StrongMemoize
- include ReactiveCaching
-
- attr_reader :project
-
- self.reactive_cache_key = ->(finder) { finder.cache_key }
- self.reactive_cache_work_type = :external_dependency
- self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
-
- MAX_CLUSTERS = 10
-
- def initialize(project)
- @project = project
- end
-
- def execute
- knative_services.flatten.compact
- end
-
- def knative_installed
- return knative_installed_from_cluster?(*cache_key) if available_environments.empty?
-
- states = services_finders.map do |finder|
- finder.knative_detected.tap do |state|
- return state if state == ::Clusters::KnativeServicesFinder::KNATIVE_STATES['checking'] # rubocop:disable Cop/AvoidReturnFromBlocks
- end
- end
-
- states.any? { |state| state == ::Clusters::KnativeServicesFinder::KNATIVE_STATES['installed'] }
- end
-
- def service(environment_scope, name)
- knative_service(environment_scope, name)&.first
- end
-
- def invocation_metrics(environment_scope, name)
- environment = finders_for_scope(environment_scope).first&.environment
-
- if environment.present? && environment.prometheus_adapter&.can_query?
- func = ::Serverless::Function.new(project, name, environment.deployment_namespace)
- environment.prometheus_adapter.query(:knative_invocation, func)
- end
- end
-
- def has_prometheus?(environment_scope)
- finders_for_scope(environment_scope).any? do |finder|
- finder.cluster.integration_prometheus_available?
- end
- end
-
- def self.from_cache(project_id)
- project = Project.find(project_id)
-
- new(project)
- end
-
- def cache_key(*args)
- [project.id]
- end
-
- def calculate_reactive_cache(*)
- # rubocop: disable CodeReuse/ActiveRecord
- project.all_clusters.enabled.take(MAX_CLUSTERS).any? do |cluster|
- cluster.kubeclient.knative_client.discover
- rescue Kubeclient::ResourceNotFoundError
- next
- end
- end
-
- private
-
- def knative_installed_from_cluster?(*cache_key)
- cached_data = with_reactive_cache_memoized(*cache_key) { |data| data }
-
- return ::Clusters::KnativeServicesFinder::KNATIVE_STATES['checking'] if cached_data.nil?
-
- cached_data ? true : false
- end
-
- def with_reactive_cache_memoized(*cache_key)
- strong_memoize(:reactive_cache) do
- with_reactive_cache(*cache_key) { |data| data }
- end
- end
-
- def knative_service(environment_scope, name)
- finders_for_scope(environment_scope).map do |finder|
- services = finder
- .services
- .select { |svc| svc["metadata"]["name"] == name }
-
- attributes = add_metadata(finder, services).first
- next unless attributes
-
- Gitlab::Serverless::Service.new(attributes)
- end
- end
-
- def knative_services
- services_finders.map do |finder|
- attributes = add_metadata(finder, finder.services)
-
- attributes&.map do |attributes|
- Gitlab::Serverless::Service.new(attributes)
- end
- end
- end
-
- def add_metadata(finder, services)
- return if services.nil?
-
- add_pod_count = services.one?
-
- services.each do |s|
- s["environment_scope"] = finder.cluster.environment_scope
- s["environment"] = finder.environment
- s["cluster"] = finder.cluster
-
- if add_pod_count
- s["podcount"] = finder
- .service_pod_details(s["metadata"]["name"])
- .length
- end
- end
- end
-
- def services_finders
- strong_memoize(:services_finders) do
- available_environments.map(&:knative_services_finder).compact
- end
- end
-
- def available_environments
- @project.environments.available.preload_cluster
- end
-
- def finders_for_scope(environment_scope)
- services_finders.select do |finder|
- environment_scope == finder.cluster.environment_scope
- end
- end
-
- def id
- nil
- end
- end
- end
-end