Using the Dashboard
msh comes with a built-in UI that gives you full visibility into your data pipeline. It's designed to help you debug issues, understand dependencies, and track the ROI of your data platform.
To start the dashboard:
msh ui
Then visit http://localhost:3000.
The Lineage Graph
The center of the dashboard is the Lineage Graph. It visualizes the DAG (Directed Acyclic Graph) of your assets.
- Nodes: Represent your assets (sources, models, exposures).
- Edges: Represent data flow dependencies.
- Colors:
- Cyan: Ingestion sources.
- Aqua: Transformation models.
- Violet: Downstream exposures (dashboards).
Interaction
- Click: Select a node to view its details in the Side Drawer.
- Drag: Rearrange nodes to better visualize clusters.
- Zoom: Scroll to zoom in/out of complex graphs.
Smart Stats & ROI
The top bar displays "Smart Stats" that quantify the value msh is providing.
- Columns Saved: This metric tracks how many columns were excluded from ingestion thanks to Smart Ingest.
- Why it matters: Every column you don't ingest saves compute, storage, and API bandwidth. High numbers here indicate a highly optimized pipeline.
- Active Assets: The number of assets currently deployed and healthy.
Debugging with the Side Drawer
When you click an asset, the Side Drawer opens with deep inspection tools.
1. Overview
Shows the current Version Hash, Status (Deployed/Failed), and Last Run time.
2. Code View
Toggle between Raw and Compiled views.
- Raw: The code exactly as you wrote it in your
.mshor.sqlfile. - Compiled: The final SQL that was executed against the warehouse, with all Jinja macros (
{{ source }}) resolved to actual table names. This is critical for debugging SQL errors.
3. Lineage List
A text-based list of Upstream (parents) and Downstream (children) dependencies, useful for quick navigation.
Command Palette
Power users can navigate the dashboard entirely via keyboard using the Command Palette.
- Trigger: Press
Cmd+K(Mac) orCtrl+K(Windows/Linux), or click the Search bar in the sidebar. - Features:
- Search: Instantly find assets by name or description.
- Navigate: Use
↑and↓arrows to select results. - Select: Press
Enterto jump directly to the asset details.
Asset Details & Execution
Clicking any node in the graph or selecting it from the Command Palette opens the Asset Detail View.
Tabs
- Overview: High-level metadata, description, and Smart Ingest efficiency stats (visualizing columns saved vs. fetched).
- Code: View the Schema (column types) and the Compiled SQL (debugging what actually ran).
- Quality: See the results of data quality tests (unique, not_null, etc.) with pass/fail status and execution times.
Quality Metrics
The dashboard provides comprehensive quality metrics and test results visibility.
Test Results
After each pipeline run, test results are automatically captured and displayed:
- Test Status: Pass/fail indicators for each test
- Execution Time: How long each test took to run
- Pass Rate: Overall percentage of tests passing
- Last Run: Timestamp of the last test execution
Quality API
The dashboard exposes a quality metrics API endpoint:
Endpoint: GET /api/quality.json
Response:
{
"overall": {
"total_tests": 25,
"passed": 23,
"failed": 2,
"pass_rate": 0.92
},
"assets": [
{
"name": "orders",
"tests": [...],
"last_run": "2024-01-15T10:30:00Z",
"summary": {
"total": 5,
"passed": 4,
"failed": 1,
"pass_rate": 0.8
}
}
]
}
Accessing Test Results
Test results are available in multiple ways:
- Via Dashboard: View quality metrics in the asset detail view
- Via API: Query
/api/quality.jsonwhen the UI is running - Via Catalog: Test results are included in
msh_catalog.jsonafter each run - Via File: Test results are saved to
.msh/test_results.jsonafter each test run
Test Results Structure
Test results are stored in .msh/test_results.json:
{
"orders": {
"asset_name": "orders",
"timestamp": "2024-01-15T10:30:00Z",
"tests": [
{
"name": "test_orders_id_unique",
"status": "pass",
"execution_time": 0.5
},
{
"name": "test_orders_amount_positive",
"status": "fail",
"execution_time": 0.3
}
],
"summary": {
"total": 5,
"passed": 4,
"failed": 1
}
}
}
Running Assets
You can trigger runs directly from the UI. The "Run" button offers three modes:
- Run Asset: Runs only the selected asset.
- Run w/ Upstreams (
+asset): Runs the asset and all its parents (recursive). Useful when you've changed upstream logic. - Run w/ Downstreams (
asset+): Runs the asset and all its children. Useful to propagate a schema change.
Live Terminal
Triggering a run opens the Terminal Modal, which streams live logs from the msh engine. You can watch the build process, test execution, and atomic swap in real-time.