A modern, high-performance benchmark results dashboard for Iggy, built with Rust. This application provides a responsive web interface for visualizing and analyzing benchmark results.
The project is organized as a Rust workspace with four main components:
frontend/: Yew-based web application
server/: Actix-web REST API server
shared/: Common code between components
The server provides the following REST API endpoints:
GET /health{"status": "healthy"}GET /api/hardwareGET /api/gitrefs/{hardware}hardware: Hardware configuration identifierGET /api/benchmarks/{gitref}
gitref: Git reference identifierGET /api/benchmarks/{hardware}/{gitref}
hardware: Hardware configuration identifiergitref: Git reference identifierGET /api/benchmark/full/{unique_id}
unique_id: UUID of the benchmarkGET /api/benchmark/light/{unique_id}
unique_id: UUID of the benchmarkGET /api/benchmark/trend/{hardware}/{params_identifier}hardware: Hardware configuration identifierparams_identifier: Benchmark parameters identifierGET /api/benchmark/{unique_id}/artifactsunique_id: UUID of the benchmarkAll endpoints return JSON responses (except artifacts which returns a ZIP file) and use standard HTTP status codes:
Rust toolchain (latest stable)
rustup default stable
WebAssembly target
rustup target add wasm32-unknown-unknown
Trunk (for frontend development)
cargo install trunk
Clone the repository:
git clone <repository-url>
Run the development script:
./scripts/dashboard/run_dev.sh
This will start both the frontend development server and the backend server.
Build the release version:
./scripts/dashboard/build_release.sh
Start the server:
./target/release/iggy-bench-dashboard-server --host 127.0.0.1 --port 8061
Run the development script from root of apache/iggy repository to start both the frontend and backend servers:
./scripts/dashboard/run_dev.sh
This will start:
Access the development version at http://localhost:8060
The docker image is available, and can be fetched via docker pull apache/iggy-bench-dashboard.
Call this from the root of the repository:
docker build -t iggy-bench-dashboard -f core/bench/dashboard/server/Dockerfile .
First, ensure your performance results directory exists and has proper permissions:
mkdir -p performance_results chmod 755 performance_results
Basic usage (recommended):
docker run -p 8061:8061 \ -v "$(pwd)/performance_results:/data/performance_results" \ --user "$(id -u):$(id -g)" \ apache/iggy-bench-dashboard
With custom configuration:
docker run -p 8061:8061 \ -v "$(pwd)/performance_results:/data/performance_results" \ --user "$(id -u):$(id -g)" \ -e HOST=0.0.0.0 \ -e PORT=8061 \ -e RESULTS_DIR=/data/performance_results \ apache/iggy-bench-dashboard
Using a named volume:
# Create a named volume docker volume create iggy-results # Run with named volume docker run -p 8061:8061 \ -v iggy-results:/data/performance_results \ apache/iggy-bench-dashboard
| Variable | Default | Description |
|---|---|---|
| HOST | 0.0.0.0 | Server host address |
| PORT | 8061 | Server port |
| RESULTS_DIR | /data/performance_results | Directory for performance results |
The container is configured to run as a non-root user for security. When mounting a local directory, you should:
--user flag with your local user ID to ensure proper file permissionsThe server can be configured using command-line arguments:
iggy-bench-dashboard-server [OPTIONS] Options: --host <HOST> Server host address [default: 127.0.0.1] --port <PORT> Server port [default: 8061] --results-dir <RESULTS_DIR> Directory containing performance results [default: ./performance_results] --log-level <LOG_LEVEL> Log level (trace, debug, info, warn, error) [default: info] --cors-origins <CORS_ORIGINS> Allowed CORS origins (comma-separated) [default: *] -h, --help Print help -V, --version Print version
For development, you can also use environment variables:
RUST_LOG: Control log level and filtersRUST_BACKTRACE: Enable backtraces (1 = enabled, full = full backtraces)Apache-2.0