# frozen_string_literal: true module Streams # Probe reachability of MediaMTX API on a stream node (:9997). class NodeHealth def self.mediamtx_up?(node, timeout: 2) new(node, timeout: timeout).mediamtx_up? end def self.promote_if_healthy!(node, timeout: 2) return false unless node.status == "provisioning" return false unless mediamtx_up?(node, timeout: timeout) node.update!(status: "ready", last_health_at: Time.current) true end def initialize(node, timeout: 2) @node = node @timeout = timeout end def mediamtx_up? Mediamtx::Client.new(base_url: @node.api_base_url).reachable?(timeout: @timeout) end end end