fix(dashboard): fix empty widgets + NULL created_at on campaign tests
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
1. metrics_query_service: use NULLS LAST in get_recent_tests() so tests
with actual dates always appear before NULL-dated ones.
2. campaign_service: set created_at=datetime.utcnow() when creating tests
from campaigns (was missing, leaving 21 tests with NULL created_at).
Fixed existing NULL values directly in production DB.
3. DashboardPage: add isError handling to all V2 metric widgets
(pipeline, team activity, validation rate, recent tests).
- Add retry:2 to all secondary metric queries so transient failures
are retried before showing empty state.
- Show 'Could not load X — refresh' instead of empty/misleading
'No tests created yet' when a query actually fails.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -232,10 +232,11 @@ def get_validation_rate(db: Session) -> list[ValidationRate]:
|
||||
|
||||
def get_recent_tests(db: Session, *, limit: int = 10) -> list[RecentTestItem]:
|
||||
"""Return the most recently created tests."""
|
||||
from sqlalchemy import nullslast
|
||||
tests = (
|
||||
db.query(Test)
|
||||
.options(joinedload(Test.technique))
|
||||
.order_by(Test.created_at.desc())
|
||||
.order_by(nullslast(Test.created_at.desc()))
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user