Skip to content

wingsrabbit/IDRAC-Status

Repository files navigation

iDRAC Status

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.

Features

  • 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.

Architecture

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 at WEB_PORT (18080 by default).

Quick Start

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 --build

Open the web UI:

http://localhost:18080/

On first launch, create the initial Admin account in the browser. After login, go to Settings and add:

  1. A credential for your iDRAC range.
  2. One or more hosts using that credential.
  3. 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.

Configuration

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

API docs are available after startup:

http://localhost:8000/docs

Useful endpoints:

  • GET /api/v1/fleet
  • GET /api/v1/fleet/{host_id}
  • GET /api/v1/metrics?metric=cpu,power&range=1h&scope=all
  • GET /api/v1/logs
  • GET /api/v1/system/about

Host-specific metrics use scope=host:<id>. Datacenter metrics use scope=dc:<datacenter_id>.

Operations

docker compose ps
docker compose logs -f collector
docker compose logs -f api
docker compose exec db psql -U idrac -d idrac_status

Check 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;

Development

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.py

The smoke test expects at least one configured live host and uses API_URL, WEB_URL, SMOKE_ADMIN_IDENTIFIER, and SMOKE_ADMIN_PASSWORD when provided.

Project Layout

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

Security Notes

  • Rotate the database password in .env before 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.

About

IDRAC-Status

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors