summaryrefslogtreecommitdiff
path: root/app/services/pod_logs
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/pod_logs')
-rw-r--r--app/services/pod_logs/base_service.rb6
-rw-r--r--app/services/pod_logs/elasticsearch_service.rb21
-rw-r--r--app/services/pod_logs/kubernetes_service.rb19
3 files changed, 36 insertions, 10 deletions
diff --git a/app/services/pod_logs/base_service.rb b/app/services/pod_logs/base_service.rb
index 8cc8fb913a2..2451ab8e0ce 100644
--- a/app/services/pod_logs/base_service.rb
+++ b/app/services/pod_logs/base_service.rb
@@ -62,13 +62,11 @@ module PodLogs
end
def get_raw_pods(result)
- result[:raw_pods] = cluster.kubeclient.get_pods(namespace: namespace)
-
- success(result)
+ raise NotImplementedError
end
def get_pod_names(result)
- result[:pods] = result[:raw_pods].map(&:metadata).map(&:name)
+ result[:pods] = result[:raw_pods].map { |p| p[:name] }
success(result)
end
diff --git a/app/services/pod_logs/elasticsearch_service.rb b/app/services/pod_logs/elasticsearch_service.rb
index 0a5185999ab..aac0fa424ca 100644
--- a/app/services/pod_logs/elasticsearch_service.rb
+++ b/app/services/pod_logs/elasticsearch_service.rb
@@ -23,6 +23,23 @@ module PodLogs
super + %i(cursor)
end
+ def get_raw_pods(result)
+ client = cluster&.application_elastic_stack&.elasticsearch_client
+ return error(_('Unable to connect to Elasticsearch')) unless client
+
+ result[:raw_pods] = ::Gitlab::Elasticsearch::Logs::Pods.new(client).pods(namespace)
+
+ success(result)
+ rescue Elasticsearch::Transport::Transport::ServerError => e
+ ::Gitlab::ErrorTracking.track_exception(e)
+
+ error(_('Elasticsearch returned status code: %{status_code}') % {
+ # ServerError is the parent class of exceptions named after HTTP status codes, eg: "Elasticsearch::Transport::Transport::Errors::NotFound"
+ # there is no method on the exception other than the class name to determine the type of error encountered.
+ status_code: e.class.name.split('::').last
+ })
+ end
+
def check_times(result)
result[:start_time] = params['start_time'] if params.key?('start_time') && Time.iso8601(params['start_time'])
result[:end_time] = params['end_time'] if params.key?('end_time') && Time.iso8601(params['end_time'])
@@ -48,7 +65,7 @@ module PodLogs
client = cluster&.application_elastic_stack&.elasticsearch_client
return error(_('Unable to connect to Elasticsearch')) unless client
- response = ::Gitlab::Elasticsearch::Logs.new(client).pod_logs(
+ response = ::Gitlab::Elasticsearch::Logs::Lines.new(client).pod_logs(
namespace,
pod_name: result[:pod_name],
container_name: result[:container_name],
@@ -69,7 +86,7 @@ module PodLogs
# there is no method on the exception other than the class name to determine the type of error encountered.
status_code: e.class.name.split('::').last
})
- rescue ::Gitlab::Elasticsearch::Logs::InvalidCursor
+ rescue ::Gitlab::Elasticsearch::Logs::Lines::InvalidCursor
error(_('Invalid cursor value provided'))
end
end
diff --git a/app/services/pod_logs/kubernetes_service.rb b/app/services/pod_logs/kubernetes_service.rb
index 31e26912c73..0a8072a9037 100644
--- a/app/services/pod_logs/kubernetes_service.rb
+++ b/app/services/pod_logs/kubernetes_service.rb
@@ -21,6 +21,17 @@ module PodLogs
private
+ def get_raw_pods(result)
+ result[:raw_pods] = cluster.kubeclient.get_pods(namespace: namespace).map do |pod|
+ {
+ name: pod.metadata.name,
+ container_names: pod.spec.containers.map(&:name)
+ }
+ end
+
+ success(result)
+ end
+
def check_pod_name(result)
# If pod_name is not received as parameter, get the pod logs of the first
# pod of this namespace.
@@ -43,11 +54,11 @@ module PodLogs
end
def check_container_name(result)
- pod_details = result[:raw_pods].find { |p| p.metadata.name == result[:pod_name] }
- containers = pod_details.spec.containers.map(&:name)
+ pod_details = result[:raw_pods].find { |p| p[:name] == result[:pod_name] }
+ container_names = pod_details[:container_names]
# select first container if not specified
- result[:container_name] ||= containers.first
+ result[:container_name] ||= container_names.first
unless result[:container_name]
return error(_('No containers available'))
@@ -58,7 +69,7 @@ module PodLogs
' %{max_length} chars' % { max_length: K8S_NAME_MAX_LENGTH }))
end
- unless containers.include?(result[:container_name])
+ unless container_names.include?(result[:container_name])
return error(_('Container does not exist'))
end