Scala i nodi overflow quando gli slot calano, mantiene una spare a caldo sotto carico e spegne gli idle, disattivabile con STREAM_AUTOSCALE_ENABLED. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2.0 KiB
Ruby
58 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Admin
|
|
class StreamNodesController < Admin::BaseController
|
|
def index
|
|
Streams::NodeRegistry.ensure_home_from_env!
|
|
@nodes = StreamNode.order(:role, :slug)
|
|
@dns_provider = ENV.fetch("STREAM_DNS_PROVIDER", "lab")
|
|
@cloud_provider = ENV.fetch("STREAM_CLOUD_PROVIDER", "local_lab")
|
|
@lab_hosts = lab_dns_snippet
|
|
@hetzner_configured = ENV["HCLOUD_TOKEN"].present?
|
|
@autoscale_metrics = Streams::Autoscaler.metrics
|
|
end
|
|
|
|
def create
|
|
kind = params[:kind].to_s
|
|
node =
|
|
if kind == "cloud"
|
|
Streams::NodeProvisioner.new.provision_cloud!
|
|
else
|
|
Streams::NodeProvisioner.new.provision_lab!
|
|
end
|
|
redirect_to admin_stream_nodes_path,
|
|
notice: t("admin.flash.stream_node_created", slug: node.slug)
|
|
rescue Streams::NodeProvisioner::Error, Streams::CloudProviders::Error, Streams::DnsProviders::Error,
|
|
KeyError => e
|
|
redirect_to admin_stream_nodes_path, alert: e.message
|
|
end
|
|
|
|
def drain
|
|
node = StreamNode.find(params[:id])
|
|
Streams::NodeProvisioner.new.drain!(node)
|
|
redirect_to admin_stream_nodes_path, notice: t("admin.flash.stream_node_draining", slug: node.slug)
|
|
rescue Streams::NodeProvisioner::Error => e
|
|
redirect_to admin_stream_nodes_path, alert: e.message
|
|
end
|
|
|
|
def destroy
|
|
node = StreamNode.find(params[:id])
|
|
Streams::NodeProvisioner.new.decommission!(node)
|
|
redirect_to admin_stream_nodes_path, notice: t("admin.flash.stream_node_destroyed", slug: node.slug)
|
|
rescue Streams::NodeProvisioner::BusyError, Streams::NodeProvisioner::Error,
|
|
Streams::CloudProviders::Error, Streams::DnsProviders::Error => e
|
|
redirect_to admin_stream_nodes_path, alert: e.message
|
|
end
|
|
|
|
private
|
|
|
|
def lab_dns_snippet
|
|
return "" unless @dns_provider == "lab"
|
|
|
|
Streams::DnsProviders::Lab.new.hosts_file_snippet
|
|
rescue Redis::BaseError
|
|
""
|
|
end
|
|
end
|
|
end
|