{"id":46347428,"url":"https://github.com/benediktschackenberg/dbadashwebview","last_synced_at":"2026-03-13T11:00:57.424Z","repository":{"id":342089000,"uuid":"1172628163","full_name":"BenediktSchackenberg/dbadashwebview","owner":"BenediktSchackenberg","description":"Modern web dashboard for DBA Dash — monitor your SQL Server fleet from any browser. Real-time performance, backups, jobs, waits, IO. Built with React + ASP.NET Core.","archived":false,"fork":false,"pushed_at":"2026-03-10T15:33:48.000Z","size":388,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-10T21:38:21.459Z","etag":null,"topics":["aspnet-core","dashboard","database-monitoring","dba","dba-dash","monitoring","react","sql-server","sql-server-monitoring","webview"],"latest_commit_sha":null,"homepage":"https://github.com/BenediktSchackenberg/dbadashwebview#readme","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenediktSchackenberg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-04T14:22:21.000Z","updated_at":"2026-03-10T15:33:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/BenediktSchackenberg/dbadashwebview","commit_stats":null,"previous_names":["benediktschackenberg/dbadashwebview"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/BenediktSchackenberg/dbadashwebview","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenediktSchackenberg%2Fdbadashwebview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenediktSchackenberg%2Fdbadashwebview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenediktSchackenberg%2Fdbadashwebview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenediktSchackenberg%2Fdbadashwebview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenediktSchackenberg","download_url":"https://codeload.github.com/BenediktSchackenberg/dbadashwebview/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenediktSchackenberg%2Fdbadashwebview/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30466310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aspnet-core","dashboard","database-monitoring","dba","dba-dash","monitoring","react","sql-server","sql-server-monitoring","webview"],"created_at":"2026-03-04T22:01:47.114Z","updated_at":"2026-03-13T11:00:57.414Z","avatar_url":"https://github.com/BenediktSchackenberg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"docs/logo.svg\" alt=\"DBA Dash WebView\" width=\"120\" /\u003e\n\n# DBA Dash WebView\n\n**A modern web dashboard for SQL Server fleet monitoring**\n\n*Browser-based companion to [DBA Dash](https://github.com/trimble-oss/dba-dash) — monitor hundreds of SQL Servers from any device.*\n\n[![Build](https://github.com/BenediktSchackenberg/dbadashwebview/actions/workflows/build.yml/badge.svg)](https://github.com/BenediktSchackenberg/dbadashwebview/actions/workflows/build.yml)\n[![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![.NET 8](https://img.shields.io/badge/.NET-8.0-purple.svg)](https://dotnet.microsoft.com/)\n[![React](https://img.shields.io/badge/React-19-61dafb.svg)](https://react.dev/)\n[![DBA Dash](https://img.shields.io/badge/Powered%20by-DBA%20Dash-green.svg)](https://dbadash.com)\n\n[Features](#-features) · [Screenshots](#-screenshots) · [Quick Start](#-quick-start) · [Deployment](#-iis-deployment) · [Configuration](#-configuration) · [API Reference](#-api-reference) · [Roadmap](#-roadmap) · [Contributing](#-contributing)\n\n---\n\n**DBA Dash** is an outstanding open-source SQL Server monitoring tool by [Trimble](https://github.com/trimble-oss/dba-dash). **DBA Dash WebView** gives it a web UI — access your fleet's health from any browser, any device, anywhere.\n\n\u003c/div\u003e\n\n---\n\n## The Problem\n\nDBA Dash has a powerful Windows GUI — but in modern IT environments, that's not always enough:\n\n| Challenge | How WebView Helps |\n|-----------|------------------|\n| DBA Dash GUI is Windows-only | WebView runs in **any browser** — Mac, Linux, iPad, phone |\n| Can't share dashboards with management | One URL, everyone sees live data — **no install required** |\n| VPN required to check server health | Deploy on an internal IIS, access from anywhere on your network |\n| IT managers need high-level overviews | **Management dashboards** with RPO analysis, license costs, fleet KPIs |\n| Setting up monitoring views takes time | **40+ pre-built pages** for common DBA workflows |\n\n**Zero impact on your existing setup** — WebView reads from the same `DBADashDB` your collectors already write to. No additional agents, no schema changes, no configuration needed on monitored servers.\n\n---\n\n## ✨ Features\n\n### DBA Dash-Style Navigation\nFull instance tree sidebar — grouped by SQL Server version (2025, 2022, 2019…), each instance expandable with categories: Configuration, HA/DR, Storage, Databases, Backups, Jobs, Reports. Click any node → filtered view for that server only.\n\n### Performance Summary Dashboard\nReal-time overview of your entire fleet in a single table — CPU, waits, IO latency, IOPs per instance. Sortable columns, auto-refresh every 30 seconds, user-configurable warning/critical color thresholds.\n\n### Management Reporting\nThree purpose-built reports designed for **IT managers and decision-makers**:\n\n- **License Overview** — SQL Server version/edition distribution, total core \u0026 RAM counts, end-of-support timeline with color-coded urgency\n- **Underutilized Servers** — Instances averaging \u003c5% CPU over 14 days, with estimated annual savings per server (Enterprise: ~$15K/core, Standard: ~$4K/core)\n- **Fleet Statistics** — CPU distribution buckets, top 10 consumers, RAM/storage allocation across the fleet\n\n### Backup \u0026 Recovery Overview\nManagement-grade backup dashboard sorted by CPU load (business-critical servers first):\n\n- **Expandable instance cards** — click to see every database's Full/Diff/Log backup status\n- **RPO indicators** — Excellent / Good / OK / Warning / Critical per database\n- **Recovery time estimates** — calculated from backup duration and size\n- **KPI cards** — backups in last 24h, total backup size, average recovery time\n- **Recovery Impact Assessment** — worst-case recovery time, databases with RPO gaps\n\n### Performance Deep-Dive\n- **Running Queries** — Live view of executing queries with blocking detection\n- **Blocking Analysis** — Tree view of blocking chains, root blockers highlighted\n- **Slow Queries** — Extended Events data with duration/DB/application filters\n- **Wait Statistics** — Stacked area chart of wait types over time\n- **Memory** — Buffer pool, PLE trends, memory clerk breakdown\n- **IO Performance** — Read/write latency charts, IOPS, throughput per file\n- **Object Execution Stats** — Stored procedure and function performance\n- **Performance Counters** — Custom counter monitoring with trend charts\n- **Query Store** — Top resource consumers from Query Store data\n\n### Daily Health Checks\n- **Backup Status** — Full/Diff/Log backup age per database, RPO compliance\n- **Agent Jobs** — Job history with Gantt-style timeline visualization\n- **Drive Space** — Capacity monitoring with usage percentage and color thresholds\n- **Database Space** — File-level space tracking with growth analysis\n- **TempDB** — File configuration and usage monitoring\n- **Alerts** — Alert inbox with severity filtering and acknowledgement\n\n### Tracking \u0026 Compliance\n- **Configuration Tracking** — Detect sp_configure changes with before/after diff\n- **SQL Patching** — Version distribution across fleet, patch history timeline\n- **Schema Changes** — DDL change history timeline\n- **Identity Columns** — Usage percentage with threshold alerts\n\n### Administration\n- **Configurable Thresholds** — Define warning/critical levels per metric — no colors until you set them\n- **Active Directory Authentication** — LDAP integration with group-based roles\n- **Local + AD Auth** — Hardcoded admin fallback when AD is down\n- **Server Management** — View monitored instances and connection details\n- **Groups \u0026 Tags** — Organize instances for filtering\n- **Users \u0026 RBAC** — Admin / Operator / Viewer roles\n- **Data Retention** — Configure cleanup per data category\n\n### User Experience\n- **Command Palette** (Ctrl+K) — Instant fuzzy search across instances, databases, jobs\n- **Auto-Refresh** — 30-second intervals with countdown indicator\n- **Dark Theme** — Glassmorphism design, optimized for NOC/SOC wall displays\n- **Instance-Aware Navigation** — Tree links pre-select the instance, no manual dropdowns\n- **Responsive** — Collapsible sidebar, works on tablets\n- **Fast** — React 19 + Vite, sub-second page transitions\n\n---\n\n## 📸 Screenshots\n\n\u003e *Coming soon — deployment screenshots from a 200+ SQL Server environment.*\n\n---\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n| Requirement | Version |\n|-------------|---------|\n| [DBA Dash](https://github.com/trimble-oss/dba-dash) | Any (populated DBADashDB required) |\n| [.NET 8 Runtime](https://dotnet.microsoft.com/download/dotnet/8.0) | 8.0+ (Hosting Bundle for IIS) |\n| SQL Server | 2012+ |\n\n### Download \u0026 Run\n\n1. Download the latest release from [Releases](https://github.com/BenediktSchackenberg/dbadashwebview/releases)\n2. Extract the ZIP\n3. Edit `appsettings.json`:\n\n```json\n{\n  \"ConnectionStrings\": {\n    \"DBADashDB\": \"Server=YOUR_SQL_SERVER;Database=DBADashDB;User Id=YOUR_USER;Password=YOUR_PASSWORD;TrustServerCertificate=true;\"\n  }\n}\n```\n\n4. Deploy to IIS (see below) or run standalone:\n```bash\ndotnet DBADashWebView.dll\n# Open http://localhost:5000\n```\n\n5. Login with `admin` / `admin` (change this in production!)\n\n---\n\n## 🖥️ IIS Deployment\n\n### 1. Install the ASP.NET Core Hosting Bundle\n\nDownload from [Microsoft](https://dotnet.microsoft.com/download/dotnet/8.0) → **Hosting Bundle** (not just Runtime).\n\n```powershell\niisreset  # Required after installing the Hosting Bundle\n```\n\n### 2. Create the IIS Site\n\n```powershell\n# Extract release\nExpand-Archive -Path dbadash-webview.zip -DestinationPath C:\\inetpub\\dbadash\n\n# Create App Pool (No Managed Code)\nImport-Module WebAdministration\nNew-WebAppPool -Name \"DBADashWebView\"\nSet-ItemProperty \"IIS:\\AppPools\\DBADashWebView\" -Name \"managedRuntimeVersion\" -Value \"\"\n\n# Create Website\nNew-Website -Name \"DBADashWebView\" -PhysicalPath \"C:\\inetpub\\dbadash\" `\n            -ApplicationPool \"DBADashWebView\" -Port 8080\n\n# Grant read permissions\nicacls \"C:\\inetpub\\dbadash\" /grant \"IIS AppPool\\DBADashWebView:(OI)(CI)R\" /T\n```\n\n### 3. Configure Connection String\n\nEdit `C:\\inetpub\\dbadash\\appsettings.json` — set your DBADashDB server, credentials, and add `Encrypt=false` if using SQL authentication without TLS.\n\n### 4. Browse to `http://your-server:8080`\n\n### Troubleshooting\n\n| Symptom | Fix |\n|---------|-----|\n| 502.5 / 500.30 | Install the Hosting Bundle, then `iisreset` |\n| Blank page, no errors | Check connection string — server reachable? Correct DB name? |\n| No instances showing | SQL user needs `db_datareader` on DBADashDB |\n| \"HTTP Error 500.19\" | Hosting Bundle not installed or `web.config` invalid |\n| Login fails | Default credentials: `admin` / `admin` |\n| CORS errors | Deploy frontend and backend together (same origin) |\n\nEnable detailed logging:\n```xml\n\u003c!-- In web.config --\u003e\n\u003caspNetCore stdoutLogEnabled=\"true\" stdoutLogFile=\".\\logs\\stdout\" ... /\u003e\n```\n\n---\n\n## ⚙️ Configuration\n\n### SQL Server Permissions\n\nWebView needs **read-only** access to DBADashDB:\n\n```sql\nUSE DBADashDB;\nCREATE LOGIN [dbadashweb] WITH PASSWORD = 'YourSecurePassword';\nCREATE USER [dbadashweb] FOR LOGIN [dbadashweb];\nALTER ROLE db_datareader ADD MEMBER [dbadashweb];\nGRANT EXECUTE ON SCHEMA::dbo TO [dbadashweb];\n```\n\n### Active Directory Authentication\n\nConfigure via **Settings → Users → LDAP tab**, or directly edit `config/ad-config.json`:\n\n```json\n{\n  \"Enabled\": true,\n  \"Server\": \"ldap://dc01.corp.local\",\n  \"BaseDN\": \"DC=corp,DC=local\",\n  \"BindUser\": \"CN=svc-dbadash,OU=Service,DC=corp,DC=local\",\n  \"AdminGroup\": \"CN=DBA-Admins,OU=Groups,DC=corp,DC=local\",\n  \"AllowLocalFallback\": true\n}\n```\n\nWhen `AllowLocalFallback` is true, the built-in `admin` account still works when AD is unreachable.\n\n### Dashboard Thresholds\n\nConfigure via **Settings → Thresholds**. Define warning and critical levels per metric (CPU %, IO latency, wait ms, etc.). **Cells remain neutral/uncolored** until you explicitly set thresholds — no surprise colors out of the box.\n\n---\n\n## 📡 API Reference\n\nAll endpoints require JWT authentication via `Authorization: Bearer \u003ctoken\u003e` header.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAuthentication\u003c/strong\u003e\u003c/summary\u003e\n\n```\nPOST /api/auth/login              { \"username\": \"...\", \"password\": \"...\" }  →  { \"token\": \"...\" }\nGET  /api/health                  Health check (no auth required)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDashboard \u0026 Navigation\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET /api/dashboard/stats                    KPIs, top CPU, largest DBs, alerts\nGET /api/dashboard/performance-summary      Performance summary table\nGET /api/tree                               Instance tree with databases (for sidebar)\nGET /api/instances                          All instances with version info\nGET /api/instances/{id}                     Instance detail\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePer-Instance Data\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET /api/instances/{id}/cpu\nGET /api/instances/{id}/waits\nGET /api/instances/{id}/drives\nGET /api/instances/{id}/databases\nGET /api/instances/{id}/backups\nGET /api/instances/{id}/jobs\nGET /api/instances/{id}/queries\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePerformance Monitoring\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET /api/performance/running-queries?instanceId=\nGET /api/performance/blocking?instanceId=\nGET /api/performance/slow-queries?instanceId=\u0026hours=24\nGET /api/performance/memory?instanceId=\nGET /api/performance/io?instanceId=\nGET /api/performance/exec-stats?instanceId=\u0026hours=24\nGET /api/performance/waits-timeline?instanceId=\u0026hours=24\nGET /api/performance/counters?instanceId=\u0026hours=24\nGET /api/performance/query-store?instanceId=\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMonitoring \u0026 Tracking\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET /api/monitoring/job-timeline?instanceId=\u0026hours=24\nGET /api/monitoring/configuration?instanceId=\nGET /api/monitoring/configuration/changes?instanceId=\u0026days=30\nGET /api/monitoring/patching\nGET /api/monitoring/schema-changes?instanceId=\u0026days=30\nGET /api/monitoring/identity-columns?instanceId=\nGET /api/monitoring/tempdb?instanceId=\nGET /api/monitoring/db-space?instanceId=\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eEstate \u0026 Reporting\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET /api/alerts/recent\nGET /api/jobs/recent\nGET /api/jobs/failures\nGET /api/drives\nGET /api/backups/estate\nGET /api/backups/management            Backup \u0026 Recovery management view\nGET /api/availability-groups\nGET /api/availability-groups/{id}\nGET /api/reports/licenses              License \u0026 version overview\nGET /api/reports/underutilized         Underutilized server analysis\nGET /api/reports/fleet-stats           Fleet resource statistics\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSettings\u003c/strong\u003e\u003c/summary\u003e\n\n```\nGET  /api/settings/ad                  AD/LDAP configuration\nPOST /api/settings/ad                  Update AD config\nPOST /api/settings/ad/test             Test AD login\nGET  /api/settings/thresholds          Dashboard thresholds\nPOST /api/settings/thresholds          Update thresholds\n```\n\u003c/details\u003e\n\n---\n\n## 🏗️ Architecture\n\n```\n┌──────────────────┐       ┌──────────────────┐       ┌─────────────────┐\n│                  │       │                  │       │                 │\n│  Browser         │──────▶│  ASP.NET Core 8  │──────▶│   DBADashDB     │\n│  (React SPA)     │  JWT  │  (Minimal API)   │  SQL  │   (SQL Server)  │\n│                  │       │                  │       │                 │\n└──────────────────┘       └──────────────────┘       └────────┬────────┘\n                                  │                            │\n                             IIS / Kestrel              DBA Dash Agents\n                             Static files               (your collectors)\n                             Read-only queries                 │\n                                                     ┌────────┴────────┐\n                                                     │  Your SQL       │\n                                                     │  Server Fleet   │\n                                                     │  (10–1000+)     │\n                                                     └─────────────────┘\n```\n\n| Layer | Technology |\n|-------|-----------|\n| **Frontend** | React 19, TypeScript, Vite, Tailwind CSS 4, Recharts, Framer Motion, Lucide Icons |\n| **Backend** | ASP.NET Core 8 Minimal API, Microsoft.Data.SqlClient |\n| **Auth** | JWT tokens + optional LDAP/Active Directory |\n| **Deployment** | IIS with ASP.NET Core Hosting Module |\n| **CI/CD** | GitHub Actions → ZIP artifact → GitHub Release |\n\n### Page Count\n\n| Category | Pages |\n|----------|-------|\n| Dashboard \u0026 Navigation | 3 |\n| Performance Monitoring | 10 |\n| Daily Health Checks | 6 |\n| Tracking \u0026 Compliance | 4 |\n| Management Reporting | 3 |\n| Estate Views | 4 |\n| Administration | 6 |\n| **Total** | **40+** |\n\n---\n\n## 🔨 Building from Source\n\n```bash\ngit clone https://github.com/BenediktSchackenberg/dbadashwebview.git\ncd dbadashwebview\n\n# Frontend\ncd frontend\nnpm install\nnpm run build\ncd ..\n\n# Backend (publishes to ./publish)\ncd backend\ndotnet publish -c Release -o ../publish\ncd ..\n\n# Combine: copy SPA into wwwroot\ncp -r frontend/dist/* publish/wwwroot/\n```\n\nThe `publish/` folder is ready for IIS deployment.\n\n---\n\n## 🗺️ Roadmap\n\n- [ ] Scheduled PDF reports via email\n- [ ] Multi-tenant support (multiple DBADashDB repositories)\n- [ ] Custom dashboard layouts (drag \u0026 drop widgets)\n- [ ] Webhook / Teams / Slack notifications\n- [ ] Dark/Light theme toggle\n- [ ] Grafana-style alerting rules\n- [ ] REST API for external integrations\n- [ ] Real-time SignalR push updates\n- [ ] Export to CSV/Excel from any table\n\n---\n\n## 🤝 Contributing\n\nContributions welcome! Fork the repo, create a feature branch, and submit a PR.\n\n```bash\ngit checkout -b feature/my-feature\ngit commit -m 'feat: add my feature'\ngit push origin feature/my-feature\n```\n\nPlease ensure `npm run build` and `dotnet build` pass before submitting.\n\n---\n\n## 🙏 Acknowledgements\n\n**[DBA Dash](https://github.com/trimble-oss/dba-dash)** by [David Wiseman](https://github.com/DavidWisworker) / [Trimble](https://github.com/trimble-oss) — the outstanding open-source SQL Server monitoring tool that provides all the data WebView visualizes. Licensed under Apache 2.0.\n\nIf you're not using DBA Dash yet, [check it out](https://dbadash.com) — it's one of the best tools available for SQL Server monitoring.\n\nDBA Dash WebView is an **independent project** that provides a web frontend for DBA Dash data. It is not affiliated with or endorsed by Trimble or the DBA Dash project.\n\n---\n\n## 📄 License\n\n[MIT](LICENSE) — DBA Dash WebView\n\n[Apache 2.0](https://github.com/trimble-oss/dba-dash/blob/main/LICENSE) — DBA Dash\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Built by [Benedikt Schackenberg](https://github.com/BenediktSchackenberg)**\n\n*If this project helps you, give it a ⭐!*\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenediktschackenberg%2Fdbadashwebview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenediktschackenberg%2Fdbadashwebview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenediktschackenberg%2Fdbadashwebview/lists"}