package pipeline import "math" type BudgetPressure struct { Max int `json:"max"` Effective float64 `json:"effective,omitempty"` Preference float64 `json:"preference,omitempty"` Demand int `json:"demand"` Queued int `json:"queued,omitempty"` Selected int `json:"selected,omitempty"` Active int `json:"active,omitempty"` Pressure float64 `json:"pressure,omitempty"` Level string `json:"level,omitempty"` } type BudgetPressureSummary struct { Refinement BudgetPressure `json:"refinement"` Record BudgetPressure `json:"record"` Decode BudgetPressure `json:"decode"` } func BuildBudgetPressureSummary(budget BudgetModel, admission RefinementAdmission, queue DecisionQueueStats) BudgetPressureSummary { return BudgetPressureSummary{ Refinement: buildRefinementPressure(budget, admission), Record: buildQueuePressure(budget.Record, queue.RecordQueued, queue.RecordSelected, queue.RecordActive), Decode: buildQueuePressure(budget.Decode, queue.DecodeQueued, queue.DecodeSelected, queue.DecodeActive), } } func buildRefinementPressure(budget BudgetModel, admission RefinementAdmission) BudgetPressure { demand := admission.Planned selected := admission.Admitted return buildPressure(budget.Refinement, demand, 0, selected, 0) } func buildQueuePressure(queue BudgetQueue, queued, selected, active int) BudgetPressure { demand := queued if demand < selected { demand = selected } return buildPressure(queue, demand, queued, selected, active) } func buildPressure(queue BudgetQueue, demand int, queued int, selected int, active int) BudgetPressure { maxBudget := budgetQueueLimit(queue) effective := queue.EffectiveMax preference := queue.Preference if effective <= 0 && maxBudget > 0 { if preference <= 0 { preference = 1.0 } effective = float64(maxBudget) * preference } pressure := 0.0 level := "" switch { case demand == 0: level = "idle" case maxBudget <= 0: level = "blocked" case effective > 0: pressure = float64(demand) / effective level = pressureLevel(pressure) } return BudgetPressure{ Max: maxBudget, Effective: roundFloat(pressureEffectiveMax(effective)), Preference: preference, Demand: demand, Queued: queued, Selected: selected, Active: active, Pressure: roundFloat(pressure), Level: level, } } func pressureLevel(pressure float64) string { switch { case pressure >= 1.5: return "critical" case pressure >= 1.15: return "high" case pressure >= 0.85: return "elevated" default: return "steady" } } func pressureReasonTag(pressure BudgetPressure) string { if pressure.Level == "" || pressure.Level == "idle" { return "" } return "pressure:" + pressure.Level } func pressureEffectiveMax(value float64) float64 { if value < 0 { return 0 } return value } func roundFloat(value float64) float64 { if value == 0 { return 0 } return math.Round(value*100) / 100 }