Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/entities/environment.rb')
-rw-r--r--lib/api/entities/environment.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/api/entities/environment.rb b/lib/api/entities/environment.rb
index cb39ce1b13a..91867f3403d 100644
--- a/lib/api/entities/environment.rb
+++ b/lib/api/entities/environment.rb
@@ -3,9 +3,48 @@
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