Drain a fixed backlog of arrivals against a bounded depth and turn the remaining depth into a drain, steady, or throttle remediation action.

backlog depth The backlog depth and arrivals are scalars, so the remaining capacity that drives the remediation action stays deterministic without draining a live async queue.

Async Queue Remediation Report

arrivals
async_queue.ts
Replay: real traced execution (multi-file project)
const arrivals: number = 1;
const depth: number = 4;
let drained: number = arrivals;
if (drained > depth) {
    drained = depth;
}
const remaining: number = depth - drained;

let action: string = "steady";
if (drained <= 1) {
    action = "drain";
}
if (remaining === 0) {
    action = "throttle";
}

console.log(`arrivals=${arrivals} drained=${drained} remaining=${remaining} ${action}`);
const arrivals: number = 3;
const depth: number = 4;
let drained: number = arrivals;
if (drained > depth) {
    drained = depth;
}
const remaining: number = depth - drained;

let action: string = "steady";
if (drained <= 1) {
    action = "drain";
}
if (remaining === 0) {
    action = "throttle";
}

console.log(`arrivals=${arrivals} drained=${drained} remaining=${remaining} ${action}`);
const arrivals: number = 5;
const depth: number = 4;
let drained: number = arrivals;
if (drained > depth) {
    drained = depth;
}
const remaining: number = depth - drained;

let action: string = "steady";
if (drained <= 1) {
    action = "drain";
}
if (remaining === 0) {
    action = "throttle";
}

console.log(`arrivals=${arrivals} drained=${drained} remaining=${remaining} ${action}`);
  1. arrivals ← 1, depth ← 4, drained ← 1, remaining ← 3, action ← steady

    1const arrivals→ 1: number = 1;  //@arrivals=3, 52const depth→ 4: number = 4;3let drained→ 1: number = arrivals→ 1;4if (drained > depth) {5    drained = depth;6}7const remaining→ 3: number = depth→ 4 - drained1;89let action→ steady: string = "steady";10if (drained <= 1) {
  2. if (drained <= 1)

    9let action: string = "steady";10if (drained1 <= 1) {11    action = "drain";12}
  3. console.log(`arrivals=${arrivals} drained=${drained} remaining=${remai…

    14    action = "throttle";15}1617console.log(`arrivals=${arrivals1} drained=${drained1} remaining=${remaining3} ${actiondrain}`);
    outputarrivals=1 drained=1 remaining=3 drain
  1. arrivals ← 3, depth ← 4, drained ← 3, remaining ← 1, action ← steady

    1const arrivals→ 3: number = 3;2const depth→ 4: number = 4;3let drained→ 3: number = arrivals→ 3;4if (drained > depth) {5    drained = depth;6}7const remaining→ 1: number = depth→ 4 - drained3;89let action→ steady: string = "steady";10if (drained <= 1) {11    action = "drain";12}13if (remaining === 0) {14    action = "throttle";15}1617console.log(`arrivals=${arrivals3} drained=${drained3} remaining=${remaining1} ${actionsteady}`);
    outputarrivals=3 drained=3 remaining=1 steady
  1. arrivals ← 5, depth ← 4, drained ← 5

    1const arrivals→ 5: number = 5;2const depth→ 4: number = 4;3let drained→ 5: number = arrivals→ 5;4if (drained > depth) {
  2. if (drained > depth)

    2const depth: number = 4;3let drained: number = arrivals;4if (drained5 > depth4) {5    drained = depth4;6}
  3. remaining ← 0, depth ← 4, action ← steady

    5    drained = depth;6}7const remaining→ 0: number = depth→ 4 - drained4;89let action→ steady: string = "steady";10if (drained <= 1) {
  4. if (remaining === 0)

    11    action = "drain";12}13if (remaining0 === 0) {14    action = "throttle";15}
  5. console.log(`arrivals=${arrivals} drained=${drained} remaining=${remai…

    14    action = "throttle";15}1617console.log(`arrivals=${arrivals5} drained=${drained4} remaining=${remaining0} ${actionthrottle}`);
    outputarrivals=5 drained=4 remaining=0 throttle