Skip to content

feat(dashboard): add search, filtering, and sorting for runs - #319

Closed
luyiqian9 wants to merge 10 commits into
inclusionAI:mainfrom
luyiqian9:feat/dashboard-search-filter-sort
Closed

feat(dashboard): add search, filtering, and sorting for runs#319
luyiqian9 wants to merge 10 commits into
inclusionAI:mainfrom
luyiqian9:feat/dashboard-search-filter-sort

Conversation

@luyiqian9

Copy link
Copy Markdown

Title

feat(dashboard): add search, filtering, and sorting for runs

Description

Closes #263

Changes

Backend (areno/dashboard/server.py)

  • Extend Job.to_summary_json() with algo, ckpt, dataset_path, and duration_s fields
  • Add _parse_time / _duration_seconds helpers for timestamp/duration calculation
  • Add _launch_value helper that reads from both flat dict and sections-format launch configs (CLI-registered jobs use sections arrays, dashboard-launched jobs use flat dicts)

Frontend (dashboard/src/main.jsx, dashboard/src/styles.css)

  • Add toolbar with search box (matches id/name/ckpt/dataset_path), three filter dropdowns (state/type/algorithm), and sort selector (start time / duration)
  • Persist all toolbar state in URL query parameters (q, state, type, algo, sort, page)
  • Add visible Reset button (disabled when no filters active)
  • Default behavior is fully backward compatible — no URL params = original view

Tests (tests/test_dashboard_runs_cpu.py)

  • 24 CPU tests covering _parse_time, _duration_seconds, _launch_value (both formats), to_summary_json new fields, edge cases (None/empty/corrupted launch_config, sections format, serve jobs with model_path)

Docs (docs/cli/dashboard.rst)

  • New documentation page with search/filter/sort guide, URL parameter table, minimal runnable example, and limitations

Seed script (scripts/seed_dashboard.py)

  • Generates synthetic jobs (mixed sections/flat format) for testing without real training runs

Verification

  • vite build passes (1830 modules transformed)
  • IDE linter passes on all changed files
  • Tested on remote GPU server with real CLI-registered jobs and 50 synthetic records

shihuai added 10 commits July 28, 2026 15:24
- Extend Job.to_summary_json() with algo, ckpt, dataset_path, duration_s
- Add _parse_time and _duration_seconds helpers for timestamp/duration calc
- Add frontend toolbar with search, state/type/algo filters, sort options
- Persist filter/sort state in URL query parameters with visible reset
- Add CSS styles for toolbar (jobToolbar, jobSearch, jobFilters)
- Add CPU tests for new summary fields and edge cases
- Rebuild dashboard dist assets

Closes inclusionAI#263
- Add docs/cli/dashboard.rst with search/filter/sort guide and minimal example
- Add scripts/seed_dashboard.py for testing with synthetic run data
- Update docs/index.rst to include dashboard doc in toctree
CLI-registered jobs store launch config as sections arrays, not flat
dicts. Add _launch_value helper to read from both formats. Update seed
script to generate mixed-format synthetic data.
The lockfile was corrupted by a local pnpm install --update-checksums
that replaced debug@4.4.3's integrity hash with a value from a
different registry mirror. Restore the original hash from main.
- _duration_seconds now takes status: running jobs use now() - created_at
  (keeps growing), terminal jobs use updated_at - created_at (fixed at
  completion). Fixes incorrect duration from registry scans updating
  updated_at on every poll for exited jobs.
- scan_registered_jobs preserves created_at from the registry item
  instead of using dashboard discovery time.
- scan_registered_jobs only updates updated_at for running jobs or
  status transitions, not for already-terminal jobs.
- Add tests for running vs terminal duration calculation.
- Seed script merges synthetic jobs into existing state by default,
  preserving real jobs. Use --replace to discard existing data.
- Seed emits ISO-8601 timestamps instead of epoch floats, avoiding
  TypeError in list_jobs sort when mixed with real jobs.
- list_jobs sorts by _parse_time(created_at) instead of raw value
  to handle any str/float mixture safely.
- Update docs to reflect merge mode and --replace flag.
…ge clamp

- _launch_value now guards against sections=None and items=None
  instead of raising TypeError on malformed nested structures
- URL enum params (state/type/sort) validated against known values,
  invalid values fall back to defaults instead of producing empty
  results or broken sort
- URL page param validated: rejects negative, Infinity, NaN, non-numeric
- Page clamp effect now waits for jobList to load before clamping,
  preventing restored page=2 from being wiped to 1 on initial render
- Add 3 tests for malformed sections (sections=None, items=None,
  sections as non-list)
- Rebuild dashboard dist
- Sort imports alphabetically in test file
- Expand multi-line dict/list to satisfy ruff-format
- Use double quotes consistently in seed script
- Add trailing newline to both files
- Remove extra blank line after import in seed script
Integrate upstream dashboard redesign (table layout, runtime-repair
filter, jobPageSize=3) with our search/filter/sort toolbar. Keep our
URL parameter validation, enum guards, and page clamp fixes.
@xsuler xsuler closed this Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add dashboard search, filtering, and sorting for runs

2 participants