///|
/// An API gateway feeds two downstream services with a retry edge.
/// Rates share one unit (requests/second); servers are independent workers.
fn main raise {
let original : @queue.JacksonNetwork = {
nodes: [{ service: 6.0, servers: 2, }, { service: 5.0, servers: 2, }],
external: [5.0, 1.0],
routing: [[0.0, 0.6], [0.1, 0.0]],
}
let baseline = original.analyze()
let traffic = original.solve_traffic()
assert_true(traffic[0] > original.external[0])
let headroom = original.load_limit(0.85)
let allocation = original.allocate_servers([1, 1], [5, 5], 6)
let planned = original.with_servers(allocation.servers)
let report = planned.analyze()
assert_eq(allocation.consumed_budget, 6)
assert_true(report.mean_external_response <= baseline.mean_external_response)
assert_true(report.relative_flow_residual < 1.0e-8)
assert_eq(original.nodes[0].servers, 2)
// Exhaustive comparison is an independent small-case integration check.
for first in 1..<=5 {
let candidate = original.with_servers([first, 6 - first]).analyze()
assert_true(
report.mean_external_response <=
candidate.mean_external_response + 1.0e-10,
)
}
println("baseline=" + baseline.to_json().stringify())
println("headroom=" + headroom.to_json().stringify())
println("allocation=" + allocation.to_json().stringify())
println("planned=" + report.to_json().stringify())
}