Prepara l'architettura multi-nodo (MediaMTX+ffmpeg) con assignment URL per sessione, admin di provision/drain e provider Cloud/DNS astratti verso mltv-stream.net. Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
987 B
Ruby
48 lines
987 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Streams
|
|
module DnsProviders
|
|
# DNS lab in Redis (e dump hosts). Nessuna chiamata al registrar.
|
|
class Lab < Base
|
|
REDIS_KEY = "stream_dns:a_records"
|
|
|
|
def initialize(redis: nil)
|
|
@redis = redis
|
|
end
|
|
|
|
def upsert_a(name, ip)
|
|
host = normalize(name)
|
|
redis.hset(REDIS_KEY, host, ip.to_s)
|
|
true
|
|
end
|
|
|
|
def delete_a(name)
|
|
redis.hdel(REDIS_KEY, normalize(name))
|
|
true
|
|
end
|
|
|
|
def resolve(name)
|
|
redis.hget(REDIS_KEY, normalize(name))
|
|
end
|
|
|
|
def all_records
|
|
redis.hgetall(REDIS_KEY)
|
|
end
|
|
|
|
def hosts_file_snippet
|
|
all_records.sort.map { |host, ip| "#{ip}\t#{host}" }.join("\n")
|
|
end
|
|
|
|
private
|
|
|
|
def normalize(name)
|
|
name.to_s.strip.downcase.delete_suffix(".")
|
|
end
|
|
|
|
def redis
|
|
@redis ||= Redis.new(url: ENV.fetch("REDIS_URL", "redis://localhost:6379/0"))
|
|
end
|
|
end
|
|
end
|
|
end
|