# System Hub - Central Control Dashboard

**Version:** 1.0.0  
**Last Updated:** 2025-12-28  
**Status:** Active


Central system control and monitoring dashboard for OpenWrt with comprehensive system management capabilities.

## Features

### System Monitoring
- Real-time system information (hostname, model, uptime, kernel version)
- System health metrics with visual gauges (CPU, RAM, Disk)
- CPU load average (1min, 5min, 15min)
- Memory usage detailed breakdown
- Storage monitoring for all mount points
- Temperature monitoring (thermal zones)

### Service Management
- List all system services with status
- Start/Stop/Restart services
- Enable/Disable service autostart
- Real-time service status (running/stopped)
- Batch service management

### System Logs
- View system logs with configurable line count (50-1000 lines)
- Real-time log filtering
- Search logs by keyword
- Terminal-style log display

### Backup & Restore
- Create system configuration backup (tar.gz)
- Download backup archive
- Restore configuration from backup
- System reboot functionality

## Installation

```bash
opkg update
opkg install luci-app-system-hub
/etc/init.d/rpcd restart
/etc/init.d/uhttpd restart
```

## Dependencies

- **luci-base**: LuCI framework
- **rpcd**: RPC daemon
- **coreutils**: Core utilities
- **coreutils-base64**: Base64 encoding/decoding

## Usage

### Web Interface

Navigate to **System → System Hub** in LuCI.

#### Overview Tab
- System information cards
- Health metrics with visual gauges:
  - CPU Load (percentage based on cores)
  - Memory Usage (percentage with MB breakdown)
  - Disk Usage (percentage with size info)
- CPU details (model, cores, load average)
- Temperature monitoring (color-coded: green < 60°C, orange < 80°C, red ≥ 80°C)
- Storage details for all mount points

#### Services Tab
- List of all system services
- Status indicators (running/stopped)
- Autostart status (enabled/disabled)
- Action buttons:
  - Start (for stopped services)
  - Stop (for running services)
  - Restart (for all services)
  - Enable/Disable autostart

#### System Logs Tab
- Log viewer with filter controls
- Configurable line count (50, 100, 200, 500, 1000)
- Keyword filtering
- Refresh logs on demand
- Terminal-style display (black background, green text)

#### Backup & Restore Tab
- Create and download configuration backup
- Upload and restore backup file
- System reboot with confirmation

#### Development Status Tab (Bonus)
- Mirrors the public `demo-dev-status` widget from secubox-website
- Displays overall progress, milestone groups, detailed roadmap, and project stats
- Useful to showcase transparency directly from the LuCI interface

### Command Line

#### Get System Status

```bash
ubus call luci.system-hub status
```

#### Get System Information

```bash
ubus call luci.system-hub get_system_info
```

Output:
```json
{
  "hostname": "openwrt",
  "model": "Raspberry Pi 4 Model B",
  "board": "rpi-4",
  "openwrt_version": "OpenWrt 23.05.0",
  "kernel": "5.15.134",
  "architecture": "aarch64",
  "uptime_seconds": 86400,
  "uptime_formatted": "1d 0h 0m",
  "local_time": "2025-12-24 10:30:00"
}
```

#### Get System Health

```bash
ubus call luci.system-hub get_health
```

Output:
```json
{
  "cpu": {
    "usage": 25,
    "status": "ok",
    "load_1m": "0.25",
    "load_5m": "0.30",
    "load_15m": "0.28",
    "cores": 4
  },
  "memory": {
    "total_kb": 4096000,
    "free_kb": 2048000,
    "available_kb": 3072000,
    "used_kb": 1024000,
    "buffers_kb": 512000,
    "cached_kb": 1536000,
    "usage": 25,
    "status": "ok"
  },
  "disk": {
    "total_kb": 30408704,
    "used_kb": 5447680,
    "usage": 19,
    "status": "ok"
  },
  "temperature": {
    "value": 45,
    "status": "ok"
  },
  "network": {
    "wan_up": true,
    "status": "ok"
  },
  "services": {
    "running": 35,
    "failed": 2
  },
  "score": 92,
  "timestamp": "2025-12-26 10:30:00",
  "recommendations": [
    "2 service(s) enabled but not running. Check service status."
  ]
}
```

#### List Services

```bash
ubus call luci.system-hub list_services
```

#### Manage Service

```bash
# Start a service
ubus call luci.system-hub service_action '{"service":"network","action":"start"}'

# Stop a service
ubus call luci.system-hub service_action '{"service":"network","action":"stop"}'

# Restart a service
ubus call luci.system-hub service_action '{"service":"network","action":"restart"}'

# Enable autostart
ubus call luci.system-hub service_action '{"service":"network","action":"enable"}'

# Disable autostart
ubus call luci.system-hub service_action '{"service":"network","action":"disable"}'
```

#### Get Logs

```bash
# Get last 100 lines
ubus call luci.system-hub get_logs '{"lines":100,"filter":""}'

# Get last 500 lines with filter
ubus call luci.system-hub get_logs '{"lines":500,"filter":"error"}'
```

#### Create Backup

```bash
ubus call luci.system-hub backup_config
```

Returns backup data in base64 format with size and filename.

#### Restore Configuration

```bash
# Encode backup file to base64
DATA=$(base64 < backup.tar.gz | tr -d '\n')

# Restore (include original file name for logging/validation)
ubus call luci.system-hub restore_config "{\"file_name\":\"backup.tar.gz\",\"data\":\"$DATA\"}"
```

#### Reboot System

```bash
ubus call luci.system-hub reboot
```

System will reboot after 3 seconds.

#### Get Storage Details

```bash
ubus call luci.system-hub get_storage
```

#### Get Settings

```bash
ubus call luci.system-hub get_settings
```

Output:
```json
{
  "general": {
    "auto_refresh": true,
    "health_check": true,
    "debug_mode": false,
    "refresh_interval": 30,
    "log_retention": 30
  },
  "thresholds": {
    "cpu_warning": 80,
    "cpu_critical": 95,
    "mem_warning": 80,
    "mem_critical": 95,
    "disk_warning": 80,
    "disk_critical": 95,
    "temp_warning": 70,
    "temp_critical": 85
  },
  "schedules": {
    "health_report": true,
    "backup_weekly": true,
    "log_cleanup": true
  },
  "upload": {
    "auto_upload": false,
    "url": "",
    "token": ""
  },
  "support": {
    "provider": "CyberMind.fr",
    "email": "support@cybermind.fr",
    "docs": "https://docs.cybermind.fr"
  }
}
```

#### Save Settings

```bash
ubus call luci.system-hub save_settings '{
  "auto_refresh": 1,
  "health_check": 1,
  "debug_mode": 0,
  "refresh_interval": 30,
  "log_retention": 30,
  "cpu_warning": 80,
  "cpu_critical": 95,
  "mem_warning": 80,
  "mem_critical": 95,
  "disk_warning": 80,
  "disk_critical": 95,
  "temp_warning": 70,
  "temp_critical": 85
}'
```

## ubus API Reference

### status()

Get comprehensive system status overview.

**Returns:**
```json
{
  "hostname": "openwrt",
  "model": "Device Model",
  "uptime": 86400,
  "health": {
    "cpu_load": "0.25",
    "mem_total_kb": 4096000,
    "mem_used_kb": 1024000,
    "mem_percent": 25
  },
  "disk_percent": 19,
  "service_count": 42
}
```

### get_system_info()

Get detailed system information.

### get_health()

Get comprehensive health metrics including CPU, memory, storage, and temperature.

### list_services()

List all system services with status.

**Returns:**
```json
{
  "services": [
    {
      "name": "network",
      "enabled": true,
      "running": true
    },
    {
      "name": "firewall",
      "enabled": true,
      "running": true
    }
  ]
}
```

### service_action(service, action)

Perform action on a service.

**Parameters:**
- `service`: Service name (required)
- `action`: Action to perform (start|stop|restart|enable|disable)

**Returns:**
```json
{
  "success": true,
  "message": "Service network start successful"
}
```

### get_logs(lines, filter)

Get system logs.

**Parameters:**
- `lines`: Number of lines to retrieve (default: 100)
- `filter`: Filter logs by keyword (optional)

**Returns:**
```json
{
  "logs": [
    "Dec 24 10:30:00 kernel: ...",
    "Dec 24 10:30:01 daemon.info dnsmasq[123]: ..."
  ]
}
```

### backup_config()

Create system configuration backup.

**Returns:**
```json
{
  "success": true,
  "data": "H4sIAAAAAAAAA...",
  "size": 12345,
  "filename": "backup-20251224-103000.tar.gz"
}
```

### restore_config(file_name, data)

Restore system configuration from backup.

**Parameters:**
- `file_name`: Original archive name (used for logging/validation, optional but recommended)
- `data`: Base64-encoded backup data

**Returns:**
```json
{
  "success": true,
  "message": "Configuration restored successfully. Reboot required."
}
```

### reboot()

Reboot the system (3-second delay).

**Returns:**
```json
{
  "success": true,
  "message": "System reboot initiated"
}
```

### get_storage()

Get detailed storage information for all mount points.

### get_settings()

Get all system-hub configuration settings.

**Returns:**
```json
{
  "general": {
    "auto_refresh": true,
    "health_check": true,
    "debug_mode": false,
    "refresh_interval": 30,
    "log_retention": 30
  },
  "thresholds": {
    "cpu_warning": 80,
    "cpu_critical": 95,
    "mem_warning": 80,
    "mem_critical": 95,
    "disk_warning": 80,
    "disk_critical": 95,
    "temp_warning": 70,
    "temp_critical": 85
  },
  "schedules": {
    "health_report": true,
    "backup_weekly": true,
    "log_cleanup": true
  },
  "upload": {
    "auto_upload": false,
    "url": "",
    "token": ""
  },
  "support": {
    "provider": "CyberMind.fr",
    "email": "support@cybermind.fr",
    "docs": "https://docs.cybermind.fr"
  }
}
```

### save_settings(...)

Save system-hub configuration settings to UCI.

**Parameters:**
- `auto_refresh`: Enable auto-refresh (0|1)
- `health_check`: Enable automatic health checks (0|1)
- `debug_mode`: Enable debug mode (0|1)
- `refresh_interval`: Refresh interval in seconds
- `log_retention`: Log retention in days
- `cpu_warning`: CPU warning threshold (%)
- `cpu_critical`: CPU critical threshold (%)
- `mem_warning`: Memory warning threshold (%)
- `mem_critical`: Memory critical threshold (%)
- `disk_warning`: Disk warning threshold (%)
- `disk_critical`: Disk critical threshold (%)
- `temp_warning`: Temperature warning threshold (°C)
- `temp_critical`: Temperature critical threshold (°C)

**Returns:**
```json
{
  "success": true,
  "message": "Settings saved successfully"
}
```

## System Information Sources

- Hostname: `/proc/sys/kernel/hostname`
- Model: `/tmp/sysinfo/model`, `/proc/device-tree/model`
- Uptime: `/proc/uptime`
- OpenWrt version: `/etc/openwrt_release`
- Kernel: `uname -r`
- CPU info: `/proc/cpuinfo`
- Load average: `/proc/loadavg`
- Memory: `/proc/meminfo`
- Storage: `df -h`
- Temperature: `/sys/class/thermal/thermal_zone*/temp`
- Services: `/etc/init.d/*`

## Gauge Visualization

The overview page displays three circular gauges:

### CPU Load Gauge
- Percentage calculated from 1-minute load average divided by core count
- Green: < 75%
- Orange: 75-90%
- Red: > 90%

### Memory Gauge
- Percentage of memory used
- Shows "Used MB / Total MB"
- Color-coded like CPU

### Disk Gauge
- Percentage of root filesystem used
- Shows "Used / Total Size"
- Color-coded like CPU

## Security Considerations

- Service actions require write permissions in ACL
- Backup data contains sensitive configuration
- Reboot action is irreversible
- Log filtering does not sanitize sensitive data in logs

## Troubleshooting

### Services Not Showing

Check if services exist:
```bash
ls /etc/init.d/
```

### Health Metrics Not Accurate

Verify system files are accessible:
```bash
cat /proc/meminfo
cat /proc/loadavg
df -h
```

### Backup Creation Fails

Ensure sysupgrade is available:
```bash
which sysupgrade
```

### Temperature Not Displayed

Check thermal zones:
```bash
ls /sys/class/thermal/thermal_zone*/temp
```

## License

Apache-2.0

## Maintainer

CyberMind <contact@cybermind.fr>

## Version

0.1.0

## Changelog

### v0.1.0 (2025-12-26)
- **STABLE RELEASE** - Production ready
- Fixed overview.js: Updated to use new health data structure (cpu.usage, memory.usage, disk.usage instead of deprecated fields)
- Fixed health view: Complete restructure of get_health RPCD method with proper metrics
  - CPU: usage %, status (ok/warning/critical), load averages, cores count
  - Memory: usage %, status, detailed KB metrics
  - Disk: root filesystem usage %, status, size metrics
  - Temperature: system temperature with status
  - Network: WAN connectivity check
  - Services: running vs failed count
  - Overall health score: 0-100 based on all metrics
  - Dynamic recommendations: actionable alerts based on thresholds
- Fixed settings view: Complete implementation with UCI backend
  - Added get_settings and save_settings RPCD methods
  - General settings: auto-refresh, health check, debug mode, intervals
  - Alert thresholds: configurable CPU, memory, disk, temperature limits
  - Scheduled tasks configuration
  - Upload and support information
- Fixed ACL permissions: Added get_settings (read) and save_settings (write) to ACL
- Fixed API module: Correct usage of baseclass.extend() pattern
- Fixed view imports: Use 'require system-hub/api as API' instead of L.require()
- All 12 RPC methods working correctly
- Comprehensive validation passing

### v0.0.2
- Initial implementation with basic system monitoring and service management
