Class: Space::Architect::Research::Mux

Inherits:
Object
  • Object
show all
Defined in:
lib/space_architect/research/mux.rb

Overview

Async multiplexer: one fiber per in-flight run, each tailing its run.jsonl. Uses socketry/async fibers — NEVER threads.

Constant Summary collapse

POLL_INTERVAL =

seconds between read attempts

0.15
HEARTBEAT_EVERY =

seconds of silence before heartbeat

30
FILE_WAIT_LIMIT =

seconds to wait for run.jsonl to appear

10

Instance Method Summary collapse

Constructor Details

#initialize(runs, renderer:, out: $stdout) ⇒ Mux

Returns a new instance of Mux.



14
15
16
17
18
# File 'lib/space_architect/research/mux.rb', line 14

def initialize(runs, renderer:, out: $stdout)
  @runs     = runs
  @renderer = renderer
  @out      = out
end

Instance Method Details

#runObject

Returns :ok or :failed



21
22
23
24
25
26
27
28
29
30
# File 'lib/space_architect/research/mux.rb', line 21

def run
  results = Sync do
    tasks = @runs.map do |run|
      Async { tail_run(run) }
    end
    tasks.map(&:wait)
  end

  results.all? { |r| r == :ok } ? :ok : :failed
end