"""Author: Sandeep Belgavi. Deterministic admission; units are synthetic, not money.""" from dataclasses import dataclass import json @dataclass(frozen=True) class Route: name: str capability: int reserve_units: int class Router: """Single-process sequential ledger, with no model implementation.""" def __init__(self, budget=7, max_inflight=1): if budget < 0 or max_inflight < 1: raise ValueError('Invalid limits') self.remaining, self.limit, self.active, self.used = budget, max_inflight, {}, set() self.routes = (Route('fast', 1, 2), Route('deep', 2, 5)) def admit(self, request_id, capability, deadline_ms): if not request_id or capability not in (1, 2): raise ValueError('Invalid request') if request_id in self.used: raise ValueError('Request identifier already used') if deadline_ms <= 0: return 'expired' if len(self.active) >= self.limit: return 'overloaded' eligible = [r for r in self.routes if r.capability >= capability and r.reserve_units <= self.remaining] if not eligible: return 'budget_denied' route = min(eligible, key=lambda r: r.reserve_units) self.remaining -= route.reserve_units self.active[request_id] = route self.used.add(request_id) return route.name def settle(self, request_id, actual_units): route = self.active[request_id] if not isinstance(actual_units, int) or isinstance(actual_units, bool) or not 0 <= actual_units <= route.reserve_units: raise ValueError('Invalid charge; retain reservation for review') self.remaining += route.reserve_units - actual_units del self.active[request_id] def main(): router = Router() first = router.admit('incident-a', 2, 1000) pressure = router.admit('incident-b', 1, 1000) router.settle('incident-a', 4) second = router.admit('incident-b', 1, 1000) router.settle('incident-b', 2) denied = router.admit('incident-c', 2, 1000) print(json.dumps(dict(first=first, pressure=pressure, second=second, denied=denied, remaining=router.remaining), sort_keys=True)) if __name__ == '__main__': main()