2.4K
Dashboard showing 12 drives with live SMART health badges, temperatures, type, and capacity at a glance.
Historical speed curve to track performance overtime
Latency, sequential and random read statistics
smartctl --scancurl -O https://raw.githubusercontent.com/tabilzad/sectorama/master/docker-compose.prod.yml
export INFLUXDB_TOKEN=change-me-strong-random-secret
# optional — defaults shown
export INFLUXDB_ADMIN_PASSWORD=adminpass
export SMART_POLL_INTERVAL_MINUTES=5
export BENCHMARK_NUM_POINTS=11
docker compose -f docker-compose.prod.yml up -d
Open http://localhost:8888, click Scan for Drives, then run a benchmark from any drive's detail page.
Note: The container runs
privilegedand mounts/devread-only so thatsmartctlandfiocan access raw block devices. Do not expose port 8888 to the public internet.
# 1. Clone
git clone https://github.com/tabilzad/sectorama.git
cd sectorama
# 2. Install workspace dependencies
npm install
# 3. Start just the InfluxDB
docker compose -f docker-compose.dev.yml up -d
# 4. Configure environment for node
cp .env.example .env
# On Windows/macOS: add DISK_DISCOVERY_MOCK=true to .env
# 5. Run (backend :8888, frontend :5173 with HMR)
npm run dev
npm run build # compiles shared → backend → frontend
npm run typecheck # type-check all workspaces without emitting
| Variable | Default | Description |
|---|---|---|
PORT | 8888 | HTTP port the backend listens on |
SQLITE_PATH | ./sectorama.db | Path to the SQLite database file |
INFLUXDB_URL | http://localhost:8086 | InfluxDB v2 base URL |
INFLUXDB_TOKEN | (required) | InfluxDB API token |
INFLUXDB_ORG | sectorama | InfluxDB organisation |
INFLUXDB_BUCKET | sectorama | InfluxDB bucket |
INFLUXDB_ADMIN_PASSWORD | adminpass | Admin password for the bundled InfluxDB service |
SMART_POLL_INTERVAL_MINUTES | 5 | SMART polling interval |
BENCHMARK_NUM_POINTS | 11 | Number of positions sampled in each position-curve run |
DISK_DISCOVERY_MOCK | false | Return synthetic drives/SMART/benchmark data (Windows/macOS dev) |
TEMPERATURE_ALERT_THRESHOLD_CELSIUS | 50 | Global default temperature alert threshold; overridable per drive |
| Store | What lives there |
|---|---|
SQLite (better-sqlite3) | Drive registry, benchmark run metadata, schedules, latest SMART cache, notification channels, subscriptions, per-drive alert thresholds |
| InfluxDB v2 | SMART attribute history, benchmark speed points, benchmark profile results |
Sectorama can push alerts to external services when a drive's health or temperature crosses a threshold.
| Type | Fires when… |
|---|---|
smart_error | SMART self-assessment transitions from passing → failing |
temperature | Drive temperature transitions from at-or-below the threshold to above it |
Alerts are transition-only: they fire once when a condition first occurs and are silent until the condition clears and re-triggers. This prevents alert storms on every poll.
| Type | Config fields |
|---|---|
webhook | URL + optional auth (None / Basic / Bearer token) |
slack | Slack Incoming Webhook URL (Block Kit formatting) |
Channels are managed from the Notifications page in the UI. Each channel can subscribe to any combination of alert types. A test payload can be sent from the UI at any time.
The global default is set via TEMPERATURE_ALERT_THRESHOLD_CELSIUS (default 50°C). Individual drives can override
this from the Alert Settings section on the Drive Detail → SMART tab.
packages/backend/src/services/notifications/channels/MyChannel.ts implementing INotificationChannelcase 'mytype' to channelFactory.tsChannelType to @sectorama/sharedNo other files need to change.
Contributions are welcome. Please:
masternpm run build && npm run typecheck passFor larger changes, open an issue first to discuss the approach.
Released under the GNU General Public License v3.0.
Content type
Image
Digest
sha256:856c65c8f…
Size
73.4 MB
Last updated
6 months ago
docker pull tabilzad/sectorama