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/gitlab/kubernetes/node.rb')
-rw-r--r--lib/gitlab/kubernetes/node.rb78
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/gitlab/kubernetes/node.rb b/lib/gitlab/kubernetes/node.rb
new file mode 100644
index 00000000000..bd765ef3852
--- /dev/null
+++ b/lib/gitlab/kubernetes/node.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Kubernetes
+ class Node
+ def initialize(cluster)
+ @cluster = cluster
+ end
+
+ def all
+ nodes.map do |node|
+ attributes = node(node)
+ attributes.merge(node_metrics(node))
+ end
+ end
+
+ private
+
+ attr_reader :cluster
+
+ def nodes_from_cluster
+ graceful_request { cluster.kubeclient.get_nodes }
+ end
+
+ def nodes_metrics_from_cluster
+ graceful_request { cluster.kubeclient.metrics_client.get_nodes }
+ end
+
+ def nodes
+ @nodes ||= nodes_from_cluster[:response].to_a
+ end
+
+ def nodes_metrics
+ @nodes_metrics ||= nodes_metrics_from_cluster[:response].to_a
+ end
+
+ def node_metrics_from_node(node)
+ nodes_metrics.find do |node_metric|
+ node_metric.metadata.name == node.metadata.name
+ end
+ end
+
+ def graceful_request(&block)
+ ::Gitlab::Kubernetes::KubeClient.graceful_request(cluster.id, &block)
+ end
+
+ def node(node)
+ {
+ 'metadata' => {
+ 'name' => node.metadata.name
+ },
+ 'status' => {
+ 'capacity' => {
+ 'cpu' => node.status.capacity.cpu,
+ 'memory' => node.status.capacity.memory
+ },
+ 'allocatable' => {
+ 'cpu' => node.status.allocatable.cpu,
+ 'memory' => node.status.allocatable.memory
+ }
+ }
+ }
+ end
+
+ def node_metrics(node)
+ node_metrics = node_metrics_from_node(node)
+ return {} unless node_metrics
+
+ {
+ 'usage' => {
+ 'cpu' => node_metrics.usage.cpu,
+ 'memory' => node_metrics.usage.memory
+ }
+ }
+ end
+ end
+ end
+end