优化系统健康评分与缓存监测

This commit is contained in:
Cheng Zhou
2026-06-30 10:43:24 +08:00
parent b25055775e
commit 668e719b6d
10 changed files with 412 additions and 42 deletions
@@ -30,6 +30,24 @@ async def test_cache_metrics():
assert metrics.miss_rate == pytest.approx(25.0, 0.1)
@pytest.mark.asyncio
async def test_cache_metrics_one_hour_window_and_cache_types():
monitor = PermissionMonitor()
monitor.record_cache_hit("project_permissions")
monitor.record_cache_miss("project_permissions")
monitor.record_cache_hit("member_roles")
stats = monitor.metrics.cache_metrics.window_stats(3600)
assert stats["total_accesses"] == 3
assert stats["hit_rate"] == pytest.approx(66.67, 0.01)
assert stats["scope"] == "sliding_window"
assert stats["by_cache"]["project_permissions"]["total_accesses"] == 2
assert stats["by_cache"]["project_permissions"]["hit_rate"] == 50
assert stats["by_cache"]["member_roles"]["total_accesses"] == 1
assert stats["by_cache"]["member_roles"]["hit_rate"] == 100
@pytest.mark.asyncio
async def test_cache_invalidation_tracking():
"""测试缓存失效追踪"""
@@ -258,9 +258,14 @@ async def test_permission_system_health_degraded(db_session):
assert "status" in data
assert "health_score" in data
assert "issues" in data
assert "权限检查响应时间过长" in data["issues"]
assert "权限拒绝率" in data["issues"]
assert "缓存命中率" in data["issues"]
assert any("权限检查平均响应时间过长" in issue for issue in data["issues"])
assert any("权限拒绝率" in issue for issue in data["issues"])
assert any("缓存命中率" in issue for issue in data["issues"])
assert data["status"] == "unhealthy"
assert data["health_score"] == 30
assert data["score_breakdown"]["performance"]["deduction"] == 25
assert data["score_breakdown"]["deny_rate"]["deduction"] == 20
assert data["score_breakdown"]["cache"]["deduction"] == 25
@pytest.mark.asyncio
@@ -272,10 +277,33 @@ async def test_permission_system_health_includes_metrics(db_session):
data = await permission_monitoring.permission_system_health(db=db_session, _=AdminUserStub())
assert "last_hour" in data
assert "cache_stats" in data
assert "score_breakdown" in data
assert "sample_sufficient" in data
assert "total_checks" in data["last_hour"]
assert "cache_metrics" in data["cache_stats"]
@pytest.mark.asyncio
async def test_permission_system_health_ignores_small_cache_sample(db_session):
"""缓存样本不足时不应因为低命中率扣分"""
monitor = PermissionMonitor()
set_permission_monitor(monitor)
for _ in range(3):
monitor.record_cache_miss()
data = await permission_monitoring.permission_system_health(db=db_session, _=AdminUserStub())
assert data["score_breakdown"]["cache"]["sample_sufficient"] is False
assert data["score_breakdown"]["cache"]["deduction"] == 0
non_cache_deductions = sum(
item["deduction"]
for name, item in data["score_breakdown"].items()
if name != "cache"
)
assert data["health_score"] == 100 - non_cache_deductions
@pytest.mark.asyncio
async def test_ip_locations_counts_unique_users_per_location(db_session, monkeypatch):
"""IP 属地统计应按省市聚合访问次数、来源 IP 数和访问用户数。"""