Files
rust_raidguardx/README_GUI.md
T

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.