#[non_exhaustive]pub enum Response {
Show 20 variants
Pong,
Flock(Vec<ProcessInfo>),
Described(Vec<ProcessInfo>),
Started(Vec<ProcessInfo>),
Stopped(Vec<ProcessInfo>),
Restarted(Vec<ProcessInfo>),
Reloading(Vec<ProcessInfo>),
Scaled(Vec<ProcessInfo>),
Deleted(Vec<u32>),
Reopened(Vec<ProcessInfo>),
Flushed(Vec<ProcessInfo>),
Triggered(Vec<ActionReply>),
Signalled(Vec<SignalReply>),
SentLine(Vec<LineReply>),
RollSaved {
path: String,
apps: u32,
},
Mustered(Vec<ProcessInfo>),
DogSection {
toml: DogSectionToml,
},
DogStarted(ProcessInfo),
Subscribed,
ShuttingDown,
}Expand description
One RPC response (pairs with Request variants)
Ten variants carry a bare Vec<ProcessInfo> (Flock, Described,
Started, Stopped, Restarted, Reloading, Scaled, Reopened,
Flushed, Mustered), and that repetition is intentional — do not
collapse them into one. Each names which request it answers, which is what
lets a variant diverge later without a protocol bump: Reloading already
means an acceptance rather than a result, Scaled already means only the
survivors on a scale-down rather than every matched row, and Mustered
already means “every sheep of every restored app” rather than “what this
call started”. A single Listing(Vec<ProcessInfo>) would have to
relitigate all three as a breaking change.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Pong
Answer to Ping
Flock(Vec<ProcessInfo>)
Answer to ListFlock
Described(Vec<ProcessInfo>)
Answer to Describe
Started(Vec<ProcessInfo>)
Answer to Start
Stopped(Vec<ProcessInfo>)
Answer to Stop
Restarted(Vec<ProcessInfo>)
Answer to Restart
Reloading(Vec<ProcessInfo>)
Answer to Reload — an ACCEPTANCE, not a result, and the only reply
in this enum carrying a flock listing that names one rather than
finished work. Self::ShuttingDown is an acceptance too, sent
before the daemon actually goes down, but it carries nothing.
One instance costs a readiness wait plus a drain in the worst case, so
a clustered app outlasts any deadline a client is allowed to ask for.
The daemon therefore answers as soon as the reload is accepted, with
the matched sheep as they stood at that moment, and the swaps report
themselves on the bus — process.reload, process.reloaded,
process.reload_abandoned. A matched sheep with nothing to replace is
listed here as the no-op success it is, so this carries the same
matches Describe would.
Scaled(Vec<ProcessInfo>)
Answer to Scale — the app’s instances that will REMAIN, one row each,
in instance-slot order.
Scaling up, these are the instances that exist, the new ones included, and the answer is complete.
Scaling down, these are the survivors and the departing instances are
deliberately absent, even though they are still running their kill
ladders as this reply is written. The operator asked for a number; this
is that number of rows. Listing the departing ones as well would answer
a scale web 2 with four rows, which is the one thing the reply must
not do. The departures report themselves on the bus as process.delete
— the same split Reloading already makes between an acceptance and
the swaps that follow it.
Deleted(Vec<u32>)
Answer to Delete — ids removed
Reopened(Vec<ProcessInfo>)
Answer to Reopen — every matched sheep, running or not. A sheep with
no live log pump has nothing to reopen and is reported as a success,
so this carries the same matches Describe would.
Flushed(Vec<ProcessInfo>)
Answer to Flush — one row per matched sheep, running or not, exactly
as Self::Reopened.
One row per SHEEP, not per file emptied. Several sheep can share one
log path (merge_logs, or an explicit out_file on a multi-instance
app), and the daemon truncates each distinct path once — but the
selector names sheep, so the answer names sheep, and the count here
matches what Describe would return for the same selector.
Triggered(Vec<ActionReply>)
Answer to Trigger — one ActionReply row per matched sheep,
carrying what each one answered rather than a flock listing:
ProcessInfo has nowhere to hold a reply body.
Signalled(Vec<SignalReply>)
Answer to Signal — one SignalReply row per matched sheep.
Not a flock listing: what a caller wants back is per-instance delivery,
and ProcessInfo has nowhere to hold it. Same reasoning, and the
same row-shaped answer, as Self::Triggered.
SentLine(Vec<LineReply>)
Answer to SendLine — one LineReply row per matched sheep.
RollSaved
Answer to SaveRoll
Fields
Mustered(Vec<ProcessInfo>)
Answer to Muster — every sheep of every app the roll restored, not
only the ones this call spawned.
The distinction is the whole point of the reply. Assembling a flock that is already assembled starts nothing, so a listing of what this call spawned would be empty there — indistinguishable from an empty roll, which is the one outcome an operator needs to tell apart.
DogSection
Answer to DogConfig — the dog’s own section, rendered back to TOML.
toml is DogSectionToml, not a bare String: this text
routinely carries webhook credentials, and the newtype’s manual
Debug keeps them out of a {:?}-formatted Response — see that
type’s docs for why the section travels over the socket at all.
Fields
toml: DogSectionTomlThe [dog.<name>] table as TOML text, empty when the file has
no such section
DogStarted(ProcessInfo)
Answer to EnableDog — the dog as it stands now
Subscribed
Answer to Subscribe
ShuttingDown
Answer to KillDaemon