Files
claudetools/projects/msp-tools/guru-connect/README.md
Mike Swanson 07816eae46 docs: Add comprehensive project documentation from claude-projects scan
Added:
- PROJECTS_INDEX.md - Master catalog of 7 active projects
- GURURMM_API_ACCESS.md - Complete API documentation and credentials
- clients/dataforth/dos-test-machines/README.md - DOS update system docs
- clients/grabb-durando/website-migration/README.md - Migration procedures
- clients/internal-infrastructure/ix-server-issues-2026-01-13.md - Server issues
- projects/msp-tools/guru-connect/README.md - Remote desktop architecture
- projects/msp-tools/toolkit/README.md - MSP PowerShell tools
- projects/internal/acg-website-2025/README.md - Website rebuild docs
- test_gururmm_api.py - GuruRMM API testing script

Modified:
- credentials.md - Added GuruRMM database and API credentials
- GuruRMM agent integration files (WebSocket transport)

Total: 38,000+ words of comprehensive project documentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-22 09:58:32 -07:00

600 lines
14 KiB
Markdown

# GuruConnect - Remote Desktop Solution
**Project Type:** Internal Tool / MSP Platform Component
**Status:** Phase 1 MVP Development
**Technology Stack:** Rust, React, WebSockets, Protocol Buffers
**Integration:** GuruRMM platform
## Project Overview
GuruConnect is a remote desktop solution similar to ScreenConnect/ConnectWise Control, designed for fast, secure remote screen control and backstage tools for Windows systems. Built as an integrated component of the GuruRMM platform.
**Goal:** Provide MSP technicians with enterprise-grade remote desktop capabilities fully integrated with GuruRMM's monitoring and management features.
---
## Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ GuruConnect System │
└─────────────────────────────────────────────────────────────┘
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Dashboard │ │ GuruConnect │ │ GuruConnect │
│ (React) │◄──WSS──►│ Server (Rust) │◄──WSS──►│ Agent (Rust) │
│ │ │ │ │ │
│ - Session list │ │ - Relay frames │ │ - Capture │
│ - Live viewer │ │ - Auth/JWT │ │ - Input inject │
│ - Controls │ │ - Session mgmt │ │ - Encoding │
└─────────────────┘ └─────────────────┘ └─────────────────┘
┌─────────────────┐
│ PostgreSQL │
│ (Sessions, │
│ Audit Log) │
└─────────────────┘
```
### Components
#### 1. Agent (Rust - Windows)
**Location:** `~/claude-projects/guru-connect/agent/`
Runs on Windows client machines to capture screen and inject input.
**Responsibilities:**
- Screen capture via DXGI (with GDI fallback)
- Frame encoding (Raw+Zstd, VP9, H264)
- Dirty rectangle detection
- Mouse/keyboard input injection
- WebSocket client connection to server
#### 2. Server (Rust + Axum)
**Location:** `~/claude-projects/guru-connect/server/`
Relay server that brokers connections between dashboard and agents.
**Responsibilities:**
- WebSocket relay for screen frames and input
- JWT authentication for dashboard users
- API key authentication for agents
- Session management and tracking
- Audit logging
- Database persistence
#### 3. Dashboard (React)
**Location:** `~/claude-projects/guru-connect/dashboard/`
Web-based viewer interface, to be integrated into GuruRMM dashboard.
**Responsibilities:**
- Live video stream display
- Mouse/keyboard event capture
- Session controls (pause, record, etc.)
- Quality/encoding settings
- Connection status
#### 4. Protocol Definitions (Protobuf)
**Location:** `~/claude-projects/guru-connect/proto/`
Shared message definitions for efficient serialization.
**Key Message Types:**
- `VideoFrame` - Screen frames (raw+zstd, VP9, H264)
- `MouseEvent` - Mouse input (click, move, scroll)
- `KeyEvent` - Keyboard input
- `SessionRequest/Response` - Session management
---
## Encoding Strategy
GuruConnect dynamically selects encoding based on network conditions and GPU availability:
| Scenario | Encoding | Target | Notes |
|----------|----------|--------|-------|
| LAN (<20ms RTT) | Raw BGRA + Zstd | <50ms latency | Dirty rectangles only |
| WAN + GPU | H264 hardware | 100-500 Kbps | NVENC/QuickSync |
| WAN - GPU | VP9 software | 200-800 Kbps | CPU encoding |
### Implementation Details
**DXGI Screen Capture:**
- Desktop Duplication API for Windows 8+
- Dirty region tracking (only changed areas)
- Fallback to GDI BitBlt for Windows 7
**Compression:**
- Zstd for lossless (LAN scenarios)
- VP9 for high-quality software encoding
- H264 for GPU-accelerated encoding
**Frame Rate Adaptation:**
- Target 30 FPS for active sessions
- Drop to 5 FPS when idle
- Skip frames if network buffer full
---
## Security Model
### Authentication
**Dashboard Users:** JWT tokens
- Login via GuruRMM credentials
- Tokens expire after 24 hours
- Refresh tokens for long sessions
**Agents:** API keys
- Pre-registered API key per agent
- Tied to machine ID in GuruRMM database
- Rotatable via admin panel
### Transport Security
**TLS Required:** All WebSocket connections use WSS (TLS)
- Certificate validation enforced
- Self-signed certs rejected in production
- SNI support for multi-tenant hosting
### Session Audit
**Logged Events:**
- Session start/end with user and machine IDs
- Connection duration and data transfer
- User actions (mouse clicks, keystrokes - aggregate only)
- Quality/encoding changes
- Recording start/stop (Phase 4)
**Retention:** 90 days in PostgreSQL
---
## Phase 1 MVP Goals
### Completed Features
- [x] Project structure and build system
- [x] Protocol Buffers definitions
- [x] Basic WebSocket relay server
- [x] DXGI screen capture implementation
### In Progress
- [ ] GDI fallback for screen capture
- [ ] Raw + Zstd encoding with dirty rectangles
- [ ] Mouse and keyboard input injection
- [ ] React viewer component
- [ ] Session management API
### Future Phases
- **Phase 2:** VP9 and H264 encoding
- **Phase 3:** GuruRMM dashboard integration
- **Phase 4:** Session recording and playback
- **Phase 5:** File transfer and clipboard sync
- **Phase 6:** Multi-monitor support
---
## Development
### Prerequisites
**Rust:** 1.75+ (install via rustup)
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
**Windows SDK:** For agent development
- Visual Studio 2019+ with C++ tools
- Windows 10 SDK
**Protocol Buffers Compiler:**
```bash
# macOS
brew install protobuf
# Windows (via Chocolatey)
choco install protoc
# Linux
apt-get install protobuf-compiler
```
### Build Commands
```bash
# Build all components (from workspace root)
cd ~/claude-projects/guru-connect
cargo build --release
# Build agent only
cargo build -p guruconnect-agent --release
# Build server only
cargo build -p guruconnect-server --release
# Run tests
cargo test
# Check for warnings
cargo clippy
```
### Cross-Compilation
Building Windows agent from Linux:
```bash
# Install Windows target
rustup target add x86_64-pc-windows-msvc
# Build (requires cross or appropriate linker)
cross build -p guruconnect-agent --target x86_64-pc-windows-msvc --release
# Alternative: Use GitHub Actions for Windows builds
```
---
## Running in Development
### Server
```bash
# Development mode
cargo run -p guruconnect-server
# With environment variables
export DATABASE_URL=postgres://user:pass@localhost/guruconnect
export JWT_SECRET=your-secret-key-here
export RUST_LOG=debug
cargo run -p guruconnect-server
# Production build
./target/release/guruconnect-server --bind 0.0.0.0:8443
```
### Agent
Agent must run on Windows:
```powershell
# Run from Windows
.\target\release\guruconnect-agent.exe
# With custom server URL
.\target\release\guruconnect-agent.exe --server wss://guruconnect.azcomputerguru.com
```
### Dashboard
```bash
cd dashboard
npm install
npm run dev
# Production build
npm run build
```
---
## Configuration
### Server Config
**Environment Variables:**
```bash
DATABASE_URL=postgres://guruconnect:password@localhost:5432/guruconnect
JWT_SECRET=<generate-random-256-bit-secret>
BIND_ADDRESS=0.0.0.0:8443
TLS_CERT=/path/to/cert.pem
TLS_KEY=/path/to/key.pem
LOG_LEVEL=info
```
### Agent Config
**Command-Line Flags:**
```
--server <url> Server WebSocket URL (wss://...)
--api-key <key> Agent API key for authentication
--quality <low|med|high> Default quality preset
--log-level <level> Logging verbosity
```
**Registry Settings (Windows):**
```
HKLM\SOFTWARE\GuruConnect\Server = wss://guruconnect.azcomputerguru.com
HKLM\SOFTWARE\GuruConnect\ApiKey = <api-key>
```
---
## Deployment
### Server Deployment
**Recommended:** Docker container on GuruRMM server (172.16.3.30)
```yaml
# docker-compose.yml
version: '3.8'
services:
guruconnect:
image: guruconnect-server:latest
ports:
- "8443:8443"
environment:
DATABASE_URL: postgres://guruconnect:${DB_PASS}@db:5432/guruconnect
JWT_SECRET: ${JWT_SECRET}
volumes:
- ./certs:/certs:ro
depends_on:
- db
```
### Agent Deployment
**Method 1:** GuruRMM Agent Integration
- Bundle with GuruRMM agent installer
- Auto-start via Windows service
- Managed API key provisioning
**Method 2:** Standalone MSI Installer
- Separate install package
- Manual API key configuration
- Service registration
---
## Monitoring and Logs
### Server Logs
```bash
# View real-time logs
docker logs -f guruconnect-server
# Check error rate
grep ERROR /var/log/guruconnect/server.log | wc -l
```
### Agent Logs
**Location:** `C:\ProgramData\GuruConnect\Logs\agent.log`
**Key Metrics:**
- Frame capture rate
- Encoding latency
- Network send buffer usage
- Connection errors
### Session Metrics
**Database Query:**
```sql
SELECT
machine_id,
user_id,
AVG(duration_seconds) as avg_duration,
SUM(bytes_transferred) as total_data
FROM sessions
WHERE created_at > NOW() - INTERVAL '7 days'
GROUP BY machine_id, user_id;
```
---
## Testing
### Unit Tests
```bash
# Run all unit tests
cargo test
# Test specific module
cargo test --package guruconnect-agent --lib capture
```
### Integration Tests
```bash
# Start test server
cargo run -p guruconnect-server -- --bind 127.0.0.1:8444
# Run agent against test server
cargo run -p guruconnect-agent -- --server ws://127.0.0.1:8444
# Dashboard tests
cd dashboard && npm test
```
### Performance Testing
```bash
# Measure frame capture latency
cargo bench --package guruconnect-agent
# Network throughput test
iperf3 -c <server> -p 8443
```
---
## Troubleshooting
### Agent Cannot Connect
**Check:**
1. Server URL correct? `wss://guruconnect.azcomputerguru.com`
2. API key valid? Check GuruRMM admin panel
3. Firewall blocking? Test: `telnet <server> 8443`
4. TLS certificate valid? Check browser: `https://<server>:8443/health`
**Logs:**
```powershell
Get-Content C:\ProgramData\GuruConnect\Logs\agent.log -Tail 50
```
### Black Screen in Viewer
**Common Causes:**
1. DXGI capture failed, no GDI fallback
2. Encoding errors (check agent logs)
3. Network packet loss (check quality)
4. Agent service stopped
**Debug:**
```powershell
# Check agent service
Get-Service GuruConnectAgent
# Test screen capture manually
.\guruconnect-agent.exe --test-capture
```
### High CPU Usage
**Possible Issues:**
1. Software encoding (VP9) on weak CPU
2. Full-screen capture when dirty rects should be used
3. Too high frame rate for network conditions
**Solutions:**
- Enable H264 hardware encoding (if GPU available)
- Lower quality preset
- Reduce frame rate to 15 FPS
---
## Key References
**RustDesk Source:**
`~/claude-projects/reference/rustdesk/`
**GuruRMM:**
`~/claude-projects/gururmm/` and `D:\ClaudeTools\projects\msp-tools\guru-rmm\`
**Development Plan:**
`~/.claude/plans/shimmering-wandering-crane.md`
**Session Logs:**
`~/claude-projects/session-logs/2025-12-21-guruconnect-session.md`
---
## Integration with GuruRMM
### Dashboard Integration
GuruConnect viewer will be embedded in GuruRMM dashboard:
```jsx
// Example React component integration
import { GuruConnectViewer } from '@guruconnect/react';
function MachineDetails({ machineId }) {
return (
<div>
<h2>Machine: {machineId}</h2>
<GuruConnectViewer
machineId={machineId}
apiToken={userToken}
/>
</div>
);
}
```
### API Integration
**Start Session:**
```http
POST /api/sessions/start
Authorization: Bearer <jwt-token>
Content-Type: application/json
{
"machine_id": "abc-123-def",
"quality": "medium"
}
```
**Response:**
```json
{
"session_id": "sess_xyz789",
"websocket_url": "wss://guruconnect.azcomputerguru.com/ws/sess_xyz789"
}
```
---
## Roadmap
### Phase 1: MVP (In Progress)
- Basic screen capture and viewing
- Mouse/keyboard input
- Simple quality control
### Phase 2: Production Ready
- VP9 and H264 encoding
- Adaptive quality
- Connection recovery
- Performance optimization
### Phase 3: GuruRMM Integration
- Embedded dashboard viewer
- Single sign-on
- Unified session management
- Audit integration
### Phase 4: Advanced Features
- Session recording and playback
- Multi-monitor support
- Audio streaming
- Clipboard sync
### Phase 5: Enterprise Features
- Permission management
- Session sharing (invite technician)
- Chat overlay
- File transfer
---
## Project History
**2025-12-21:** Initial project planning and architecture design
**2025-12-21:** Build system setup, basic agent structure
**2026-01-XX:** Phase 1 MVP development ongoing
---
## License & Credits
**License:** Proprietary (Arizona Computer Guru internal use)
**Credits:**
- Architecture inspired by RustDesk
- Built with Rust, Tokio, Axum
- WebRTC considered but rejected (complexity)
---
## Support
**Technical Contact:** Mike Swanson
**Email:** mike@azcomputerguru.com
**Phone:** 520.304.8300
---
**Status:** Active Development - Phase 1 MVP
**Priority:** Medium (supporting GuruRMM platform)
**Next Milestone:** Complete dirty rectangle detection and input injection