Skip to main content

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 .msh or .sql file.
  • 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) or Ctrl+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 Enter to 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:

  1. Via Dashboard: View quality metrics in the asset detail view
  2. Via API: Query /api/quality.json when the UI is running
  3. Via Catalog: Test results are included in msh_catalog.json after each run
  4. Via File: Test results are saved to .msh/test_results.json after 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:

  1. Run Asset: Runs only the selected asset.
  2. Run w/ Upstreams (+asset): Runs the asset and all its parents (recursive). Useful when you've changed upstream logic.
  3. 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.