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.CPUhasSQLProcessCPUandSystemIdleCPU— there is noSystemCPUcolumndbo.DBIOStats(notIOStats!) hasInstanceIDdirectly — no need to join throughDatabasesdbo.AvailabilityGroupsusesnamenotgroup_namedbo.AvailabilityReplicas(notAvailabilityGroupReplicas!) has norole_desccolumndbo.Databases.recovery_modelis a TINYINT, not NVARCHARdbo.Summary_GetreturnsJobStatus, notAgentJobsStatus;FileFreeSpaceStatus, notFileSpaceStatus
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:
- Exclude system databases (master, model, msdb, tempdb)
- Exclude AG secondaries via
dbo.DatabasesHADRJOIN - Exclude Simple Recovery databases from log backup evaluation
- Use MAX (newest backup) not MIN (oldest) for instance-level aggregation
- Handle NULL backup dates as “never backed up”
Four rounds of fixes before it matched the original DBA Dash behavior.
How to Install
Prerequisites
- DBA Dash with a populated
DBADashDB - .NET 8 Runtime (Hosting Bundle for IIS)
Quick Start
- Download the latest release from GitHub Releases
- Extract the ZIP
- Edit
appsettings.json:
{
"ConnectionStrings": {
"DBADashDB": "Server=YOUR_SERVER;Database=DBADashDB;User Id=YOUR_USER;Password=YOUR_PASSWORD;TrustServerCertificate=true;"
}
}
- Run standalone or deploy to IIS:
# Standalone
dotnet DBADashWebView.dll
# → http://localhost:5000
- 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