60 lines
1.7 KiB
Ruby
60 lines
1.7 KiB
Ruby
# 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
|