Native C++/Qt6 Error Dashabord log analyzer.
- Native Performance: ~5MB memory, instant startup, zero browser overhead
- Two Tabs: Scan (7-day historical) and Live (60-minute rolling, polls every 5s)
- Security Threat Detection: 8 threat categories with pattern matching
- Dark Terminal Aesthetic: Exact match to the original Dash design
- Full Filtering: Severity groups, unit filter, search, threats-only view
- Detail Panel: Click any row to expand full event details with threat breakdown
- CSV Export: Export filtered results with timestamps
sudo apt install build-essential cmake qt6-base-dev qt6-charts-dev libsystemd-devsudo dnf install cmake gcc-c++ qt6-qtbase-devel qt6-qtcharts-devel systemd-develsudo pacman -S cmake qt6-base qt6-charts systemdcd error-dashboard-qt
mkdir build && cd build
cmake ..
make -j$(nproc)sudo make install
# Installs to /usr/local/bin/error-dashboard# Run with defaults (7-day scan, 60min live window, 5s poll)
./error-dashboard
# Custom lookback periods
./error-dashboard --days 14 --live-window 120 --live-poll 10
# Short flags
./error-dashboard -d 3 -w 30 -p 15For dmesg access without sudo, add yourself to the adm group:
sudo usermod -aG adm $USER
newgrp admOr configure passwordless sudo for dmesg only:
echo "$USER ALL=(root) NOPASSWD: /usr/bin/dmesg" | sudo tee /etc/sudoers.d/dmesg-access
sudo chmod 0440 /etc/sudoers.d/dmesg-access- LogCollector - Uses libsystemd journal API for journald, QProcess for dmesg
- ThreatDetector - Pattern-based security threat detection (8 categories)
- StatsTab - Complete UI for one tab (scan or live)
- MainWindow - Tabbed interface coordinator with background threads
| Feature | Python/Dash | C++/Qt6 |
|---|---|---|
| Memory | ~200MB | ~5MB |
| Startup | 2-3s | <100ms |
| Dependencies | Flask, Dash, Plotly, pandas | Qt6, libsystemd |
| Distribution | Script + venv | Single binary |
| Platform | Web browser required | Native Linux app |
| Look & Feel | Identical | Identical |
- Authentication - Failed logins, invalid users, preauth disconnects
- Privilege Escalation - Sudo abuse, su failures, unauthorized access
- Suspicious Network - Port scans, firewall blocks, connection spam
- Filesystem Tampering - /etc/passwd, /etc/shadow modifications
- Service Crashes - Segfaults, core dumps, kernel panics
- Resource Exhaustion - OOM killer, disk full, file limit hits
- SELinux Violations - AVC denials, policy violations
- Malware Indicators - Rootkit signatures, suspicious binaries
MIT License - See source files for details
Code structure:
src/
├── main.cpp - Entry point with CLI parsing
├── mainwindow.h/cpp - Main window with scan/live tabs
├── statstab.h/cpp - Tab UI (stats, charts, table, filters)
├── logcollector.h/cpp - Journald + dmesg collection with libsystemd
├── threatdetector.h/cpp - Security pattern matching
└── logentry.h - Data structures
Charts use QtCharts (QBarSeries, QPieSeries). Styling uses Qt stylesheets (CSS-like).
Threading: Scan runs once on startup in background thread. Live polls every N seconds in separate thread. Both use Qt's signal/slot mechanism for thread-safe UI updates.