7.3 KiB
7.3 KiB
RAIDGuard X - GUI Client/Server Architecture
A modern Rust-based GUI application for managing RAID storage systems.
Architecture
┌─────────────────────────────────────────────────────────────────────┐
│ raidguard_x_gui_client (Slint GUI) │
│ - Cross-platform UI (macOS, Windows, Linux) │
│ - TCP connection to server │
│ - Real-time data display │
└─────────────────────────┬───────────────────────────────────────────┘
│ TCP JSON Protocol (:8923)
▼
┌─────────────────────────────────────────────────────────────────────┐
│ raidguard_x_gui_server (Mock/Real Backend) │
│ - Provides RAID controller data │
│ - Currently serves mock data │
│ - Future: In-Band API to real RAID systems │
└─────────────────────────────────────────────────────────────────────┘
Project Structure
raidguard_x_gui_server/ # Data server
├── Cargo.toml
├── src/
│ ├── main.rs # Entry point
│ ├── lib.rs
│ ├── server.rs # TCP server
│ ├── protocol/ # JSON message protocol
│ ├── handlers/ # Request handlers
│ └── mock/ # Mock data provider
raidguard_x_gui_client/ # GUI client
├── Cargo.toml
├── build.rs # Slint build script
├── src/
│ ├── main.rs # Entry point + Slint integration
│ ├── lib.rs
│ ├── app.rs # App state management
│ ├── models/ # Data models
│ └── protocol/ # Client protocol
└── ui/
└── main_window.slint # Slint UI definition
Build Requirements
- Rust 1.70+
- For GUI client:
xcode-select(macOS) or equivalent
Build Instructions
Server
cd raidguard_x_gui_server
cargo build --release
Run:
# Default port 8923
cargo run --release
# Custom port
SERVER_ADDR=127.0.0.1:8923 cargo run --release
Client
cd raidguard_x_gui_client
cargo build --release
Run:
cargo run --release
Protocol
Request Format
{
"id": "uuid-v4",
"type": "request",
"action": "get_controllers",
"params": {}
}
Response Format
{
"id": "uuid-v4",
"type": "response",
"status": "success",
"data": { ... },
"error": null
}
Available Actions
| Action | Description |
|---|---|
get_controllers |
Get all controllers |
get_raids |
Get RAID arrays |
get_disks |
Get physical disks |
get_events |
Get event log |
ping |
Health check |
Development
Testing the Server
# Terminal 1: Start server
cd raidguard_x_gui_server
cargo run --release
# Terminal 2: Connect with netcat
nc localhost 8923
# Send request:
{"id":"test","type":"request","action":"get_controllers","params":{}}
# Response:
{"id":"test","type":"response","status":"success","data":{"controllers":[...]}}
Java Source Code Architecture (Reference for Migration)
1. System Architecture
┌─────────────────────────────────────────────────────────────┐
│ GUI Client (Swing) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ frmMain │ │ frmSettings │ │ frmCreateArray │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ jpController │ │ dlgServer │ │ dlgDiskInfo │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Global Data Layer │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ PageDataDB.java (~7300 lines) │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Protocol Layer │
│ ┌──────────────────┐ ┌──────────────────────────┐ │
│ │ InBandAPI │ │ SNMP │ │
│ │ Port 8922 │ │ Port 162/8922 │ │
│ └──────────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
2. In-Band API Protocol (Port 8922)
OpCodes:
| OpCode | Function |
|---|---|
| 0x01 | GET_PAGE (read info pages) |
| 0x1D | SEND_PASSWORD (authentication) |
| 0xBC | Unlock |
| 0x1B | Erase RAID |
| 0xCC | Create RAID |
| 0xCE | Set Global Config |
| 0x26 | Commit Config |
Page Codes:
- Page 0: Controller Info
- Page 1: RAID Snapshot
- Page 7: LUN Map Table
- Page 10-14: RAID Info
- Page 16-17: Disk/Slice Names
- Page 20: Array Info
- Page 26: Enclosure Info
- Page 27: Disk List
3. Key Java Files
| File | Description |
|---|---|
InBandAPI/SendCmd.java |
TCP communication core |
InBandAPI/BasePage.java |
Abstract base for page data |
PageDataDB.java |
Global database (~7300 lines) |
frmMain.java |
Main window (~318KB) |
License
Proprietary - Accusys Inc.