fix: optimize summary count query and refine row keys for external api logs
This commit is contained in:
@@ -625,13 +625,13 @@ def test_route_summary_hours_window(session):
|
||||
|
||||
# hours=1 → only recent
|
||||
result = get_external_api_log_summary(
|
||||
slow_ms=None, hours=1, limit=50, db=session, _=None,
|
||||
slow_ms=None, hours=1, limit=50, offset=0, db=session, _=None,
|
||||
)
|
||||
assert len(result) == 1 and result[0].path == "/recent"
|
||||
|
||||
# hours=72 → both
|
||||
result = get_external_api_log_summary(
|
||||
slow_ms=None, hours=72, limit=50, db=session, _=None,
|
||||
slow_ms=None, hours=72, limit=50, offset=0, db=session, _=None,
|
||||
)
|
||||
assert len(result) == 2
|
||||
|
||||
@@ -648,7 +648,7 @@ def test_route_summary_limit(session):
|
||||
session.commit()
|
||||
|
||||
result = get_external_api_log_summary(
|
||||
slow_ms=None, hours=24, limit=3, db=session, _=None,
|
||||
slow_ms=None, hours=24, limit=3, offset=0, db=session, _=None,
|
||||
)
|
||||
assert len(result) == 3
|
||||
|
||||
@@ -670,8 +670,94 @@ def test_route_summary_slow_threshold(session):
|
||||
session.commit()
|
||||
|
||||
result = get_external_api_log_summary(
|
||||
slow_ms=1000, hours=24, limit=50, db=session, _=None,
|
||||
slow_ms=1000, hours=24, limit=50, offset=0, db=session, _=None,
|
||||
)
|
||||
slow_paths = [r for r in result if r.slow_count > 0]
|
||||
assert len(slow_paths) == 1
|
||||
assert slow_paths[0].path == "/slow"
|
||||
|
||||
|
||||
def test_route_summary_offset_pagination(session):
|
||||
"""get_external_api_log_summary respects offset parameter."""
|
||||
from app.routers.external_api_logs import get_external_api_log_summary
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
for i in range(10):
|
||||
session.add(ExternalApiLog(direction="upstream", target_type="upstream",
|
||||
method="GET", path=f"/path-{i}", url_host="h",
|
||||
status_code=200, success=True, duration_ms=50 + i, created_at=now))
|
||||
session.commit()
|
||||
|
||||
# Page 1: first 4
|
||||
page1 = get_external_api_log_summary(
|
||||
slow_ms=None, hours=24, limit=4, offset=0, db=session, _=None,
|
||||
)
|
||||
assert len(page1) == 4
|
||||
assert page1[0].path == "/path-9" # sorted by sum(duration_ms) desc
|
||||
|
||||
# Page 2: next 4
|
||||
page2 = get_external_api_log_summary(
|
||||
slow_ms=None, hours=24, limit=4, offset=4, db=session, _=None,
|
||||
)
|
||||
assert len(page2) == 4
|
||||
assert page2[0].path == "/path-5"
|
||||
|
||||
# Page 3: last 2
|
||||
page3 = get_external_api_log_summary(
|
||||
slow_ms=None, hours=24, limit=4, offset=8, db=session, _=None,
|
||||
)
|
||||
assert len(page3) == 2
|
||||
|
||||
# Beyond end
|
||||
page4 = get_external_api_log_summary(
|
||||
slow_ms=None, hours=24, limit=4, offset=20, db=session, _=None,
|
||||
)
|
||||
assert len(page4) == 0
|
||||
|
||||
|
||||
def test_route_summary_count(session):
|
||||
"""count_external_api_log_summary returns group count, not raw row count."""
|
||||
from app.routers.external_api_logs import count_external_api_log_summary
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
# 3 calls to same path (should be 1 group)
|
||||
for i in range(3):
|
||||
session.add(ExternalApiLog(direction="upstream", target_type="upstream",
|
||||
method="GET", path="/grouped", url_host="h",
|
||||
status_code=200, success=True, duration_ms=100, created_at=now))
|
||||
# 2 calls to different path (another group)
|
||||
for i in range(2):
|
||||
session.add(ExternalApiLog(direction="upstream", target_type="upstream",
|
||||
method="POST", path="/other", url_host="h",
|
||||
status_code=201, success=True, duration_ms=200, created_at=now))
|
||||
session.commit()
|
||||
|
||||
# Should be 2 groups, not 5 raw rows
|
||||
result = count_external_api_log_summary(
|
||||
slow_ms=None, hours=24, db=session, _=None,
|
||||
)
|
||||
assert result == {"total": 2}
|
||||
|
||||
|
||||
def test_route_summary_count_respects_hours(session):
|
||||
"""count_external_api_log_summary respects hours filter."""
|
||||
from app.routers.external_api_logs import count_external_api_log_summary
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
session.add(ExternalApiLog(direction="upstream", target_type="upstream",
|
||||
method="GET", path="/recent", url_host="h",
|
||||
status_code=200, success=True, duration_ms=50,
|
||||
created_at=now - timedelta(minutes=30)))
|
||||
session.add(ExternalApiLog(direction="upstream", target_type="upstream",
|
||||
method="GET", path="/old", url_host="h",
|
||||
status_code=200, success=True, duration_ms=50,
|
||||
created_at=now - timedelta(hours=48)))
|
||||
session.commit()
|
||||
|
||||
# hours=1 → 1 group
|
||||
r1 = count_external_api_log_summary(slow_ms=None, hours=1, db=session, _=None)
|
||||
assert r1 == {"total": 1}
|
||||
|
||||
# hours=72 → 2 groups
|
||||
r2 = count_external_api_log_summary(slow_ms=None, hours=72, db=session, _=None)
|
||||
assert r2 == {"total": 2}
|
||||
|
||||
Reference in New Issue
Block a user