If you manage SQL Servers at any scale, you probably know DBA Dash — David Wiseman’s excellent open-source monitoring tool. It collects everything: CPU, waits, backups, jobs, disk space, AG health, patching status, and much more. The only catch? The GUI is a Windows desktop app.

That’s where DBA Dash WebView comes in. It’s a web frontend that reads from the same DBADashDB your collectors already populate — no additional agents, no schema changes, no configuration on monitored servers. Open a browser, see your fleet.

Why Build This?

A few pain points we kept hitting:

  • DBAs on Mac/Linux couldn’t access the dashboard without RDP
  • IT managers wanted a URL they could bookmark — not a Windows app to install
  • On-call checks from a phone or tablet were impossible
  • NOC wall displays needed something browser-based

DBA Dash does the hard work of collecting and storing the data. We just needed a better way to look at it.

What It Can Do

After about three weeks of development, WebView has 46 pages covering most DBA workflows. Here’s the rundown:

Summary Dashboard

The first thing you see — a faithful recreation of DBA Dash’s original Summary tab. A status matrix showing OK / Warning / Critical / N/A counts across 25 health checks for every instance. One glance, and you know where to focus.

The main dashboard has 5 tabs, exactly mirroring the DBA Dash GUI: Summary, Alerts, Performance Summary, Slow Queries, and Running Queries.

SQL Monitor

A card-based fleet overview inspired by Redgate SQL Monitor. Every instance gets a card with health status, CPU usage, and AG role. An alert sidebar shows the live error feed. Click any card to drill in.

Backup Ampel

This one was tricky to get right. A traffic-light report showing backup compliance:

  • Green: Full backup ≤24h and log backup ≤1h
  • Yellow: Full ≤48h and log ≤2h
  • Red: Everything else

The hard part was AlwaysOn Availability Groups. If you have AGs, backups only run on the preferred replica — secondaries legitimately have no recent backups. Our first version showed every secondary as RED. We had to JOIN dbo.DatabasesHADR to detect AG membership and exclude secondaries from the evaluation.

We also learned that dbo.Databases.recovery_model is a TINYINT (1=FULL, 2=BULK_LOGGED, 3=SIMPLE) — not NVARCHAR like you might expect. Simple Recovery databases don’t need log backups, so those get N/A instead of RED.

Instance Detail Pages

Per-instance views with tabbed navigation: Performance (CPU charts, wait analysis), Backups, Jobs, Databases, and Drives. The Performance tab now supports configurable time ranges — 1h, 6h, 24h, 7 days, or 14 days — so you can spot trends over longer periods, not just the last day.

Availability Groups

Fleet-wide AG overview with cluster visualization. Primary/Secondary roles, database sync state (SYNCHRONIZED, SYNCHRONIZING, NOT SYNCHRONIZING), lag monitoring (log send queue, redo queue), and a search that filters across server names, AG names, and database names.

Alerts

A unified feed combining Collection Errors and failed Agent Jobs. Severity filtering, server breakdown, and a detail panel for each alert. Auto-refreshes every 30 seconds.

Management Reporting

Purpose-built for IT managers:

  • Fleet Statistics — CPU distribution, top consumers, RAM/storage allocation
  • License Overview — edition distribution, core totals, end-of-support timeline
  • Underutilized Servers — instances averaging <5% CPU, consolidation candidates

Performance Deep-Dive

Running Queries, Blocking Analysis, Slow Queries (Extended Events), Wait Statistics, Memory, IO Performance, Execution Stats, Performance Counters, Query Store — all with per-instance filtering and configurable time ranges.

And More

Configuration tracking, SQL patching overview, schema change history, identity column monitoring, database space, TempDB, job timelines, AD authentication, RBAC, configurable thresholds…

The Tech Stack

Browser (React 19 SPA)  →  ASP.NET Core 8 (Minimal API)  →  DBADashDB (SQL Server)
  • Frontend: React 19, TypeScript, Vite, Tailwind CSS 4, Recharts for charts, Framer Motion for transitions, Lucide icons
  • Backend: ASP.NET Core 8 Minimal API with Microsoft.Data.SqlClient — no ORM, just parameterized SQL
  • Auth: JWT tokens with optional LDAP/Active Directory
  • Deployment: IIS with ASP.NET Core Hosting Module
  • Theme: Dark glassmorphism design — looks great on NOC wall displays

The backend is a single Program.cs file with Minimal API endpoints. Each endpoint runs one or two SQL queries against DBADashDB and returns JSON. The frontend is a standard React SPA with client-side routing.

Lessons Learned

The Status Enum Inversion

This was our biggest bug. DBA Dash uses DBADashStatusEnum:

Value Meaning
1 Critical
2 Warning
3 N/A
4 OK
5 Acknowledged

We assumed 1=OK and 4=Critical — the exact opposite. Every status badge, every worst-case calculation, every alert detection was inverted. The Summary page showed everything backwards. Once we found DBAChecksStatus.cs in the DBA Dash source code, the fix was straightforward but touched every file.

Lesson: When building on someone else’s data model, read their source code. Don’t assume.

Schema Surprises

A few things that caught us off guard:

  • dbo.CPU has SQLProcessCPU and SystemIdleCPU — there is no SystemCPU column
  • dbo.DBIOStats (not IOStats!) has InstanceID directly — no need to join through Databases
  • dbo.AvailabilityGroups uses name not group_name
  • dbo.AvailabilityReplicas (not AvailabilityGroupReplicas!) has no role_desc column
  • dbo.Databases.recovery_model is a TINYINT, not NVARCHAR
  • dbo.Summary_Get returns JobStatus, not AgentJobsStatus; FileFreeSpaceStatus, not FileSpaceStatus

We ended up downloading the actual table definitions and stored procedure source from the DBA Dash GitHub repo to verify column names. Worth the effort.

Backup Logic is Complicated

Getting backup status right required:

  1. Exclude system databases (master, model, msdb, tempdb)
  2. Exclude AG secondaries via dbo.DatabasesHADR JOIN
  3. Exclude Simple Recovery databases from log backup evaluation
  4. Use MAX (newest backup) not MIN (oldest) for instance-level aggregation
  5. Handle NULL backup dates as “never backed up”

Four rounds of fixes before it matched the original DBA Dash behavior.

How to Install

Prerequisites

Quick Start

  1. Download the latest release from GitHub Releases
  2. Extract the ZIP
  3. Edit appsettings.json:
{
  "ConnectionStrings": {
    "DBADashDB": "Server=YOUR_SERVER;Database=DBADashDB;User Id=YOUR_USER;Password=YOUR_PASSWORD;TrustServerCertificate=true;"
  }
}
  1. Run standalone or deploy to IIS:
# Standalone
dotnet DBADashWebView.dll
# → http://localhost:5000
  1. Login with admin / admin (change immediately in production!)

IIS Deployment

# Install .NET 8 Hosting Bundle first, then:
Expand-Archive -Path dbadash-webview.zip -DestinationPath C:\inetpub\dbadash

New-WebAppPool -Name "DBADashWebView"
Set-ItemProperty "IIS:\AppPools\DBADashWebView" -Name "managedRuntimeVersion" -Value ""

New-Website -Name "DBADashWebView" -PhysicalPath "C:\inetpub\dbadash" `
            -ApplicationPool "DBADashWebView" -Port 8080

The SQL user only needs db_datareader + EXECUTE on DBADashDB — read-only access, no write permissions needed.

Building from Source

git clone https://github.com/BenediktSchackenberg/dbadashwebview.git
cd dbadashwebview

cd frontend && npm install && npm run build && cd ..
cd backend && dotnet publish -c Release -o ../publish && cd ..
cp -r frontend/dist/* publish/wwwroot/

What’s Next

  • SignalR real-time push (replace 30s polling)
  • Scheduled PDF reports via email
  • Export to CSV/Excel
  • Custom dashboard layouts
  • Mobile-optimized views for on-call DBAs

Credits

All credit for the underlying data goes to DBA Dash by David Wiseman and Trimble. It’s one of the best SQL Server monitoring tools out there — open source, actively maintained, and incredibly comprehensive. If you’re not using it yet, you should be.

DBA Dash WebView is an independent project — not affiliated with or endorsed by Trimble. We just thought DBA Dash deserved a web interface.

Check it out: github.com/BenediktSchackenberg/dbadashwebview