CapacityInfo
How close one container - or one whole scope - is to what a single worker can carry, derived from the cost telemetry the worker already reports (ContainerCost, docs/cost-telemetry.md).
Nebula · Packages/com.1by3.nebula/Runtime/Orchestrator/CapacityInfo.cspublic struct CapacityInfoHow close one container - or one whole scope - is to what a single worker can carry, derived from the cost telemetry the worker already reports (ContainerCost, docs/cost-telemetry.md). One number and the name of the component it came from, because "full" is not a head count: a station can be full of simulation, of replication or of per-client relay, and the three have different fixes.
The orchestrator derives it and publishes it on the lease row, so a gateway answers "is this target at capacity" from the control-plane document it already mirrors, without asking anybody. Design record: docs/capacity-admission.md.
Fields
ContainerId
public string ContainerId;The container this is about; empty when the reading is about a whole scope.
ScopeKey
public string ScopeKey;The scope the reading belongs to (EntityLocation.ScopeKey); empty in the public world.
Known
public bool Known;A worker has reported cost for this target lately. False means "nobody has said": an unknown target is never at capacity, so a mesh without cost telemetry admits exactly what it always did.
Saturation
public float Saturation;The dominant component's share of its own budget (ContainerCost.DominantSaturation). 1 = the whole budget. For a scope, the worst of its parts.
Dominant
public CostComponent Dominant;Which component Saturation is about (ContainerCost.Dominant).
AtCapacity
public bool AtCapacity;Saturation is at or above NebulaConfig.CapacitySaturation. The orchestrator decides this, not the reader: the threshold is one mesh-wide setting and the gateways must not disagree about it.
Cause
public SaturationCause Cause;Why the planner cannot relieve this target by moving anything (SaturationReport.Cause), or SaturationCause.None when the reading is cost telemetry alone. A cohesion group, an affinity group, a hold or a missing boundary is the difference between "busy, and the mesh is about to spread it" and "busy, and nothing the mesh can do will help" - which is the one a queue is for.
Properties
DominantName
public string DominantName { get; }The name Dominant goes by in the JSON, a log line and the dashboard.
Methods
ToString
public override string ToString();