50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module Entities
|
|
class Environment < Entities::EnvironmentBasic
|
|
include RequestAwareEntity
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
expose :project, using: Entities::BasicProjectDetails
|
|
expose :last_deployment, using: Entities::Deployment, if: { last_deployment: true }
|
|
expose :state
|
|
|
|
expose :enable_advanced_logs_querying, if: -> (*) { can_read_pod_logs? } do |environment|
|
|
environment.elastic_stack_available?
|
|
end
|
|
|
|
expose :logs_api_path, if: -> (*) { can_read_pod_logs? } do |environment|
|
|
if environment.elastic_stack_available?
|
|
elasticsearch_project_logs_path(environment.project, environment_name: environment.name, format: :json)
|
|
else
|
|
k8s_project_logs_path(environment.project, environment_name: environment.name, format: :json)
|
|
end
|
|
end
|
|
|
|
expose :gitlab_managed_apps_logs_path, if: -> (*) { can_read_pod_logs? && cluster } do |environment|
|
|
::Clusters::ClusterPresenter.new(cluster, current_user: current_user).gitlab_managed_apps_logs_path # rubocop: disable CodeReuse/Presenter
|
|
end
|
|
|
|
private
|
|
|
|
alias_method :environment, :object
|
|
|
|
def can_read_pod_logs?
|
|
strong_memoize(:can_read_pod_logs) do
|
|
current_user&.can?(:read_pod_logs, environment.project)
|
|
end
|
|
end
|
|
|
|
def cluster
|
|
strong_memoize(:cluster) do
|
|
environment&.last_deployment&.cluster
|
|
end
|
|
end
|
|
|
|
def current_user
|
|
options[:current_user]
|
|
end
|
|
end
|
|
end
|
|
end
|