A lightweight, self-hosted dashboard for monitoring Active Directory domain controller health — replication, SYSVOL, LDAP bind, and service status at a glance.
Formerly DirWatch.
dirvex surfaces the health of your Active Directory domain controllers in a single dark-theme dashboard. A PowerShell collector emits a normalized JSON status file (replication state, SYSVOL, LDAP bind, DHCP scope, and service status) and the Flask app renders it as status cards, DC detail, alerts, and trends.
It is aimed at Windows admins who want a quick, dependency-light DC health view without standing up SCOM or a full monitoring stack. The default stack runs entirely from mock data, so you can try it, demo it, and screenshot it without touching a real domain controller.
git clone https://github.com/OneByJorah/dirvex.git
cd dirvex
cp .env.example .env
sg docker -c 'docker compose up -d --build'
curl -s http://127.0.0.1:5000/healthz # should print: okOpen http://127.0.0.1:5000. If port 5000 is already in use, set HOST_PORT first:
HOST_PORT=5010 sg docker -c 'docker compose up -d --build'
curl -s "http://127.0.0.1:${HOST_PORT:-5000}/healthz"Note
The app reads mock_dc_status.json at startup. Swap in your own collector output by mounting a real file at the same path. The included collectors/mock_dc_collector.ps1 generates sample data.
To capture the README screenshots locally:
npm install --no-save playwright
npx playwright install chromium
BASE_URL=http://127.0.0.1:5000 node scripts/screenshots.mjs- Domain controller overview — per-DC status cards with health, replication, SYSVOL, and LDAP bind state.
- Replication monitoring — track replication health between controllers.
- Service status — DNS, DHCP, and ADWS service state per DC.
- Alerts — severity-coded alert feed (critical / warning / info) in the dashboard.
- Public status endpoint —
/publicreturns a simple "all systems operational" health page. - Dark NOC UI — responsive sidebar layout with stats grid and DC detail pages.
- Collector scripts — PowerShell collectors for DC status, with Teams/Telegram notification placeholders.
- Docker & gunicorn — production image runs gunicorn as a non-root user.
flowchart LR
A[PowerShell collector] -->|mock_dc_status.json| B[Flask app :5000]
C[Live AD collector output] -->|mount JSON| B
B --> D[Dashboard /]
B --> E[Public status /public]
B --> F[Health check /healthz]
The app loads the JSON status file once at startup and renders it through Jinja2 templates. DC data can be refreshed by regenerating the file with a collector.
Basic operation needs no environment variables — the app reads mock_dc_status.json from its working directory. The Compose/entrypoint flow accepts:
| Variable | Default | Description |
|---|---|---|
FLASK_ENV |
production |
Flask environment |
MOCK_MODE |
true |
Use mock DC data (no live AD required) |
PORT |
5000 |
App port used by the entrypoint |
AD_DOMAIN |
— | AD domain (live mode) |
AD_SERVER |
— | DC hostname (live mode) |
AD_USERNAME / AD_PASSWORD |
— | AD bind credentials (live mode) |
LOG_LEVEL |
INFO |
Log verbosity |
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | DC status dashboard |
/public |
GET | Public status page |
/healthz |
GET | Health check — returns ok with HTTP 200 |
| Panel | Description |
|---|---|
| DC Overview | Status of all domain controllers |
| Replication | Inter-DC replication health |
| Services | DNS / DHCP / ADWS service state |
| Alerts | Recent severity-coded alerts |
- Windows admins — a fast DC health check without SCOM.
- Homelab AD labs — monitor test domain controllers.
- Pre-maintenance checks — confirm replication and services before a change window.
Python 3.11, Flask 3, Jinja2, PowerShell 5.1 collectors, gunicorn, Docker Compose.
| Dashboard | Public status |
|---|---|
![]() |
![]() |
Contributions are welcome — see CONTRIBUTING.md. Open an issue to report a bug or request a feature.
See SECURITY.md for reporting guidelines.
MIT — see LICENSE.

