Nebula
Orchestrator

ScaleDecision

The scaler's answer, and everything the dashboard needs to explain it.

generated from the sources
public struct ScaleDecision

The scaler's answer, and everything the dashboard needs to explain it.

Fields

Action

public ScaleAction Action;

Peak

public float Peak;

The busiest worker's measured p90 utilization.

Mean

public float Mean;

Mean measured p90 utilization across the eligible workers.

HeldSeconds, HoldSeconds

public float HeldSeconds, HoldSeconds;

How long the current condition has held, and for how long it must, in seconds. Both 0 when nothing is held.

BlockedBy

public string BlockedBy;

The container that makes growing pointless (all the load and no way to split it), or "".

BlockedComponent

public CostComponent BlockedComponent;

What BlockedBy is mostly expensive in, from its cost row (ContainerCost): simulation is a case for splitting the container or cheapening its entities, replication a case for interest management, the gateway relay a case for more gateways. CostComponent.Simulation when nothing is blocked or no row has arrived; read it with BlockedBy non-empty.

BlockedSaturation

public float BlockedSaturation;

How much of its component's budget BlockedBy is using (1 = all of it), or 0.

BlockedCause

public SaturationCause BlockedCause;

Why the planner may not split BlockedBy away from its worker, when it said (SaturationReport, docs/cohesion-rebalancing.md): a cohesion or affinity group spans it, a hold has not expired, it asked for a worker of its own, or the game authored no boundary inside it. SaturationCause.None when nothing is blocked or the policy does not explain itself.

BlockedReason

public string BlockedReason;

That cause as a sentence, or "". It is already part of Reason.

RetireWorkerId

public string RetireWorkerId;

The worker that should retire when Action is ScaleAction.Shrink.

Reason

public string Reason;

One line for the dashboard and the event log.

On this page