Adopt production-safe runtime defaults and forwarder retry limits.

Lower CLI/WebCRT/audit caps, log startup capacity warnings, and bound oclaw requeues so reconnect storms cannot thrash memory.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-08-02 18:08:28 +08:00
parent d56020d84c
commit fa577aa3bd
22 changed files with 238 additions and 69 deletions

View file

@ -1,25 +1,47 @@
"""Smoke tests for DB pool / CLI budget / metrics wiring."""
"""Smoke tests for DB pool / CLI budget / metrics / production defaults."""
from __future__ import annotations
import unittest
from netx_api.cli_budget import acquire_cli_slot, clamp_cli_workers, cli_budget_status
from netx_api.config import settings
from netx_api.cli_budget import acquire_cli_slot, clamp_cli_workers, cli_budget_status, feature_hard_cap
from netx_api.config import Settings, settings
from netx_api.db import db_pool_status
from netx_api.metrics_router import _prom_lines, collect_runtime_metrics
from netx_api.runtime_budget import log_runtime_budget
class StabilityHardeningTests(unittest.TestCase):
def test_production_defaults(self) -> None:
s = Settings(_env_file=None)
self.assertEqual(s.db_pool_size, 25)
self.assertEqual(s.db_max_overflow, 15)
self.assertEqual(s.cli_max_concurrent, 12)
self.assertEqual(s.cli_feature_hard_cap, 16)
self.assertEqual(s.cli_timeout_pool_workers, 12)
self.assertEqual(s.port_traffic_dispatch_workers, 3)
self.assertEqual(s.ne_connect_max_workers, 4)
self.assertEqual(s.ne_collect_max_workers, 4)
self.assertEqual(s.webcrt_max_sessions, 12)
self.assertEqual(s.webcrt_keepalive_sec, 30)
self.assertEqual(s.audit_sample_n, 10)
self.assertEqual(s.audit_queue_max, 2000)
self.assertEqual(s.oclaw_forward_max_retries, 3)
self.assertEqual(s.oclaw_forward_queue_max, 2000)
self.assertEqual(s.ne_collect_max_output_bytes, 4 * 1024 * 1024)
self.assertEqual(s.webcrt_session_log_max_bytes, 2 * 1024 * 1024)
# Pool should cover CLI + HTTP reserve under defaults.
self.assertGreaterEqual(s.db_pool_size + s.db_max_overflow, s.cli_max_concurrent + 8)
def test_settings_have_pool_and_budget_knobs(self) -> None:
self.assertGreaterEqual(int(settings.db_pool_size), 1)
self.assertGreaterEqual(int(settings.cli_max_concurrent), 1)
self.assertGreaterEqual(int(settings.audit_queue_max), 100)
def test_clamp_cli_workers(self) -> None:
n = clamp_cli_workers(999, hard_cap=32)
n = clamp_cli_workers(999)
self.assertLessEqual(n, int(settings.cli_max_concurrent))
self.assertLessEqual(n, 32)
self.assertLessEqual(n, feature_hard_cap())
self.assertGreaterEqual(n, 1)
def test_cli_budget_acquire_release(self) -> None:
@ -39,6 +61,10 @@ class StabilityHardeningTests(unittest.TestCase):
self.assertIn("netx_uptime_seconds", body)
self.assertIn("netx_thread_count", body)
self.assertIn("netx_cli_budget_limit", body)
self.assertIn("netx_oclaw_forwarder_dropped", body)
def test_log_runtime_budget_does_not_raise(self) -> None:
log_runtime_budget(role="test")
if __name__ == "__main__":