# 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 ```bash cd raidguard_x_gui_server cargo build --release ``` Run: ```bash # Default port 8923 cargo run --release # Custom port SERVER_ADDR=127.0.0.1:8923 cargo run --release ``` ### Client ```bash cd raidguard_x_gui_client cargo build --release ``` Run: ```bash cargo run --release ``` ## Protocol ### Request Format ```json { "id": "uuid-v4", "type": "request", "action": "get_controllers", "params": {} } ``` ### Response Format ```json { "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 ```bash # 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":[...]}} ``` --- ## Menu Bar & Toolbar Functionality ### Menu Bar Structure ``` ┌─────────────────────────────────────────────────────────────────┐ │ [File] [Controller] [Language] [Help] │ ├─────────────────────────────────────────────────────────────────┤ ``` #### File Menu | Item | Function | |------|----------| | Exit | Close application | | Load Controller List | Load saved controller list | | **Language** (submenu) | English / Japanese | #### Controller Menu | Item | Function | |------|----------| | Manual Add Controller | Manually add a controller | | Update System Code | Firmware update | | Dump Controller Log | Export controller log | | Shutdown | Shutdown controller | | **Update** (submenu) | | | - Update Expander Code | Update expander firmware | | - Update JBOD Code | Update JBOD firmware | | - Update Boot Code | Update boot firmware | | - Update BIOS/EFI | Update BIOS/EFI | | Disk RW Test | Run disk read/write test | | Polling On/Off | Toggle polling | #### Help Menu | Item | Function | |------|----------| | Help Center | Open local help | | Play Menu | Debug/testing menu | | About | Show About dialog | ### Toolbar Buttons | Button | Function | |--------|----------| | **+** (Add) | Add Controller | | **-** (Remove) | Remove Controller | | **Create Array** | Create new RAID array | | **Delete Array** | Delete RAID array | | **Mirror** | Mirror configuration | | **Email** | Email notification settings | | **Settings** | Application preferences | | **Advanced** | Advanced operations menu | ### Advanced Menu (frmAdvanced) | Category | Functions | |----------|-----------| | **LUN Mask** | LUN masking configuration | | **Slicing** | Storage slicing | | **Snapshot** | Snapshot management | | **Migrate** | Migration operations | | **Expansion** | Storage expansion | | **Maintenance** | System maintenance | | **Email Settings** | Email configuration | --- ## 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.