Version: v1.0
iDRAC Status is a Dell PowerEdge Redfish monitoring stack for small IDC/NOC environments. It collects realtime health, temperature, power, fan, PSU, memory, disk, SEL, and Lifecycle data from iDRAC, stores it in PostgreSQL, exposes a FastAPI backend, and serves a React/Vite operations UI through Nginx.
- Fast 5-minute metrics loop for CPU, inlet, exhaust, and power samples.
- Independent hourly inventory loop for DIMM and disk detail, so slow inventory calls do not block realtime metrics.
- Independent 5-minute log loop for SEL and Lifecycle events.
- PostgreSQL-backed state, alert, log, settings, user, token, and metric storage.
- SQL-downsampled metric API with point counts tuned per range:
1h=12,6h=12,1d=12,7d=7,15d=15,30d=30. - React dashboard covering overview, data charts, alerts, inventory, logs, and settings.
- First-run admin setup, RBAC, bearer-token sessions, API tokens, and a stable error contract.
Dell iDRAC Redfish
|
v
collector ---> PostgreSQL <--- FastAPI <--- React/Vite/Nginx
Services in docker-compose.yml:
idrac-db: PostgreSQL 16.idrac-collector: async Redfish collector.idrac-api: FastAPI backend at:8000.idrac-web: Nginx static frontend atWEB_PORT(18080by default).
Requirements: Docker Engine with Compose v2.
git clone https://github.com/wingsrabbit/IDRAC-Status.git
cd IDRAC-Status
cp .env.example .env
docker compose up -d --buildOpen the web UI:
http://localhost:18080/
On first launch, create the initial Admin account in the browser. After login, go to Settings and add:
- A credential for your iDRAC range.
- One or more hosts using that credential.
- Optional datacenter/rack/unit metadata and alert channels.
The collector will start writing realtime metrics after the next aligned 5-minute tick. Inventory details are collected immediately on collector startup and then hourly.
Copy .env.example to .env and adjust the values before deploying.
| Variable | Default | Purpose |
|---|---|---|
APP_VERSION |
v1.0 |
Version returned by /api/v1/system/about. |
WEB_PORT |
18080 |
Host port for the web UI. |
POSTGRES_DB |
idrac_status |
PostgreSQL database name. |
POSTGRES_USER |
idrac |
PostgreSQL user. |
POSTGRES_PASSWORD |
change-me |
PostgreSQL password for your .env. |
REDFISH_POLL_INTERVAL_SEC |
300 |
Realtime metrics cadence. |
REDFISH_INVENTORY_INTERVAL_SEC |
3600 |
Slow DIMM/disk inventory cadence. |
REDFISH_LOG_INTERVAL_SEC |
300 |
SEL/Lifecycle log cadence. |
REDFISH_TIMEOUT_SEC |
30 |
Per-request Redfish timeout; lower it only if all iDRACs respond quickly. |
REDFISH_CONCURRENCY |
16 |
Concurrent host collection limit. |
Do not commit .env; it should contain your real database password and iDRAC credentials.
API docs are available after startup:
http://localhost:8000/docs
Useful endpoints:
GET /api/v1/fleetGET /api/v1/fleet/{host_id}GET /api/v1/metrics?metric=cpu,power&range=1h&scope=allGET /api/v1/logsGET /api/v1/system/about
Host-specific metrics use scope=host:<id>. Datacenter metrics use scope=dc:<datacenter_id>.
docker compose ps
docker compose logs -f collector
docker compose logs -f api
docker compose exec db psql -U idrac -d idrac_statusCheck recent metric freshness:
SELECT count(*), max(bucket_5min), now() - max(bucket_5min)
FROM metric_samples;Check per-host 1-hour coverage:
SELECT host_id, count(*)
FROM metric_samples
WHERE metric='cpu' AND bucket_5min >= now() - interval '60 minutes'
GROUP BY host_id
ORDER BY host_id;Run backend tests inside the project containers:
docker compose run --rm -T --no-deps api sh -lc 'cd /app && PYTHONPATH=/app pytest -q'
docker compose run --rm -T --no-deps collector sh -lc 'cd /app && PYTHONPATH=/app pytest -q'Run the smoke test against a configured live deployment:
python3 scripts/smoke.pyThe smoke test expects at least one configured live host and uses API_URL, WEB_URL, SMOKE_ADMIN_IDENTIFIER, and SMOKE_ADMIN_PASSWORD when provided.
api/ FastAPI application and API tests
collector/ Async Redfish collector and collector tests
db/ PostgreSQL initialization SQL
mock/ Optional mock server utilities
scripts/ Smoke and operational scripts
web/ React/Vite frontend and Nginx config
- Rotate the database password in
.envbefore production use. - Store iDRAC credentials through the Settings page; do not hard-code real credentials in source.
- Put the UI/API behind your normal VPN, firewall, or reverse-proxy access control.
- The collector connects to iDRAC self-signed TLS endpoints with certificate verification disabled, which is typical for internal Redfish appliances but should stay inside a trusted management network.