Files
ubicloud/bin/monitor
mohi-kalantari 0549ba75cc Introduce LoadBalancer management functionality of CloudControllerManager
For kubernetes clusters, we will watch the Services with type set
to 'LoadBalancer' and create corresponding Ubicloud loadbalancers
and also react to port/vm removals or additions.

We will also add a finalizer to service to track the deletions and
remove the ubicloud loadbalancer on internal service deletions.
2025-03-25 15:57:11 +01:00

59 lines
1.6 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
require_relative "../loader"
clover_freeze
resources = {}
mutex = Mutex.new
resource_scanner = Thread.new do
monitorable_resource_types = [VmHost, PostgresServer, Vm.where(~Sshable.where(id: Sequel[:vm][:id]).exists), MinioServer, GithubRunner, VmHostSlice, LoadBalancerVmPort, KubernetesCluster]
loop do
mutex.synchronize do
Enumerator::Chain.new(*monitorable_resource_types).each do |r|
resources[r.id] ||= MonitorableResource.new(r)
end
end
sleep 60
end
rescue => ex
Clog.emit("Resource scanning has failed.") { {resource_scanning_failure: {exception: Util.exception_to_hash(ex)}} }
ThreadPrinter.run
Kernel.exit!
end
pulse_checker = Thread.new do
loop do
mutex.synchronize do
# Deduct 3 for the threads that are always running: main, resource_scanner, pulse_checker
Clog.emit("Active threads count.") { {active_threads_count: Thread.list.count - 3} }
resources.each do |r_id, r|
sleep 1 while Thread.list.count + 2 > Config.max_monitor_threads
r.force_stop_if_stuck
Thread.new do
r.lock_no_wait do
r.open_resource_session
r.process_event_loop
r.check_pulse
end
end
end
resources.select { |r_id, r| r.deleted }.each { |r_id, r| resources.delete(r_id) }
end
sleep 5
end
rescue => ex
Clog.emit("Pulse checking has failed.") { {pulse_checking_failure: {exception: Util.exception_to_hash(ex)}} }
ThreadPrinter.run
Kernel.exit!
end
resource_scanner.join
pulse_checker.join