mirror of
https://github.com/czhu12/canine.git
synced 2025-12-25 05:10:27 -06:00
update new metrics
This commit is contained in:
@@ -3,7 +3,7 @@ module NamespaceMetricsHelper
|
||||
include MetricsHelper
|
||||
|
||||
def configure(nameable)
|
||||
@pods = K8::Metrics::Api::Pod.fetch(nameable.cluster, nameable.name)
|
||||
@pods = K8::Metrics::Api::Pod.fetch(nameable.cluster, nameable.name, current_user)
|
||||
@time_range = params[:time_range] || "2h"
|
||||
start_time = parse_time_range(@time_range)
|
||||
end_time = Time.now
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
class Scheduled::FetchMetricsJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform
|
||||
def perform(user_id)
|
||||
user = User.find(user_id)
|
||||
Cluster.running.each do |cluster|
|
||||
nodes = K8::Metrics::Metrics.call(cluster)
|
||||
nodes = K8::Metrics::Metrics.call(cluster, user)
|
||||
rescue => e
|
||||
Rails.logger.error("Error fetching metrics for cluster #{cluster.name}: #{e.message}")
|
||||
end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
module K8::Metrics::Api
|
||||
class Node
|
||||
extend StorageHelper
|
||||
def self.ls(cluster, with_namespaces: true)
|
||||
def self.ls(cluster, user, with_namespaces: true)
|
||||
# Here, run kubectl top nodes
|
||||
kubectl = K8::Kubectl.new(cluster)
|
||||
kubectl = K8::Kubectl.new(K8::Connection.new(cluster, user))
|
||||
response = kubectl.call("top nodes")
|
||||
parsed_data = parse_output(response)
|
||||
# get --raw /apis/metrics.k8s.io/v1beta1/nodes/#{node}
|
||||
@@ -27,14 +27,14 @@ module K8::Metrics::Api
|
||||
if with_namespaces
|
||||
cluster.projects.each do |project|
|
||||
begin
|
||||
node.namespaces[project.name] = K8::Metrics::Api::Pod.fetch(cluster, project.name)
|
||||
node.namespaces[project.name] = K8::Metrics::Api::Pod.fetch(cluster, project.name, user)
|
||||
rescue StandardError => e
|
||||
Rails.logger.error("Failed to fetch pod metrics for project #{project.name}: #{e.message}")
|
||||
end
|
||||
end
|
||||
cluster.add_ons.each do |add_on|
|
||||
begin
|
||||
node.namespaces[add_on.name] = K8::Metrics::Api::Pod.fetch(cluster, add_on.name)
|
||||
node.namespaces[add_on.name] = K8::Metrics::Api::Pod.fetch(cluster, add_on.name, user)
|
||||
rescue StandardError => e
|
||||
Rails.logger.error("Failed to fetch pod metrics for add-on #{add_on.name}: #{e.message}")
|
||||
end
|
||||
@@ -100,8 +100,8 @@ module K8::Metrics::Api
|
||||
class Pod
|
||||
extend StorageHelper
|
||||
|
||||
def self.fetch(cluster, namespace)
|
||||
kubectl = K8::Kubectl.new(cluster)
|
||||
def self.fetch(cluster, namespace, user)
|
||||
kubectl = K8::Kubectl.new(K8::Connection.new(cluster, user))
|
||||
response = kubectl.call("top pods -n #{namespace}")
|
||||
parsed_data = parse_output(response)
|
||||
parsed_data.map do |data|
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
include StorageHelper
|
||||
|
||||
class K8::Metrics::Metrics
|
||||
def self.call(cluster)
|
||||
nodes = K8::Metrics::Api::Node.ls(cluster)
|
||||
def self.call(cluster, user)
|
||||
nodes = K8::Metrics::Api::Node.ls(cluster, user)
|
||||
metrics = []
|
||||
nodes.each do |node|
|
||||
tags = [ "node:#{node.name}" ]
|
||||
|
||||
@@ -13,7 +13,7 @@ class Async::Clusters::Metrics::ShowViewModel < Async::BaseViewModel
|
||||
end
|
||||
|
||||
def async_render
|
||||
nodes = K8::Metrics::Api::Node.ls(cluster)
|
||||
nodes = K8::Metrics::Api::Node.ls(cluster, current_user)
|
||||
render "clusters/metrics/live_metrics", locals: {
|
||||
nodes: nodes
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ class Async::K8::NodesViewModel < Async::BaseViewModel
|
||||
end
|
||||
|
||||
def nodes
|
||||
@nodes ||= K8::Metrics::Api::Node.ls(cluster)
|
||||
@nodes ||= K8::Metrics::Api::Node.ls(cluster, current_user)
|
||||
end
|
||||
|
||||
def initial_render
|
||||
|
||||
@@ -5,8 +5,9 @@ namespace :metrics do
|
||||
end
|
||||
|
||||
desc "Poll Kubernetes cluster metrics"
|
||||
task fetch: :environment do
|
||||
Scheduled::FetchMetricsJob.perform_now
|
||||
task fetch: :environment do |_, args|
|
||||
user_id = args[:user_id] || 1
|
||||
Scheduled::FetchMetricsJob.perform_now(user_id)
|
||||
end
|
||||
|
||||
desc "Flush metrics older than 1 week"
|
||||
|
||||
@@ -3,6 +3,7 @@ require 'rails_helper'
|
||||
RSpec.describe K8::Metrics::Metrics do
|
||||
describe '.call' do
|
||||
let(:cluster) { create(:cluster) }
|
||||
let(:user) { create(:user) }
|
||||
let(:pod) do
|
||||
double('Pod', name: 'pod1', cpu: 1, memory: 512)
|
||||
end
|
||||
@@ -24,10 +25,10 @@ RSpec.describe K8::Metrics::Metrics do
|
||||
end
|
||||
|
||||
before do
|
||||
allow(K8::Metrics::Api::Node).to receive(:ls).with(cluster).and_return([ node ])
|
||||
allow(K8::Metrics::Api::Node).to receive(:ls).with(cluster, user).and_return([ node ])
|
||||
end
|
||||
|
||||
subject { K8::Metrics::Metrics.call(cluster) }
|
||||
subject { K8::Metrics::Metrics.call(cluster, user) }
|
||||
|
||||
it 'creates metrics for nodes' do
|
||||
expect { subject }.to change { cluster.metrics.count }.by(4)
|
||||
|
||||
Reference in New Issue
Block a user